简单的实现了Hibernate工具自动生成Class文件的功能。
package com.xiva.demo.util; import java.io.File; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Types; import org.apache.commons.io.FileUtils; /** * * <功能简述> <详细描述> * * @author XIVA * @version [1.0, 2013-5-1] * @see [相关类/方法] * @since [产品、模块版本] */ public class GenarateDomainClass { private static Connection conn; private static StringBuffer classString; private static String lineSep = System.getProperty("line.separator"); private static String fileName; static { try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } private static void ininConn() throws SQLException { conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/blogsysdb?useUnicode=true&characterEncoding=utf-8", "blogdb", "blogdb"); } private static String getDataType(int type, int scale) { String dataType = ""; switch (type) { case Types.LONGVARCHAR: // -1 dataType = "Long"; break; case Types.CHAR: // 1 dataType = "Character"; break; case Types.NUMERIC: // 2 switch (scale) { case 0: dataType = "Number"; break; case -127: dataType = "Float"; break; default: dataType = "Number"; } break; case Types.VARCHAR: // 12 dataType = "String"; break; case Types.DATE: // 91 dataType = "Date"; break; case Types.TIMESTAMP: // 93 dataType = "Date"; break; case Types.BLOB: dataType = "Blob"; break; default: dataType = "String"; } return dataType; } private static void queryTable(String tableName) throws SQLException { PreparedStatement preStat = conn.prepareStatement("select * from " + tableName); ResultSet result = preStat.executeQuery(); ResultSetMetaData resultMeta = result.getMetaData(); int colCount = resultMeta.getColumnCount(); String clazzName = convertName(tableName, true); classString.append("public class " + clazzName + " extends BaseEntity {").append(lineSep); fileName = clazzName; for (int i = 1; i <= colCount; i++) { String dbColName = resultMeta.getColumnName(i); String colType = getDataType(resultMeta.getColumnType(i), resultMeta.getScale(i)); String colName = convertName(dbColName, false); if (!dbColName.equals(colName)) { classString.append("@Column(name = \"" + dbColName + "\")").append(lineSep); } classString.append("private " + colType + " " + colName + ";").append(lineSep); } classString.append("}"); } private static String convertName(String dbname, boolean isTable) { StringBuffer className = new StringBuffer(32); String dbNameLow = dbname.toLowerCase(); String[] names = dbNameLow.split("_"); int len = names.length; if (len > 1) { for (int i = 0; i < len; i++) { String name = names[i]; if (i == 0 && !isTable) { className.append(name); continue; } className.append(name.substring(0, 1).toUpperCase()); className.append(name.substring(1)); } } else { className.append(dbNameLow); } return className.toString(); } public static void ininData(String tableName) { classString = new StringBuffer(1024); classString.append("package com.xiva.domain;").append(lineSep); classString.append(lineSep); classString.append("@Entity").append(lineSep); classString.append("@Table(name = \"" + tableName + "\")").append(lineSep); } public static void createFile(String path) { String filePath = path + File.separator + fileName + ".java"; File file = new File(filePath); try { System.out.println(filePath); boolean isCreate = file.createNewFile(); System.out.println(isCreate); FileUtils.write(file, classString, "utf-8"); } catch (IOException e) { e.printStackTrace(); } } /** * * @param args */ public static void main(String[] args) throws SQLException { String tableName = "iv_resource"; String path = "F:\\WorkSpace\\GitProjects\\xivamsys\\src\\com\\xiva\\domain"; ininConn(); ininData(tableName); queryTable(tableName); createFile(path); System.out.println(classString); } }
生成结果如下所示:
package com.xiva.domain; @Entity @Table(name = "iv_function") public class IvFunction extends BaseEntity { @Column(name = "func_id") private String funcId; @Column(name = "func_name") private String funcName; @Column(name = "func_desc") private String funcDesc; }
get set 的生成可以通过ctrl + shift + s快捷生成。导入的类,可以通过Ctrl + shift + o,格式化可以通过Ctrl + shift + f;文件路径可以指定。
相关推荐
线程安全的,一个数据库对应一个Sessionfactory(一般一个应用程序对应一个SessionFactory就够了) 3.是一个很大的缓存,本身维护了一个可配置的二级缓存 4.用来构建Session对象 Configuration 1.启动和配置...
Hibernate 是一个开源的O/R mappimg的框架,基于JDBC提供了一种持久性数据管理的方案,相对于EntityBean来说是相当轻量级的。...还有一个ddl2hbm,是根据数据库来导出表结构,并生成映射文件和POJO class。
<generator class="assigned"></generator> //数据库中的主键生成策略 数据库中表的其它字段所对应的持久化对象中的属性名" column="对应数据库中表的其它字段名" type="java.lang.String(数据库中其它字段...
springmvc+mybatis整合bootstrap前端框架的SMB架构,利用MybatisGenerator-v0.1.1.jar反向生成底层代码,专注于业务代码编写,达到快速开发的目的。 修改步骤: 一、修改项目名称、及包名(此步骤可忽略)。 二、...
如果你用的不是window系统,更改成与您对应的授权的文件.特别注意的是”/”反斜杠符号 ,拷贝过来的文件里原本是没有的 (6) 修改reportConfig.xml文件 在其中添加如下配置内容,主要用于数据库的连接,需要主要的地方...
name 定义了被标注字段在数据库表中所对应字段的名称; mapper service Controller 测试 报错500 实体类@table路径写错 新增 Controller @RequestBody 常用其来处理application/json类型 子主题 2 将...
3. 建立与数据库对应的 java class,以及映射文件. 在src_user下建立package:com.yihaomen.mybatis.model ,并在这个 package 下建立 User 类: 程序代码 程序代码 package com.yihaomen.mybatis.model; public class...
首先,必须定义一个能够从连接池中抽取出本地数据库JDBC对象(如OracleConnection,OracleResultSet等)的抽取器:nativeJdbcExtractor,这样才可以执行一些特定数据库的操作。对于那些仅封装了Connection而未包括...
例如数据表中用户选择字段方式的改变,用户查询的需求也会不断的更新和完善。所有这些,都要求系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要...
程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执 行。 大多数情况下( 特别是对新项目,新系统的开发而言) ,这样的机制无往不利...
该标签的主要作用是让 mondrian 执行指定的查询,该标签需要指定一个 JDBC 的 datasource 或单独指定 JDBC 连接的各个属性从而可以让 mondrian 连接到指定的数据库。 它的用法如下: jdbcDriver=...
13.6.3 利用正则式对字符串进行分析 268 13.7 小结 269 第14章 集合框架——强大的对象管理器 270 14.1 Object类——所有类的超类 270 14.1.1 toString方法的重写 270 14.1.2 equals方法的意义 271 ...
可扩展的使用 JDBC针对不同的数据库编程,Facade提供了一种灵活的实现. 设计模式之 Composite(组合) 就是将类用树形结构组合成一个单位.你向别人介绍你是某单位,你是单位中的一个元素,别人和你做买卖,相当于 和...
@DB(url="jdbc:mysql://127.0.0.1:3306/test" ,username="root", password="root") 一些基本的数据库操作: //insert new User().setName("zzg.zhou").setStatus(1).save(); //parse data from type: Map, ...
SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。 对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上...
24、Static Nested Class 和 Inner Class的不同。 Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。 25、JSP中动态...
描述使用JDBC连接数据库的过程 72.EJB分为几类?什么是BMP,CMP? 73.什么是JNDI? 74.ADO是什么?ActiveX数据对象,是一个应用级程序接口. 75.四种JDBC方式?目前的版本? 76.EJB有哪几种?区别是什么? 77.JavaBean与...