MYSQL 表转 JavaBean 工具类
import org.apache.commons.lang.StringUtils; import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.*; public class DBTableToJavaBeanUtil {
public static Connection connection; //mysql DB连接字符串
private static String DB_URL = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&noDatetimeStringSync=true&serverTimezone=UTC"; private static String DB_USER = "root"; //账号 private static String DB_PASSWD = "root"; //密码 //mysql 驱动全限定名称
public static String DB_DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver"; static {
try {
Class.forName(DB_DRIVER_CLASS_NAME);
if (connection == null || connection.isClosed())
//获得链接
connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWD);
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
System.out.println(ex.getMessage());
} catch (SQLException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
} public DBTableToJavaBeanUtil(){ } /**
* 表元数据
* @param table
* @return
*/
public static Map<String, String> getDBTableMeta(String table){
Map<String, String> colAndTypes = new HashMap();
String sql = "select * from " + table;
try {
PreparedStatement statement = connection.prepareStatement(sql);
//表 元数据
ResultSetMetaData metadata = statement.getMetaData();
//表 列
int len = metadata.getColumnCount();
for(int i= 1;i<= len; i++){
colAndTypes.put(metadata.getColumnName(i), sqlType2JavaType(metadata.getColumnTypeName(i)));
}
} catch (SQLException e) {
e.printStackTrace();
}
return colAndTypes;
} /**
* sql type <=> java type
* @param sqlType
* @return
*/
public static String sqlType2JavaType(String sqlType) {
switch (sqlType.toLowerCase()){
case "bit": return "boolean";
case "tinyint": return "byte";
case "smallint": return "short";
case "int": return "int";
case "bigint": return "long";
case "float": return "float";
case "decimal":
case "numeric":
case "real":
case "money":
case "smallmoney": return "double";
case "varchar":
case "char":
case "nvarchar":
case "nchar":
case "text": return "String";
case "datetime":
case "date": return "Date";
case "image": return "Blob";
case "timestamp": return "Timestamp";
default: return "String";
}
} /**
* table 2 class
* @param table 表名称
* @param path 保存类文件路径
*/
public static String tableToClass(String table, String path, String pack){
Map<String, String> colAndTypes = getDBTableMeta(table);
//类字符串
StringBuilder classStr = new StringBuilder(); if(colAndTypes.size() == 0) return ""; if(!isEmpty(pack)){
classStr.append("package " + pack + ";");
} classStr.append(genImport(colAndTypes.values())); //驼峰bean名称
classStr.append("public class " + dealName(table, 1) + " {\r\n"); //类字段
for (Map.Entry<String, String> entry : colAndTypes.entrySet()) {
classStr.append(genFieldStr(entry.getKey(), entry.getValue()));
} //get,Set
for (Map.Entry<String, String> entry : colAndTypes.entrySet()) {
classStr.append(genGetMethodStr(entry.getKey(), entry.getValue()));
classStr.append(genSetMethodStr(entry.getKey(), entry.getValue()));
} classStr.append("}\r\n"); //保存
path = isEmpty(path)?"":path;
File file = new File(path + dealName(table, 1) + ".java");
try(BufferedWriter write = new BufferedWriter(new FileWriter(file))) {
write.write(classStr.toString());
write.close();
} catch (IOException e) {
e.printStackTrace();
} return classStr.toString();
} public static String genImport(Collection<String> types){
StringBuilder sb = new StringBuilder();
if(types.contains("Date")){
sb.append("import java.util.Date;\r\n");
}
if(types.contains("Blob")){
sb.append("import java.sql.Blob;\r\n");
}
if(types.contains("Timestamp")){
sb.append("import java.sql.Timestamp;\r\n");
}
return sb.toString();
} /**
* 属性构造
* @param name
* @param type
* @return
*/
public static String genFieldStr(String name, String type) {
if(isEmpty(name) || isEmpty(type)) {
return "";
}
return String.format(" private %s %s;\n\r", new String[]{type, dealName(name, 0)});
} public static boolean isEmpty(String str){
if(str == null || str == "") return true; return false;
} /**
* get method construct
* @param name
* @param type
* @return
*/
private static String genGetMethodStr(String name, String type) {
if(isEmpty(name) || isEmpty(type)) {
return "";
}
StringBuilder sb = new StringBuilder();
sb.append(String.format(" public %s get%s(){\n\r", type, dealName(name, 1)));
sb.append(String.format(" return this.%s;\r\n", dealName(name, 0)));
sb.append(" }\r\n");
return sb.toString();
} /**
* 驼峰名称处理
* @param name
* @param type
* @return
*/
public static String dealName(String name, int type) {
String[] names = StringUtils.split(StringUtils.trim(name), "_");
if(names.length > 0){
StringBuilder sb= new StringBuilder();
for (String s : names) {
sb.append(StringUtils.upperCase(StringUtils.substring(s, 0, 1)));
sb.append(StringUtils.lowerCase(StringUtils.substring(s, 1)));
}
if(type == 0){
sb.replace(0, 1, StringUtils.lowerCase(sb.substring(0, 1)));
}
return sb.toString();
}
return "";
} /**
* set method contruct
* @param name
* @param type
* @return
*/
public static String genSetMethodStr(String name, String type) {
if(isEmpty(name) || isEmpty(type)) {
return "";
}
String fieldName = dealName(name, 0);
StringBuilder sb = new StringBuilder();
sb.append(String.format(" public void set%s(%s %s){\n\r", dealName(name, 1), type, fieldName));
sb.append(String.format(" this.%s = %s;\r\n", fieldName, fieldName));
sb.append(" }\r\n");
return sb.toString();
} public static void close(){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
System.out.println(DBTableToJavaBeanUtil.tableToClass("book", "d:\\", null));
close();
} }
MYSQL 表转 JavaBean 工具类的更多相关文章
- java后台表单验证工具类
/** * 描述 java后台表单验证工具类 * * @ClassName ValidationUtil * @Author wzf * @DATE 2018/10/27 15:21 * @VerSi ...
- mysql表生成JavaBean
MySQLToBean.java package org.just.util; import java.io.File; import java.io.FileInputStream; import ...
- MySQL表结构同步工具 mysql-schema-sync
mysql-schema-sync 是一款使用go开发的.跨平台的.绿色无依赖的 MySQL 表结构自动同步工具.用于将线上(其他环境)数据库结构变化同步到测试(本地)环境! 可以解决多人开发,每人都 ...
- JDBC基础篇(MYSQL)——自定义JDBCUtil工具类
package util; import java.io.File; import java.io.InputStream; import java.sql.Connection; import ja ...
- 基于Java反射的map自动装配JavaBean工具类设计
我们平时在用Myabtis时不是常常需要用map来传递参数,大体是如下的步骤: public List<Role> findRoles(Map<String,Object> p ...
- java工具类(二)之java正则表达式表单验证
java正则表达式表单验证类工具类(验证邮箱.手机号码.qq号码等) 这篇文章主要介绍了java使用正则表达式进行表单验证工具类,可以验证邮箱.手机号码.qq号码等方法,需要的朋友可以参考下. jav ...
- briup_JDBC_自建工具类
1.操作的环境 STS,mysql,oracle orcle 所操作的数据库名为 ORCL 表为 m_stu 表结构如下 mysql 的表为:my_stu 表结构如下 工具类完整代码 package ...
- android经常使用正则工具类
此类提供日常开发中经常使用的正则验证函数.比方:邮箱.手机号.电话号码.身份证号码.日期.数字.小数.URL.IP地址等.使用Pattern对象的matches方法进行整个字符匹配,调用该方法相当于: ...
- DAO工具类的封装源码
详细源码见下表,绝对原创,转载请注明出处! package com.ydj.util; import java.sql.Connection; import java.sql.PreparedStat ...
随机推荐
- PHP设计模式系列 - 迭代器
PHP迭代器: 可帮助构造特定的对象,那些对象能够提供单一标准接口循环或迭代任何类型的可计数数据.(不是特别常用,在PHP中) 使用场景: 1.访问一个聚合对象的内容而无需暴露它的内部表示. 2.支持 ...
- Java 输入输出流总结
1. 运用BufferedInputStream 读取文件流和BufferedOutputStream写文件流: protected static void writeFile2(String inp ...
- 对象在hibernate中的状态
首先hibernate中对象的状态有三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate().get().load() ...
- [USACO08NOV]Cheering up the Cow
嘟嘟嘟 这道题删完边后是一棵树,那么一定和最小生成树有关啦. 考虑最后的生成树,无论从哪一个点出发,每一条边都会访问两次,而且在看一看样例,会发现走第w条边(u, v)的代价是L[w] * 2 + c ...
- 10、Android--技巧
10.1.全局获取Context的技巧 在实践中有很多的地方都可以使用到Context 弹出Toast的时候需要,启动活动的时候需要.发送广播的时候需要. 操作数据库的时候需要.使用通知的时候需要.. ...
- 集合之hascode方法
在前面三篇博文中LZ讲解了(HashMap.HashSet.HashTable),在其中LZ不断地讲解他们的put和get方法,在这两个方法中计算key的hashCode应该是最重要也是最精华的部分, ...
- 使用CSS3的“transition ”属性控制长宽度的缓慢变化
有时候我们可能会想要改变某个资源信息的长宽度,比如改变某个div的宽度,而且需要让这个宽度缓慢改变,而不是突然就改变了.这时候你可能会想到使用jquery的animate()函数,不过这个方法既得引用 ...
- 网络流$1$·简单的$EK$与$Dinic~of~Net-work ~ Flow$学习笔记
\(2333\)这是好久之前学的了,不过一直在咕咕咕咕. 一般来讲,正常的网络流笔记一开始都是要给网络流图下定义的.那么我们不妨也来先进行一波这种操作. 那么网络流图,类似于有向图,边上带权,但是这个 ...
- Jmeter之断言
Jmeter中的断言类似于LR中的检查点,是在请求的返回层面上加的一个判断机制.因为请求成功了,不代表结果就一定是对的,还要看返回(LR中亦如此,脚本回放没报错,不代表你的业务成功了,需要自己去相应的 ...
- Objective-C(生命周期)
视图控制器生命周期 : 1)当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序 1.alloc 创建对象,分配空间 2.init(initWithNibName) 初始化对象,初始化数据 ...