自动生成hibernate配置文件和对象关系映射文件
来源:互联网 发布:淘宝药品提交需求 编辑:程序博客网 时间:2024/05/22 12:16
一、根据数据表生成对应的实体和注解(GenEntityOracle.java)
package com.ant.tool;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;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.Statement;import java.util.Date;public class GenEntityOracle {// 指定实体生成所在包的路径private String packageOutPath = "com.scms.entity";// 作者名字private String authorName = "wang";// 数据库表名private String tablename = "skt_modules";// 列名数组private String[] colnames;// 列名类型数组private String[] colTypes;// 列名大小数组private int[] colSizes;// 是否需要导入包java.util.*private boolean f_util = false;// 是否需要导入包java.sql.*private boolean f_sql = false;// 数据库连接private static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL";private static final String NAME = "oracle11g";private static final String PASS = "oracle11g";private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";/* * 构造函数 */public GenEntityOracle() {// 创建连接Connection con = null;// 查要生成实体类的表String sql = "select * from " + tablename;Statement pStemt = null;try {try {Class.forName(DRIVER);} catch (ClassNotFoundException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}con = DriverManager.getConnection(URL, NAME, PASS);pStemt = (Statement) con.createStatement();ResultSet rs = pStemt.executeQuery(sql);ResultSetMetaData rsmd = rs.getMetaData();int size = rsmd.getColumnCount(); // 统计列colnames = new String[size];colTypes = new String[size];colSizes = new int[size];for (int i = 0; i < size; i++) {colnames[i] = rsmd.getColumnName(i + 1);colTypes[i] = rsmd.getColumnTypeName(i + 1);if (colTypes[i].equalsIgnoreCase("date")|| colTypes[i].equalsIgnoreCase("timestamp")) {f_util = true;}if (colTypes[i].equalsIgnoreCase("blob")|| colTypes[i].equalsIgnoreCase("char")) {f_sql = true;}colSizes[i] = rsmd.getColumnDisplaySize(i + 1);}String content = parse(colnames, colTypes, colSizes);try {File directory = new File("");String path = this.getClass().getResource("").getPath();System.out.println(path);System.out.println("src/?/"+ path.substring(path.lastIndexOf("/com/",path.length())));// String outputPath = directory.getAbsolutePath()+// "/src/"+path.substring(path.lastIndexOf("/com/",// path.length()), path.length()) + initcap(tablename) +// ".java";String outputPath = directory.getAbsolutePath() + "/src/"+ this.packageOutPath.replace(".", "/") + "/"+ initcap(tablename) + ".java";FileWriter fw = new FileWriter(outputPath);PrintWriter pw = new PrintWriter(fw);pw.println(content);pw.flush();pw.close();} catch (IOException e) {e.printStackTrace();}} catch (SQLException e) {e.printStackTrace();} finally {try {con.close();} catch (SQLException e) {e.printStackTrace();}}}/** * 功能:生成实体类主体代码 * * @param colnames * @param colTypes * @param colSizes * @return */private String parse(String[] colnames, String[] colTypes, int[] colSizes) {StringBuffer sb = new StringBuffer();sb.append("package " + this.packageOutPath + ";\r\n");sb.append("\r\n");// 判断是否导入工具包if (f_util) {sb.append("import java.util.Date;\r\n");}if (f_sql) {sb.append("import java.sql.*;\r\n");}// 注释部分sb.append("/**\r\n");sb.append("* " + tablename + " 实体类\r\n");sb.append("* \r\n");sb.append("* @hibernate.class table = \""+tablename+"\" dynamic-update = \"false\" \r\n");sb.append("* dynamic-insert = \"false\" \r\n");sb.append("* " + new Date() + " " + this.authorName + "\r\n");sb.append("*/ \r\n");// 实体部分sb.append("\r\n\r\npublic class " + initcap(tablename) + "{\r\n");processAllAttrs(sb);// 属性processAllMethod(sb);// get set方法sb.append("}\r\n");// System.out.println(sb.toString());return sb.toString();}/** * 功能:生成所有属性 * * @param sb */private void processAllAttrs(StringBuffer sb) {for (int i = 0; i < colnames.length; i++) {sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " "+ columToJave(colnames[i]) + ";\r\n");}}/** * 数据字段变成Java属性 * * @param string * @return */private String columToJave(String string) {String string2 = string.toLowerCase();StringBuilder builder = new StringBuilder(string2);for (int i = 0; i < builder.length(); i++) {if (builder.charAt(i) == '_') {// 第一次出现该符号的位置char c = builder.charAt(i + 1);c = (char) (c - 32);StringBuilder replace1 = builder.replace(i + 1, i + 2, c + "");builder = replace1.replace(i, i + 1, "");// 最后一次出现该符号的位置int of = builder.lastIndexOf("_", string2.length());if (of != -1) {char c1 = builder.charAt(of + 1);c1 = (char) (c1 - 32);StringBuilder replace2 = builder.replace(of + 1, of + 2, c1+ "");builder = replace2.replace(of, of + 1, "");;}}}return builder.toString();}/** * 功能:生成所有方法 * * @param sb */private void processAllMethod(StringBuffer sb) {for (int i = 0; i < colnames.length; i++) { if(columToJave(colnames[i]).equals("id")){sb.append("\t/** \r\n");sb.append("\t* @hibernate.id column = \""+colnames[i]+"\" generator-class=\"sequence\" \r\n"); sb.append("\t* @return \r\n"); sb.append("\t*/\r\n");}else{sb.append("\t/** \r\n");sb.append("\t* @hibernate.property column = \""+colnames[i]+"\" \r\n"); sb.append("\t* @return \r\n"); sb.append("\t*/\r\n");}sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get"+ initcaps(columToJave(colnames[i])) + "(){\r\n");sb.append("\t\treturn " + columToJave(colnames[i]) + ";\r\n");sb.append("\t}\r\n");sb.append("\tpublic void set" + initcaps(columToJave(colnames[i]))+ "(" + sqlType2JavaType(colTypes[i]) + " "+ columToJave(colnames[i]) + "){\r\n");sb.append("\t\tthis." + columToJave(colnames[i]) + "="+ columToJave(colnames[i]) + ";\r\n");sb.append("\t}\r\n");}}/** * 功能:将输入字符串的首字母改成大写 * * @param str * @return */private String initcap(String string2) {String str = columToJave(string2);char[] ch = str.toCharArray();if (!string2.contains("_")) {ch[0] = (char) (ch[0] - 32);} else {for (int j = 0; j < 3; j++) {ch[j] = (char) (ch[j] - 32);}}return new String(ch);}private String initcaps(String str) {char[] ch = str.toCharArray();if (ch[0] >= 'a' && ch[0] <= 'z') {ch[0] = (char) (ch[0] - 32);}return new String(ch);}/** * 功能:获得列的数据类型 * * @param sqlType * @return */private String sqlType2JavaType(String sqlType) {if (sqlType.equalsIgnoreCase("binary_double")) {return "double";} else if (sqlType.equalsIgnoreCase("binary_float")) {return "float";} else if (sqlType.equalsIgnoreCase("blob")) {return "byte[]";} else if (sqlType.equalsIgnoreCase("blob")) {return "byte[]";} else if (sqlType.equalsIgnoreCase("char")|| sqlType.equalsIgnoreCase("nvarchar2")|| sqlType.equalsIgnoreCase("varchar2")) {return "String";} else if (sqlType.equalsIgnoreCase("date")|| sqlType.equalsIgnoreCase("timestamp")|| sqlType.equalsIgnoreCase("timestamp with local time zone")|| sqlType.equalsIgnoreCase("timestamp with time zone")) {return "Date";} else if (sqlType.equalsIgnoreCase("number")) {return "Long";}return "String";}/** * 出口 TODO * * @param args */public static void main(String[] args) {new GenEntityOracle();}}二、编写ant文件生成hibernate的配置文件和关系映射文件(build.xml)
<?xml version="1.0" encoding="UTF-8"?><project name="OA系统构造脚本" default="生成hibernate配置文件" basedir="."><property name="src.dir" value="${basedir}" /><!--这里使用到xdoclet插件,官方可下载--><property name="xdoclet.home" value="E:\Ant\xdoclet-plugins-dist-1.0.4-bin\xdoclet-plugins-dist-1.0.4" /><!-- build classpath --><path id="xdoclet.task.classpath"><fileset dir="${xdoclet.home}/lib"><include name="**/*.jar" /></fileset></path><taskdef name="xdoclet" classname="org.xdoclet.ant.XDocletTask" classpathref="xdoclet.task.classpath" /><target name="生成hibernate配置文件"><xdoclet><fileset dir="${src.dir}/com/scms/entity"><include name="**/*.java" /></fileset><!--jdbc配置--><component classname="org.xdoclet.plugin.hibernate.HibernateConfigPlugin" destdir="${src.dir}" version="3.0" hbm2ddlauto="update" jdbcurl="jdbc:oracle:thin:@127.0.0.1:1521:ORCL" jdbcdriver="oracle.jdbc.driver.OracleDriver" jdbcusername="oracle11g" jdbcpassword="oracle11g" dialect="org.hibernate.dialect.Oracle9Dialect" showsql="true" /></xdoclet></target><target name="生成hibernate映射文件"><property name="hibernate.merge.home" value="${src.dir}/hibernate3" /><delete><fileset dir="${src.dir}" includes="**/*.hbm.xml"/></delete><xdoclet><!--这个目录是你javaBean的位置--><fileset dir="${src.dir}/com/scms/entity"><include name="**/*.java" /></fileset><component classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin" version="3.0" destdir="${src.dir}" /></xdoclet></target></project>
三、运行GenEntityOracle.java 文件 再右键 build.xml run-->ant生成数据表对应的实体类、hibernate配置文件、实体和数据库之间的关系映射文件。
注:功能不是针对所有的根据自己的需要修改GenEntityOracle.java和 build.xml 文件
0 0
- 自动生成hibernate配置文件和对象关系映射文件
- 自动生成hibernate配置文件和对象关系映射文件
- hibernate自动生成映射关系文件
- Hibernate之配置文件以及对象关系映射文件了解
- 【Hibernate框架学习】:Hibernate进阶之详解Hibernate配置文件和对象关系映射配置文件
- Hibernate自动生成映射文件
- Hibernate 自动生成映射文件
- 通过Ant+Xdoclet生成Hibernate配置文件和映射文件
- Eclipse使用xdoclet1.2.3 生成hibernate配置文件和映射文件
- hibernate配置文件和映射文件
- Hibernate(myeclipse创建Hibernate配置文件、创建对象-关系映射文件)
- Hibernate创建对象-关系映射文件和数据库
- Hibernate学习笔记(1)----用Ant与XDoclet自动生成Hibernate配置文件与映射文件
- 用MyEclipse自动生成hibernate映射文件和实体类
- Myeclipse 自动生成hibernate实体类和映射文件步骤
- 用MyEclipse自动生成hibernate映射文件和实体类
- 用MyEclipse自动生成hibernate映射文件和实体类
- 用MyEclipse自动生成hibernate映射文件和实体类
- 戳进来!这里有你从没见过的好东西~
- HttpURLConnection网络请求工具类
- 关于财政部严控政府采购政策解读
- 财报阅读和分析
- 调用远程接口,返回数据
- 自动生成hibernate配置文件和对象关系映射文件
- hadoop HA
- 大牛和普通人的区别的经典案例:首字母大小写转换
- (html/js)多选复选框自动全选/反选实例
- 浏览器密码存储原理和渗透中的利用
- 逆波兰算法
- 欢迎使用CSDN-markdown编辑器
- NSLOG问题
- 微信小程序传值以及获取值方法