思路:
1连接池读取表结构:字段名,长度,类型,备注
static String database="db2"; //数据库类型,mysql,db2,oracle 这3个必须修改
static String scheam="dwcbSchema"; //数据库名
static String tableName="T_SN_MG_SENSOR_OFFLINE_RECORD";//你要生成的表名
public static List<Map<String, String>> getCloumnDatas(String tableName, String database) throws Exception {//读取表字段信息
Connection conn = null;
if ("mysql".equals(database)) {
conn = getConnectionMysql();
}else if ("db2".equals(database)) {
conn = getConnectionDb2();
}
List<Map<String, String>> cloumnMap = new ArrayList<Map<String,String>>();
try{
DatabaseMetaData dbmd = conn.getMetaData();
ResultSet columns = dbmd.getColumns(null, null, tableName, null); // null for schema, table name, column name
while (columns.next()) {
Map<String, String> maps=new HashMap<String, String>();
String columnName = columns.getString("COLUMN_NAME");
maps.put("COLUMN_NAME",columnName );
maps.put("TYPE_NAME", columns.getString("TYPE_NAME"));
maps.put("COLUMN_SIZE", columns.getString("COLUMN_SIZE"));
maps.put("REMARKS", columns.getString("REMARKS"));
if (!cloumnMap.contains(maps))
cloumnMap.add(maps);
}
columns.close();
conn.close();
}catch (SQLException e) { System.out.println("读取数据库失败!");
}
return cloumnMap;
}
2生成java实体类domain:
public static StringBuilder createJavaStrs(String javaName, List<Map<String, String>> cloumnDatas, String database) {
StringBuilder javaFileAll = new StringBuilder();
try {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time19 = formatter.format(new Date());
//1生成字段属性,驼峰命名法
StringBuilder clounsData = new StringBuilder();
//2生成MetaData需要字段4个属性
StringBuilder clounsMetaData = new StringBuilder();
if ("db2".equals(database)) {
String metaTitle=" \r\n /** initialize the metadata. */\r\n public void initMetaData() {\r\n"+" EiColumn eiColumn;\r\n \r\n";
clounsMetaData.append(metaTitle);
}
3生成get set方法
StringBuilder clounsSetGet = new StringBuilder();
//4生成fromMap
StringBuilder clounsFromMap = new StringBuilder();
String fromT=" /**get the value from Map.\r\n * @param map - source data map\r\n */ \r\n @Override \r\n public void fromMap(Map map) { \r\n";
clounsFromMap.append(fromT);
//5生成toMap
StringBuilder clounsToMap = new StringBuilder();
String mapT=" /** set the value to Map. */\r\n @Override\r\n public Map toMap() {\r\n Map map = new HashMap();\r\n";
clounsToMap.append(mapT);
for (Map<String, String> map : cloumnDatas) {
String COLUMN_NAME = map.get("COLUMN_NAME");
String columnName=toCamelCase(COLUMN_NAME);
char str= Character.toUpperCase(columnName.charAt(0));
String strName=str+columnName.substring(1, columnName.length());
String typeName = map.get("TYPE_NAME");
String columnSize = map.get("COLUMN_SIZE");
String remarks = map.get("REMARKS");
String filed=""; //1
String meta=""; //2
String getSet=""; //3
String fromMap=""; //4
String toMap=""; //5
if (typeName.contains("int") || typeName.contains("INT")) {
filed=" /** "+remarks+" . */"+"\r\n private Integer "+columnName+" = new Integer(0);\r\n";
meta=" eiColumn = new EiColumn(\""+columnName+"\");\r\n"+ " eiColumn.setType(\""+remarks+"\");\r\n"+
" eiColumn.setScaleLength(2);\r\n"+ " eiColumn.setFieldLength("+columnSize+");\r\n"+
" eiColumn.setDescName(\""+remarks+"\");\r\n"+" eiMetadata.addMeta(eiColumn);\r\n \r\n";
getSet=" /** get the "+columnName+" - "+remarks+". */ \r\n public Integer get"+strName+"() {\r\n return this."+columnName+";\r\n }\r\n /** set the "+columnName+" - "+remarks+". */ \r\n"+
" public void set"+strName+"(Integer "+columnName+") {\r\n this."+columnName+" = "+columnName+"; \r\n };\r\n \r\n";
fromMap=" set"+strName+"(NumberUtils.toInteger(StringUtils.toString(map.get(\""+columnName+"\")), "+columnName+")); \r\n";
}else if(typeName.contains("double") || typeName.contains("DOUBLE")) {
filed=" /** "+remarks+" . */"+"\r\n private Double "+columnName+" = new Double(0.0);\r\n";
meta=" eiColumn = new EiColumn(\""+columnName+"\");\r\n"+ " eiColumn.setType(\""+remarks+"\");\r\n"+
" eiColumn.setScaleLength(2);\r\n"+ " eiColumn.setFieldLength("+columnSize+");\r\n"+
" eiColumn.setDescName(\""+remarks+"\");\r\n"+" eiMetadata.addMeta(eiColumn);\r\n \r\n";
getSet=" /** get the "+columnName+" - "+remarks+". */ \r\n public Double get"+strName+"() {\r\n return this."+columnName+";\r\n }\r\n /** set the "+columnName+" - "+remarks+". */ \r\n"+
" public void set"+strName+"(Double "+columnName+") {\r\n this."+columnName+" = "+columnName+"; \r\n };\r\n \r\n";
fromMap=" set"+strName+"(NumberUtils.toDouble(StringUtils.toString(map.get(\""+columnName+"\")), "+columnName+")); \r\n";
}else if(typeName.contains("time") || typeName.contains("TIME")) {
filed=" /** "+remarks+" . */"+"\r\n private Timestamp "+columnName+";\r\n";
meta=" eiColumn = new EiColumn(\""+columnName+"\");\r\n"+
" eiColumn.setDescName(\""+remarks+"\");\r\n"+ " eiMetadata.addMeta(eiColumn);\r\n \r\n";
getSet=" /** get the "+columnName+" - "+remarks+". */ \r\n public Timestamp get"+strName+"() {\r\n return this."+columnName+";\r\n }\r\n /** set the "+columnName+" - "+remarks+". */ \r\n"+
" public void set"+strName+"(Timestamp "+columnName+") {\r\n this."+columnName+" = "+columnName+"; \r\n };\r\n \r\n";
fromMap=" set"+strName+"(DateUtils.toTimestamp(StringUtils.toString(map.get(\""+columnName+"\"))) ); \r\n";
}else {//VARCHAR
filed=" /** "+remarks+" . */"+"\r\n private String "+columnName+" = \"\";\r\n";
meta=" eiColumn = new EiColumn(\""+columnName+"\");\r\n"+ " eiColumn.setFieldLength("+columnSize+");\r\n"+
" eiColumn.setDescName(\""+remarks+"\");\r\n"+ " eiMetadata.addMeta(eiColumn);\r\n \r\n";
getSet=" /** get the "+columnName+" - "+remarks+". */ \r\n public String get"+strName+"() {\r\n return this."+columnName+";\r\n }\r\n /** set the "+columnName+" - "+remarks+". */ \r\n"+
" public void set"+strName+"(String "+columnName+") {\r\n this."+columnName+" = "+columnName+"; \r\n };\r\n \r\n";
fromMap=" set"+strName+"(StringUtils.defaultIfEmpty(StringUtils.toString(map.get(\""+columnName+"\")), "+columnName+")); \r\n";
}
if ("db2".equals(database)) {
toMap=" map.put(\""+columnName+"\", StringUtils.toString("+columnName+", eiMetadata.getMeta(\""+columnName+"\")));\r\n";
clounsData.append(filed);
clounsMetaData.append(meta);
}else {
toMap=" map.put(\""+columnName+"\", "+columnName+");\r\n";
clounsData.append(filed);
}
clounsSetGet.append(getSet);
clounsFromMap.append(fromMap);
clounsToMap.append(toMap);
}
String constructor=" /** the constructor. */ \r\n"+ " public "+javaName+"() {\r\n"+ " initMetaData();\r\n"+ " }\r\n \r\n";
if ("db2".equals(database)) {
clounsMetaData.append(" }\r\n \r\n"+constructor);
}
clounsFromMap.append(" }\r\n ");
clounsToMap.append(" return map;\r\n }\r\n \r\n");
//6页面文件汇总
String javaTitle=
"package com.baosight.iedas.lc.bc.domain; \r\n \r\n"+
"import com.baosight.iplat4j.core.util.NumberUtils;\r\n"+
"import java.math.BigDecimal;\r\n"+
"import com.baosight.iplat4j.core.util.DateUtils;\r\n"+
"import java.sql.Timestamp;\r\n"+
"import com.baosight.iplat4j.core.ei.EiColumn;\r\n"+
"import com.baosight.iplat4j.core.data.DaoEPBase;\r\n"+
"import java.util.HashMap;\r\n"+
"import java.util.Map;\r\n"+
"import com.baosight.iplat4j.core.util.StringUtils;\r\n \r\n"+
"/** create:RaoZhilin "+time19+" */\r\n"+
"public class "+javaName+" extends DaoEPBase {\r\n"+
" private static final long serialVersionUID = 1L;\r\n";
javaFileAll.append(javaTitle);
javaFileAll.append(clounsData);
if ("db2".equals(database)) {
javaFileAll.append(clounsMetaData);
}
javaFileAll.append(clounsSetGet);
javaFileAll.append(clounsFromMap);
javaFileAll.append(clounsToMap);
javaFileAll.append("}");
} catch (Exception e) {
e.printStackTrace();
}
return javaFileAll;
}
3生成xml文件sql语句:
public static StringBuilder createXMLStrs(String javaName, List<Map<String, String>> cloumnDatas, String database, String javaPath) {
String javaPaths = javaPath.replaceAll("/", ".");
String path = javaPaths.split("java.")[1];
path=path.substring(0,path.length()-5);
StringBuilder xmlFileAll = new StringBuilder();
try {
//1生成condition,驼峰命名法
StringBuilder condition = new StringBuilder();
//2生成select
StringBuilder select = new StringBuilder();
select.append(" <select id=\"query\" parameterClass=\"java.util.HashMap\" resultClass=\""+path+"\">\r\n SELECT \r\n");
//3生成insert
StringBuilder insert = new StringBuilder();
String ins=" <insert id=\"insert\">\r\n" + " INSERT INTO ${"+scheam+"}."+tableName+" (\r\n";
insert.append(ins);
//4生成update
StringBuilder update = new StringBuilder();
update.append(" <update id=\"update\">\r\n"
+ " UPDATE ${"+scheam+"}."+tableName+" SET \r\n");
String insert2=""; //
StringBuilder resultMap = new StringBuilder();//1.1
String resultMap2=""; //1.1
for (int i = 0; i < cloumnDatas.size(); i++) {
Map<String, String> map = cloumnDatas.get(i);
String COLUMN_NAME = map.get("COLUMN_NAME");
String columnName=toCamelCase(COLUMN_NAME);
String typeName = map.get("TYPE_NAME");
String remarks = map.get("REMARKS");
String condition1=""; //1
String select1=""; //2
String insert1=""; //3
String update1=""; //4
if ("mysql".equals(database)) {
condition1=" <if test=\""+columnName+"\" != null\"> AND "+columnName+" = #{"+columnName+"} </if>\r\n";
resultMap2=" <result column=\""+columnName+"\" property=\""+columnName+"\"/>\r\n";
}else {
condition1=" <isNotEmpty prepend=\" AND \" property=\""+columnName+"\">\r\n"+ " "+COLUMN_NAME+" = #"+columnName+"#\r\n"+ " </isNotEmpty>\r\n";
}
if (i==cloumnDatas.size()-1) {
select1=" "+COLUMN_NAME+" as \""+columnName+"\" <!-- "+remarks+" -->\r\n";
insert1=" "+COLUMN_NAME+" <!-- "+remarks+" --> \r\n ) VALUES (\r\n";
if (typeName.contains("time") || typeName.contains("TIME")) {
insert2+=" <isEmpty property=\""+columnName+"\"> NULL </isEmpty>\r\n"+ " <isNotEmpty property=\""+columnName+"\"> TO_TIMESTAMP(#"+columnName+":VARCHAR#, 'YYYY-MM-DD HH24:MI:SS') </isNotEmpty>\r\n";
}else if(typeName.contains("char") || typeName.contains("CHAR")) {
insert2+=" #"+columnName+":VARCHAR#\r\n";
}else{
insert2+=" #"+columnName+":NUMERIC#\r\n";
}
update1=" "+COLUMN_NAME+" = #"+columnName+"# <!-- "+remarks+" -->\r\n";
}else {
select1=" "+COLUMN_NAME+" as \""+columnName+"\", <!-- "+remarks+" -->\r\n";
insert1=" "+COLUMN_NAME+", <!-- "+remarks+" --> \r\n";
if (typeName.contains("time") || typeName.contains("TIME")) {
insert2+=" <isEmpty property=\""+columnName+"\"> NULL, </isEmpty>\r\n"+ " <isNotEmpty property=\""+columnName+"\"> TO_TIMESTAMP(#"+columnName+":VARCHAR#, 'YYYY-MM-DD HH24:MI:SS'), </isNotEmpty>\r\n";
}else if (typeName.contains("int") || typeName.contains("INT") || typeName.contains("double") || typeName.contains("DOUBLE")) {
insert2+=" #"+columnName+":NUMERIC#,\r\n";
}else {
insert2+=" #"+columnName+":VARCHAR#,\r\n";
}
update1=" "+COLUMN_NAME+" = #"+columnName+"#, <!-- "+remarks+" -->\r\n";
}
condition.append(condition1);
resultMap.append(resultMap2);
select.append(select1);
insert.append(insert1);
update.append(update1);
}
//6页面文件汇总
String title="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"+
"<!DOCTYPE sqlMap PUBLIC \"-//ibatis.apache.org//DTD SQL Map 2.0//EN\" \"http://ibatis.apache.org/dtd/sql-map-2.dtd\">\r\n"+
"<sqlMap namespace=\""+javaName+"\">\r\n";
xmlFileAll.append(title);
if ("mysql".equals(database)) {
xmlFileAll.append(" <sql id=\"condition\">\r\n"+condition+" </sql>\r\n"
+ " <!-- mysql通用查询映射结果 -->\r\n <resultMap id=\""+tableName+"\" type=\""+path+"\">\r\n <id column=\"id\" property=\"id\"/>\r\n"+resultMap+" </resultMap>\r\n");
}else {
xmlFileAll.append(" <sql id=\"condition\">\r\n"+condition+" </sql>\r\n");
}
xmlFileAll.append("<!-- DEVICE LIKE '%'||#device#||'%' <![CDATA[ <= ]]> LINE_CODE in ($lines$) --> \r\n \r\n");
/** select */
xmlFileAll.append(select);
String selectSqlWei=" FROM ${"+scheam+"}."+tableName+" WHERE 1=1\r\n" + " <include refid=\"condition\" />\r\n"
+ " <dynamic prepend=\"ORDER BY\">\r\n" + " <isNotEmpty property=\"orderBy\"> $orderBy$ </isNotEmpty>\r\n" + " </dynamic>\r\n";
xmlFileAll.append(selectSqlWei+" </select>\r\n \r\n");
/** count */
xmlFileAll.append(" <select id=\"count\" resultClass=\"int\">\r\n" + " SELECT COUNT(*) FROM ${"+scheam+"}."+tableName+" WHERE 1=1\r\n"
+ " <include refid=\"condition\" />\r\n" + " </select>\r\n \r\n");
/** insert */
xmlFileAll.append(insert+insert2+" )\r\n </insert>\r\n \r\n");
/** delect */
xmlFileAll.append(" <delete id=\"delete\">\r\n" + " DELETE FROM ${"+scheam+"}."+tableName+" WHERE 1=1\r\n" + " </delete>\r\n \r\n");
/** update */
xmlFileAll.append(update+" WHERE 1=1 \r\n </update>\r\n \r\n");
xmlFileAll.append("</sqlMap>\r\n \r\n");
}catch (Exception e) {
System.out.println("xml生成出错!");
}
return xmlFileAll;
}
4驼峰命名法:
public static String toCamelCase(String fieldName) {
StringBuilder result = new StringBuilder();
boolean toUpperCase = false;
for (char ch : fieldName.toCharArray()) {
if (ch == '_') {
toUpperCase = true; // 下划线后面的字符需要大写
} else {
if (toUpperCase) {
result.append(Character.toUpperCase(ch));
toUpperCase = false; // 重置
} else {
result.append(Character.toLowerCase(ch));
}
}
}
return result.toString();
}
5mysql连接池:db2同理
public static Connection getConnectionMysql() throws SQLException, ClassNotFoundException {
final String URL = "jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"; // 数据库地址
final String USER = "root"; // 数据库用户名
final String PASSWORD = "raozl1234"; // 数据库密码
try {// 加载 JDBC 驱动
Class.forName("com.mysql.cj.jdbc.Driver"); // 获取数据库连接
connection = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("MySql数据库连接成功!");
} catch (ClassNotFoundException e) {
System.out.println("找不到 JDBC 驱动!" + e.getMessage());
} catch (SQLException e) {
System.out.println("数据库连接失败!" + e.getMessage());
}
return connection;
}
所用到的方法,有需要私聊。
}
1279

被折叠的 条评论
为什么被折叠?



