java读取数据库指定表,生成bean,获取主键,自动生成get、set方法
2015-05-07 15:59
781 查看
开发一个程序涉及很多数据库表,之前介绍过用
EXCEL通过VBA生成SQL,自动生成创建表结构SQL
在使用mvc架构开发要将数据库表变成bean,这也是个重复性无技术含量的工作,为了打发无聊编写一个小工具,自动读取数据库并生成bean,同时生成get、set方法。import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class BeanUtil { private static final String TABLE_NAME = "TABLE_NAME"; private static final String COLUMN_NAME = "COLUMN_NAME"; private static final String DATA_TYPE = "DATA_TYPE"; private static final String DATA_SCALE = "DATA_SCALE"; private static final String ISPK = "ISPK"; private static final String COMMENTS = "COMMENTS"; public static void main(String[] args) { BeanUtil beanUtil = new BeanUtil(); beanUtil.createBean("tablename","beanname","com.test.bean","E:\\trunk\\Sources\\trust\\com\\test\\bean\\");//填写表名,bean名,bean存放路径 } @SuppressWarnings({ "rawtypes", "unchecked" }) private void createBean(String tableName,String className,String packageName,String path){ StringBuffer result = new StringBuffer(); StringBuffer getsetresult = new StringBuffer(); try{ Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "hstdc", "tdc"); Statement stat = conn.createStatement(); StringBuffer sql = new StringBuffer(); sql.append(" select ") .append(" cols.TABLE_NAME, ") .append(" cols.COLUMN_NAME, ") .append(" cols.DATA_TYPE, ") .append(" cols.DATA_SCALE, ") .append(" com.COMMENTS, ") .append(" case when cc.column_name=cols.COLUMN_NAME then 1 ") .append(" else 0 end ISPK ") .append(" from ") .append(" user_tab_cols cols, ") .append(" user_constraints ct, ") .append(" user_cons_columns cc, ") .append(" user_col_comments com ") .append(" where cols.TABLE_NAME = ct.table_name(+) ") .append(" and cols.TABLE_NAME = com.table_name(+) ") .append(" and cols.COLUMN_NAME = com.column_name(+) ") .append(" and ct.constraint_name = cc.constraint_name ") .append(" and ct.constraint_type='P' ") .append(" and ct.TABLE_NAME='") .append(tableName) .append("'"); ResultSet rs = stat.executeQuery(sql.toString()); List<Map> ls = new ArrayList<Map>(); while(rs.next()){ Map map = new HashMap<String,Object>(); String columnName = rs.getString(BeanUtil.COLUMN_NAME); String dataType = rs.getString(BeanUtil.DATA_TYPE); Integer dataScale = rs.getInt(BeanUtil.DATA_SCALE); Boolean isPK = rs.getBoolean(BeanUtil.ISPK); String comments = rs.getString(BeanUtil.COMMENTS); map.put(BeanUtil.TABLE_NAME, tableName); map.put(BeanUtil.COLUMN_NAME, columnName); map.put(BeanUtil.DATA_TYPE, dataType); map.put(BeanUtil.DATA_SCALE, dataScale); map.put(BeanUtil.ISPK, isPK); map.put(BeanUtil.COMMENTS, comments); ls.add(map); } result.append("package ").append(packageName).append(";\n"); result.append("import java.io.Serializable;\n"); result.append("import javax.persistence.Column;\n"); result.append("import javax.persistence.Entity;\n"); result.append("import javax.persistence.Id;\n"); result.append("import javax.persistence.Table;\n"); result.append("//Auto-Generated by com.common.uitl.BeanUtil \n"); result.append("@Entity\n") .append("@Table(name=\"" + tableName + "\")\n") .append("public class " + className + " implements Serializable{\n"); for(int i=0; i<ls.size(); i++){ Map map = ls.get(i); String columnName = (String)map.get(BeanUtil.COLUMN_NAME); String varName = columnName.toLowerCase().substring(2);//截取两位之后的,由于字段命名柜子是类型加下划线,如:L_NO,C_NAME String getsetName=varName.replaceFirst(varName.substring(0, 1),varName.substring(0, 1).toUpperCase()); String comments = (String)map.get(BeanUtil.COMMENTS); if(comments==null || comments.equals("")) comments = "无"; String dataType = (String)map.get(BeanUtil.DATA_TYPE); Integer dataScale = (Integer)map.get(BeanUtil.DATA_SCALE); Boolean isPK = (Boolean)map.get(BeanUtil.ISPK); //System.out.println(dataType); String varType = null; if(dataType.equals("DATE")){ varType = "Date"; }else if(dataType.equals("NUMBER") && dataScale > 0){ varType = "Double"; }else if(dataType.equals("NUMBER")){ varType = "Integer"; }else{ varType = "String"; } if(isPK){ result.append("\t @Id\n"); } result.append("\t @Column(name=\"" + columnName + "\")" + "\n") .append("\t private " + varType + " " + varName + ";" + "\t\t //" + comments + "\n\n"); getsetresult.append("\t public " + varType + " " + "get"+getsetName +"(){\n") .append("\t\t return "+varName+";"+"\n") .append("\t } \n\n") .append("\t public void " + "set"+getsetName +"("+varType + " " + varName +"){"+"\n") .append("\t\t"+"this."+varName+"="+varName+";"+"\n") .append("\t } \n\n"); } result.append(getsetresult).append("}"); File file = new File(path + className + ".java"); BufferedWriter bw = new BufferedWriter(new FileWriter(file)); bw.write(result.toString()); bw.flush(); bw.close(); }catch(Exception e){ e.printStackTrace(); } } }结果示例:
import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="TEST") public class Tset implements Serializable{ @Id @Column(name="C_MESTYPE") private String mestype; //报文类型 @Column(name="C_MESTYPE_NAME") private String mestype_name; //类型名称 @Column(name="C_CONTENT") private String content; //报文内容 public String getMestype(){ return mestype; } public void setMestype(String mestype){ this.mestype=mestype; } public String getMestype_name(){ return mestype_name; } public void setMestype_name(String mestype_name){ this.mestype_name=mestype_name; } public String getContent(){ return content; } public void setContent(String content){ this.content=content; } }
相关文章推荐
- 自动生成set javabean如(rs.getInt("field"))
- Java -- JDBC 获取数据库自动 生成的主键值
- Java -- JDBC 获取数据库自动 生成的主键值
- 根据库表结构自动生成java实体类(生成规范的变量及get/set方法).
- Java开发工具_Eclipse中构造方法和get_set方法的自动生成
- java实体自动生成get、set方法包
- Eclipse用法和技巧六:自动生成get和set方法1
- Eclipse用法和技巧七:自动生成get和set方法2
- 利用Excel的vba脚本根据数据库表结构自动生成java的action,bean,dao,mode,service,xml,sql,jsp等
- java 反射直接获取get/set方法的写法
- java连接数据库自动生成bean
- Myeclipse自动生成javabean的get和set方法
- VS 2012自动生成get 和set 方法
- java class的property的get和set方法生成规则
- 自动生成get,set方法
- eclipse 自动生成get/set方法
- Eclipse自动生成set,get方法
- Android Studio自动生成get,set,tostring,构造函数及重写父类的方法
- java getGeneratedKeys(获取自动递增主键)
- Java反射获取get和set方法