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 ...
随机推荐
- jquery与json的结合
通过AJAX异步减少网络内容传输,而JSON则可以把传输内容缩减到纯数据:然后利用jQuery内置的AJAX功能直接获得JSON格式的数据:在客户端直接绑定到数据控件里面,从而达到最优. 1 2 3 ...
- 学习python第四天——Oracle分组
1.分组的概念: 关键字:group by子句 结论:在select列表中如果出现了聚合函数,不是聚合函数的列,必须都要定义到group by子句的后面 需求: 查询公司各个部门的平均工资? sele ...
- redis-Sentinel配置
Sentinel介绍 Redis的主从模式下,主节点一旦发生故障不能提供服务,需要人 工干预,将从节点晋升为主节点,同时还需要修改客户端配置. 对于很多应用场景这种方式无法接受. Redis从 2.8 ...
- C语言程序设计I—第八周教学
第八周教学总结(21/10-27/10) 教学内容 第三章 分支结构 3.1 简单的猜数游戏 3.2 四则运算 课前准备 在蓝墨云班课发布资源:chap03_分支结构.pptx PTA:2018秋第八 ...
- 拥抱.NET Core系列:MemoryCache 初识 (转载)
阅读目录 MSCache能做什么? 从IMemoryCache说起 开发者的体验 写在最后 Cache是一个绝大多数项目会用到的一个技术,说起到缓存可能就联想到 Set.Add.Get.Remove. ...
- SuperObject Delphi 的 JSON 属性乱序 - 操作类改造 - 关于属性顺序的问题
Delphi 的 ISuperObject 属性顺序为随机.但是很多时候,是需要按加入顺序进行读取.我也看了网上很多人有类似需求.也有人问过原作者,作者答复为:JSON协议规定为无序.看了我真是无语. ...
- spring-data-jpa快速入门(二)——简单查询
一.方法名解析 1.引言 回顾HelloWorld项目中的dao接口 public interface GirlRepository extends JpaRepository<Girl, In ...
- JavaWeb基础—JDBC(二)事务与批处理
一.批处理 这里给出PrepareStatement的示例,优点是可以发送预编译的SQL,缺点是SQL语句无法更换,但参数可以更换 批处理:多条语句的处理 mysql默认是关闭的,要打开需要在url后 ...
- VB6 Common Dialog
'---------------------------- 'Class CommonDialog 'Member of MSComDlg '---------------------------- ...
- Django中表单的用法深探
[转载说明:原文排版不是很好,为方便阅读,改进了排版] django的表单设计真的很棒,涉及非常多的功能,今天介绍django较为主流的几种表单使用方法.注:本文中表单与form通用.模型与model ...