自动生成hibernate配置文件和对象关系映射文件
来源:互联网 发布:网络零售的理解 编辑:程序博客网 时间:2024/06/07 01:23
http://blog.csdn.net/wmy1230/article/details/53389845
一、根据数据表生成对应的实体和注解(GenEntityOracle.java)
[java] view plain copy print?
- 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 block
- e1.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();
- }
- }
[html] view plain copy print?
- <?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映射文件和实体类
- program
- 游戏开发思想-模块化
- 关于“关于C#装箱的疑问”帖子的个人看法
- codeforces 294C组合数学)
- Selenium 使用 Selenium+PhantomJS 以静默方式完成前端页面 UI 自动化测试
- 自动生成hibernate配置文件和对象关系映射文件
- 字符设备和块设备的区别
- C#--WinForm修改模块--实现学员信息的修改
- 大数阶乘取模
- C#中Winfrom窗体关闭方法的总结
- java学习总结(四)
- thinkphp5和phpmailer发邮件
- 数字货币开发技术原理是什么
- 无线传感器网络定位算法