Java工具类_表结构自动生成对应的实体类、Mapper.xml文件、Dao类
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.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* 根据表生成Entity文件
*
* 修改test_Table()方法中的参数值,即可执行main方法获得想要的结果
*
* 生成文件后导入需要的包
* 依赖包:mysql数据库驱动包
* 生成其他数据库类型的表需要更换驱动类并略做数据类型转换的修改即可
*
* 注意:数据库数据类型只包括了常用的几种,其他数据类型还需要在完善,请添加‘ftype’该数组变量的值
*
*/
public class TableToEntity { public static void main(String args[]) {
test_Table();
} /**
* 设置参数--需要修改
*/
public static void test_Table() {
String tableName = "tableName";//需要转换的表
String host = "127.0.0.1";//数据库host
String port = "3306";//数据库端口
String database = "databaseName";//数据库名
String username = "root";//数据库用户名
String password = "root";//数据库用密码
String path = "F:/file/";//生成文件存放目录,不包括文件名,文件名自动命名为 '表名.java,表名Mapper.xml,表名Dao.java' 首字母大写
String dao_package = "com.test.dao.";//dao的包路径
String entity_package = "com.test.entity.";//entity的包路径
//生成entity文件
getTableToEntityFile(tableName, host, port, database, username, password, entity_package,
path);
//生成ResultMap文件
getTableToResultMap(tableName, host, port, database, username, password, dao_package,
entity_package, path);
//生成Dao文件
getResultMapToDao(tableName, dao_package, entity_package, path);
} /**
* 根据表生成Entity文件
*/
public static void getTableToEntityFile(String tableName, String host, String port,
String database, String username, String password,
String entity_package, String path) {
String strforname = "com.mysql.jdbc.Driver";
String strurl = "jdbc:mysql://" + host + ":" + port + "/" + database
+ "?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull";
//需要替换的数据类型,待完善
String ftype[][] = new String[][] { { "tinyint unsigned", "Integer" },
{ "tinyint", "Integer" }, { "int unsigned", "Integer" }, { "int", "Integer" },
{ "smallint unsigned", "Integer" }, { "smallint", "Integer" },
{ "varchar", "String" }, { "char", "String" }, { "longtext", "String" },
{ "text", "String" }, { "decimal unsigned", "BigDecimal" },
{ "decimal", "BigDecimal" }, { "datetime", "String" }, { "date", "String" },
{ "timestamp", "String" }, { "unsigned", "" } }; //如果包路径是以“.”结尾的要去掉
entity_package = entity_package == null ? "" : entity_package;
entity_package = entity_package.length() > 0 && entity_package.endsWith(".") ? entity_package
.substring(0, entity_package.length() - 1) : entity_package; System.out.println("==============================");
System.out.println("正在生成。。。");
String sql = "SELECT * FROM " + tableName + " limit 0";
List<Map<String, String>> list = queryFieldList(sql, strforname, strurl, username, password); //模板字符串
String propertystr = "\tprivate #fieldtype# #fieldname#;\n"; String methodget1 = "\tpublic #fieldtype# get#fieldname1#() {\n";
String methodget2 = "\t\treturn #fieldname#;\n";
String methodget3 = "\t}\n"; String methodset1 = "\tpublic void set#fieldname1#(#fieldtype# #fieldname#) {\n";
String methodset2 = "\t\tthis.#fieldname# = #fieldname#;\n";
String methodset3 = "\t}\n"; String classstrstart = "package "
+ entity_package
+ ";\n\nimport java.io.Serializable;\nimport java.math.BigDecimal;\n\npublic class #tablename# implements Serializable {\n";
String classstrend = "}"; String class_pro = "";//类拼接
if (list != null && list.size() > 0) {
for (Map<String, String> map : list) {
for (Object key : map.keySet()) {
String fieldtype = map.get(key).toString().toLowerCase();
String fieldname = key.toString();
//替换数据类型
for (int i = 0; i < ftype.length; i++) {
fieldtype = fieldtype.replace(ftype[i][0], ftype[i][1]);
}
//属性
class_pro = class_pro + "\n";
class_pro = class_pro
+ propertystr.replace("#fieldtype#", fieldtype).replace(
"#fieldname#",
setStringFirstLetterLower(setStringHump(fieldname, "_")));
String fieldnameU = setStringFirstLetterUpper(setStringHump(fieldname, "_"));//首字母大写字符串 //get方法
class_pro = class_pro + "\n";
class_pro = class_pro
+ methodget1.replace("#fieldtype#", fieldtype).replace(
"#fieldname1#", fieldnameU)
+ methodget2.replace("#fieldname#",
setStringFirstLetterLower(setStringHump(fieldname, "_")))
+ methodget3; //set方法
class_pro = class_pro + "\n";
class_pro = class_pro
+ methodset1
.replace("#fieldtype#", fieldtype)
.replace("#fieldname1#", fieldnameU)
.replace("#fieldname#",
setStringFirstLetterLower(setStringHump(fieldname, "_")))
+ methodset2.replace("#fieldname#",
setStringFirstLetterLower(setStringHump(fieldname, "_")))
+ methodset3;
}
}
}
//添加方法头
class_pro = classstrstart.replace("#tablename#",
setStringFirstLetterUpper(setStringHump(tableName, "_")))
+ class_pro;
//添加方法尾
class_pro = class_pro + classstrend; System.out.println("==============================");
//生成文件名及保存路径
path = path + setStringFirstLetterUpper(setStringHump(tableName, "_")) + ".java";
//写文件
write(class_pro, path); System.out.println("javabean文件已生成,请查看:" + path);
} /**
* 根据表生成resultMap配置,及select,insert,update全配置
*/
public static void getTableToResultMap(String tableName, String host, String port,
String database, String username, String password,
String dao_package, String entity_package, String path) {
String strforname = "com.mysql.jdbc.Driver";
String strurl = "jdbc:mysql://" + host + ":" + port + "/" + database
+ "?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull"; System.out.println("==============================");
System.out.println("正在生成。。。");
String sql = "SELECT * FROM " + tableName + " limit 0";
List<Map<String, String>> list = queryFieldList(sql, strforname, strurl, username, password); //如果包路径不是以“.”结尾的要补齐
dao_package = dao_package == null ? "" : dao_package;
dao_package = dao_package.length() > 0 && !dao_package.endsWith(".") ? dao_package + "."
: dao_package;
entity_package = entity_package == null ? "" : entity_package;
entity_package = entity_package.length() > 0 && !entity_package.endsWith(".") ? entity_package
+ "."
: entity_package;
//模板字符串
String propertystr = "\t\t<result property=\"#fieldname2#\" column=\"#fieldname#\" />\n"; String mapstart = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\""
+ dao_package + "#tablefilename1#Dao\">\n\n";
String mapend = "</mapper>";
String resultstart = "\t<resultMap id=\"#tablefilename2#Result\" type=\"" + entity_package
+ "#tablefilename1#\">\n";
String resultend = "\t</resultMap>\n\n";
String selectstart = "\t<select id=\"get\" resultMap=\"#tablefilename2#Result\">\n";
String selectend = "\t</select>\n\n";
String insertstart = "\t<insert id=\"insert\" parameterType=\"" + entity_package
+ "#tablefilename1#\">\n";
String insertend = "\t</insert>\n\n";
String updatestart = "\t<update id=\"update\" parameterType=\"" + entity_package
+ "#tablefilename1#\">\n";
String updateend = "\t</update>\n\n"; String resultMap = "";//字段拼接
String select_field = "";//select拼接
String insert_field = "";//insert拼接
String insert_value = "";//insert value拼接
String update_set = "";//update set拼接
if (list != null && list.size() > 0) {
for (Map<String, String> map : list) {
for (Object key : map.keySet()) {
String fieldname = key.toString();
//resultMap
resultMap = resultMap
+ propertystr.replace("#fieldname2#",
setStringFirstLetterLower(setStringHump(fieldname, "_")))
.replace("#fieldname#", fieldname);
//select
select_field = select_field + "`" + fieldname + "`,";
insert_field = insert_field + "`" + fieldname + "`,";
insert_value = insert_value + "#{"
+ setStringFirstLetterLower(setStringHump(fieldname, "_"))
+ "},";
update_set = update_set + "`" + fieldname + "`=#{"
+ setStringFirstLetterLower(setStringHump(fieldname, "_")) + "},";
}
}
} resultMap = resultstart.replace("#tablename#",
setStringFirstLetterUpper(setStringHump(tableName, "_")))
+ resultMap;
resultMap = resultMap + resultend;
if (select_field.endsWith(",")) {
select_field = select_field.substring(0, select_field.length() - ",".length());
}
if (insert_field.endsWith(",")) {
insert_field = insert_field.substring(0, insert_field.length() - ",".length());
}
if (insert_value.endsWith(",")) {
insert_value = insert_value.substring(0, insert_value.length() - ",".length());
}
if (update_set.endsWith(",")) {
update_set = update_set.substring(0, update_set.length() - ",".length());
} //拼接sql语句
String select = "\t\tselect " + select_field + " from " + tableName + "\n";
String insert = "\t\tinsert into " + tableName + "(" + insert_field + ")values("
+ insert_value + ")" + "\n";
String update = "\t\tupdate " + tableName + " set " + update_set + "\n"; // System.out.println("select:\n" + select);
// System.out.println("insert:\n" + insert);
// System.out.println("update:\n" + update);
//生成select语句的Map配置
String selectMap = selectstart + select + selectend;
//生成insert语句的Map配置
String insertMap = insertstart + insert + insertend;
//生成update语句的Map配置
String updateMap = updatestart + update + updateend;
//各个Map配置组合
resultMap = resultMap + selectMap + insertMap + updateMap;
//添加Map文件的头和尾
resultMap = mapstart + resultMap + mapend;
String tablefilename1 = setStringFirstLetterUpper(setStringHump(tableName, "_"));
String tablefilename2 = setStringFirstLetterLower(setStringHump(tableName, "_"));
resultMap = resultMap.replace("#tablefilename1#", tablefilename1);
resultMap = resultMap.replace("#tablefilename2#", tablefilename2);
//打印Map文件
// System.out.println("==============================");
// System.out.println("resultMap:\n" + resultMap);
// System.out.println("==============================");
//生成文件名及保存路径 System.out.println("==============================");
path = path + setStringFirstLetterUpper(setStringHump(tableName, "_")) + "Mapper.xml";
//写文件
write(resultMap, path);
System.out.println("Map文件已生成,请查看:" + path);
} /**
* 根据resultMap生成Dao文件
*/
public static void getResultMapToDao(String tableName, String dao_package,
String entity_package, String path) { System.out.println("==============================");
System.out.println("正在生成。。。"); //如果包路径是以“.”结尾的要去掉
dao_package = dao_package == null ? "" : dao_package;
dao_package = dao_package.length() > 0 && dao_package.endsWith(".") ? dao_package
.substring(0, dao_package.length() - 1) : dao_package;
//如果包路径不是以“.”结尾的要补齐
entity_package = entity_package == null ? "" : entity_package;
entity_package = entity_package.length() > 0 && !entity_package.endsWith(".") ? entity_package
+ "."
: entity_package; //模板字符串
String daostart = "package " + dao_package + ";\n\nimport " + entity_package
+ setStringFirstLetterUpper(setStringHump(tableName, "_"))
+ ";\n\npublic interface #tablefilename1#Dao {\n\n";
String daoend = "}";
String get = "\t#tablefilename1# get(Integer id);\n\n";
String insert = "\tint insert(#tablefilename1# #tablefilename2#);\n\n";
String update = "\tint update(#tablefilename1# #tablefilename2#);\n\n"; String classstr = "";
classstr = classstr
+ get.replace("#tablefilename1#",
setStringFirstLetterUpper(setStringHump(tableName, "_")));
classstr = classstr
+ insert.replace("#tablefilename1#",
setStringFirstLetterUpper(setStringHump(tableName, "_")))
.replace("#tablefilename2#",
setStringFirstLetterLower(setStringHump(tableName, "_")));
classstr = classstr
+ update.replace("#tablefilename1#",
setStringFirstLetterUpper(setStringHump(tableName, "_")))
.replace("#tablefilename2#",
setStringFirstLetterLower(setStringHump(tableName, "_"))); classstr = daostart.replace("#tablefilename1#",
setStringFirstLetterUpper(setStringHump(tableName, "_")))
+ classstr;
classstr = classstr + daoend; //打印Map文件
// System.out.println("==============================");
// System.out.println("classstr:\n" + classstr);
// System.out.println("==============================");
//生成文件名及保存路径 System.out.println("==============================");
path = path + setStringFirstLetterUpper(setStringHump(tableName, "_")) + "Dao.java";
//写文件
write(classstr, path);
System.out.println("Dao文件已生成,请查看:" + path);
} /**
* 查询表的元数据信息
* @return
*/
public static List<Map<String, String>> queryFieldList(String querySql, String strforname,
String strurl, String username,
String password) {
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = getConnection(strforname, strurl, username, password);
stmt = conn.createStatement();
rs = stmt.executeQuery(querySql);
ResultSetMetaData rsmd = rs.getMetaData();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
Map<String, String> map = new HashMap<String, String>();
map.put(rsmd.getColumnName(i), rsmd.getColumnTypeName(i));
list.add(map);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return list;
} /**
* 设置字符串驼峰格式
* @param str
* @param regex_split 驼峰分隔符
* @return
*/
private static String setStringHump(String str, String regex_split) {
if (str == null) {
return "";
}
if (regex_split == null || regex_split.equals("")) {
regex_split = "_";
}
String temp_str = "";
String sp[] = str.split(regex_split);
if (sp != null && sp.length > 0) {
for (int i = 0; i < sp.length; i++) {
temp_str += setStringFirstLetterUpper(sp[i]);
}
} return temp_str;
} /**
* 字符串首字母大写
* @param str
* @return
*/
private static String setStringFirstLetterUpper(String str) {
if (str == null) {
return "";
}
String str1 = "";
String str2 = "";
if (str.length() > 1) {
str1 = str.substring(0, 1).toUpperCase();
str2 = str.substring(1);
str = str1 + str2;
} else {
str = str.toUpperCase();
}
return str;
} /**
* 字符串首字母小写
* @param str
* @return
*/
private static String setStringFirstLetterLower(String str) {
if (str == null) {
return "";
}
String str1 = "";
String str2 = "";
if (str.length() > 1) {
str1 = str.substring(0, 1).toLowerCase();
str2 = str.substring(1);
str = str1 + str2;
} else {
str = str.toLowerCase();
}
return str;
} /**
* 生成文件
* @return
*/
private static void write(String str, String path) {
FileWriter fw = null;
PrintWriter out = null;
try {
File file = new File(path);
// int n = 1;
// while (file.exists()) {
// if (n > 10) {
// return;
// }
// n++;
// String fpath = path.replace(".", "[" + n + "].");
// file = new File(fpath);
// }
fw = new FileWriter(file, false);
out = new PrintWriter(fw);
out.print(str);
out.flush(); } catch (IOException e) {
e.printStackTrace();
} finally {
try {
fw.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} public static Connection getConnection(String strforname, String strurl, String username,
String password) {
String className = strforname;
Connection conn = null;
try {
Class.forName(className);
String url = strurl;
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
} }
Java工具类_表结构自动生成对应的实体类、Mapper.xml文件、Dao类的更多相关文章
- Android开发——自动生成Android屏幕适配的dimens.xml文件
使用dimens.xml解决屏幕适配问题是Android官方解决方案,本文主要讲述了如何自动生成Android屏幕适配的dimens.xml,减少了工作量,在维护dimens.xml文件时更加省时省力 ...
- 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第2版)
目录: 第1版:http://blog.csdn.net/vipbooks/article/details/51912143 ...
- mybatis根据数据库表结构自动生成实体类,dao,mapper
首先, pom需要引入 <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifac ...
- java项目报错: org.springframework.beans.factory.BeanCreationException找不到mapper.xml文件
错误代码 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userSer ...
- 使用generatorConfig工具自动生成mybatis的实体类以及dao接口和映射文件
1:数据准备 创建一个数据库表 CREATE TABLE `logininfo` ( `id` ) NOT NULL AUTO_INCREMENT, `username` ) DEFAULT NULL ...
- mybatis根据表逆向自动化生成代码(自动生成实体类、mapper文件、mapper.xml文件)
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- JAVA入门[7]-Mybatis generator(MBG)自动生成mybatis代码
一.新建测试项目 新建Maven项目MybatisDemo2,修改pom.xml引入依赖.dependencies在上节基础上新增 <dependency> <groupId> ...
- java如何在eclipse编译时自动生成代码
用eclipse写java代码,自动编译时,如何能够触发一个动作,这个动作是生成本项目的代码,并且编译完成后,自动生成的代码也编译好了, java编辑器中就可以做到对新生成的代码的自动提示? 不生成代 ...
- 读取hive的表结构,生成带comment的视图建表语句
### 读取hive的表结构,生成带comment的视图建表语句 # 读取配置文件中的表并进行遍历 grep -v '^#' tablesFile|while read tableName do st ...
随机推荐
- ios之runloop笔记
网上关于runloop的文章不计其数,再此,贴个自认为讲的比较简单明了的文章 http://www.jianshu.com/p/536184bfd163 个人理解: ios的runloop应该是类似于 ...
- ASP.NET Web Pages:Razor
ylbtech-.Net-ASP.NET Web Pages:Razor 1.返回顶部 1. ASP.NET Web Pages - 添加 Razor 代码 在本教程中,我们将使用 C# 和 Visu ...
- Git 查询某次历史提交的修改内容
在工作时,有时候想查看某次的提交修改了哪些的内容. 我们首先可以git log显示历史的提交列表: 之后我们用git show <commit-hashId> 便可以显示某次提交的修改内容 ...
- idea配置(卡顿、开发环境等配置),code style template
Tomcat配置VM Options: -XX:PermSize=512m -XX:MaxPermSize=1024m 1.IDEA卡顿,修改IDEA使用内存 修改idea配置文件 在IDEA的 ...
- xgCalendar在ASP.NET中的使用
1.将wdCalendar文件夹考入项目中 2.在页面中添加引用,见3中head标签中定义 3.配置xgCalendar,两段代码放在一起就是完整的页面 body> <div> &l ...
- Python3 os.stat() 方法
概述 os.stat() 方法用于在给定的路径上执行一个系统 stat 的调用.语法 stat()方法语法格式如下: os.stat(path) 参数 path -- 指定路径 返回值 stat 结构 ...
- attack source code
不废话,直接上代码, 先看截图use pictures;
- python3一个简单的网页抓取
都是学PYTHON.怎么学都是学,按照基础学也好,按照例子增加印象也好,反正都是学 import urllib import urllib.request data={} data['word']=' ...
- yii 日期插件
——controller public $defaultAction = "income"; public function actionIncome(){ ...
- leetcode210
public class Solution { //test case [1,0] public int[] findOrder(int numCourses, int[][] prerequisit ...