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 ...
随机推荐
- eclipse导入maven工程missing artifact(实际是存在的)错误解决
找到出错的jar包文件位置,删掉_maven.repositories文件(或用文本编辑器打开,将“>main=”改为“>=”,即删除main,当然main也可能是其他值),然后updat ...
- python multiprocessing 使用
如何在Pool中使用Queue,Stack Overflow的回答,戳这里 其实吧官方文档看一遍应该就大部分都懂了. 需要注意的是:在使用多进程的时候,我们的进程函数的传入参数必须是pickle-ab ...
- 用php代码统计数据库中符合条件的行数
$sql1 = "select count(*) from t_user where age<17"; $data1 = mysql_query($sql1); $rows1 ...
- Hadoop学习之路(十五)MapReduce的多Job串联和全局计数器
MapReduce 多 Job 串联 需求 一个稍复杂点的处理逻辑往往需要多个 MapReduce 程序串联处理,多 job 的串联可以借助 MapReduce 框架的 JobControl 实现 实 ...
- Tensorflow-slim 学习笔记(一)概述
TF-Slim的优势:slim作为一种轻量级的tensorflow库,使得模型的构建,训练,测试都变得更加简单. 1. 使用方法: import tensorflow.contrib.slim as ...
- CAN网要不要共地?
重要:CAN网要不要共地? 因为CAN传输采用差分传输的方式,即使不共地,部分情况下仍然能传输数据,但是本人以实际的经验告诉你们,一定要共地! 1. 不共地会引入共模干扰,轻则影响正常 ...
- UITableView 基本使用方法总结
1..首先,Controller需要实现两个 delegate ,分别是 UITableViewDelegate 和 UITableViewDataSource2.然后 UITableView对 ...
- Mysql数据库 day1
Mysql数据库属于关系型数据库(mysql.oracle.sql server),非关系型数据库有DB2.Redis MySQL执行原理,逻辑分层.更改数据库处理引擎 作者:Stanley 罗昊 [ ...
- Linux基础命令之文件过滤及内容编辑处理(一)
. cat 功能是连接多个文件并且打印到屏幕输出,或重定向到指定的文件 五大功能: 1.查看文件内容 cat file.txt 2.合并文件内容 cat file1 file2>newfile3 ...
- PHP DES加解密
test.php测试文件 <?php require_once('Des.php'); $des = new Des(); $data['a'] = 'a'; $data['b'] = 'b'; ...