java根据数据库表明,快速生成实体类和xml。区分mysql和db2语法。

思路:

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;

}

所用到的方法,有需要私聊。

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值