JDBCUtils,根据当前MySQL数据库下面的表生成java实体类
自己简单写的JDBCUtils,可以根据当前数据库下面的表生成java实体类,代码萌新,请多多包涵。
初始化配置:
//驱动程序名//不固定,根据驱动
static String driver = "com.mysql.jdbc.Driver";
// URL指向要访问的数据库名******,8.0jar包新增时区。
static String url = "jdbc:mysql://localhost/你的数据库名?serverTimezone=GMT%2B8";
// MySQL配置时的用户名
static String user = "你的帐号";
// Java连接MySQL配置时的密码******
static String password = "你的密码"; private static String[] colnames; // 列名数组 private static String[] colTypes; // 列名类型数组 private static String[] upperColnames; //驼峰命名的字段 private static List<StringBuffer> listArr=new ArrayList<StringBuffer>(); //存储最终的数据 static {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
打开与关闭数据库连接:
public static Connection mySQLOpen() {
Connection con = null;
try {
con = DriverManager.getConnection(url, user, password);
System.out.println("succeed to connection mysql!");
} catch (SQLException e) {
e.printStackTrace();
}
return con;
} public static void mySQLClose(ResultSet rs, Statement st, Connection con) {
try {
try {
if (rs != null) {
rs.close();
}
} finally {
try {
if (st != null) {
st.close();
}
} finally {
if (con != null)
con.close();
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
获得当前数据库下的所有表名:
/**
* 获得当前数据库生成数据库下所有的表名
* @author one
*
* */
public static List<String> getTableFromNowConnectDB(){
Connection conn=null;
DatabaseMetaData dbmd = null;
List<String> list = null;
try {
conn=mySQLOpen();
dbmd=(DatabaseMetaData) conn.getMetaData();
//conn.getCatalog():获得当前目录
ResultSet rs = dbmd.getTables(conn.getCatalog(), "%", "%", new String[] { "TABLE" });
if (rs != null) {
list = new ArrayList<String>();
}
while(rs.next()){
//System.out.println(rs.getString("TABLE_NAME"));
list.add(rs.getString("TABLE_NAME"));
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
生成每个表名的所有字段:
/**
* 生成所有的字段
*
* @param sb,把stringbuffer 对象传进来继续append
* @return
*/
private static void processAllField(StringBuffer sb) {
for (int i = 0; i < colnames.length; i++) {
sb.append("\tprivate " + colTypes[i] + " " + colnames[i] + ";\r\n");
}
}
生成每个表名的set(),get()访问器:
/**
* 生成所有的set(),get()
*
* @param sb,把stringbuffer 对象传进来继续append
*/
private static void processAllMethod(StringBuffer sb) {
for (int i = 0; i < colnames.length; i++) {
sb.append("\tpublic void set" + upperColnames[i] + "(" + colTypes[i] + " " + colnames[i] + "){\r\n");
sb.append("\t\tthis." + colnames[i] + " = " + colnames[i] + ";\r\n");
sb.append("\t}\r\n"); sb.append("\tpublic " + colTypes[i] + " get" + upperColnames[i] + "(){\r\n");
sb.append("\t\treturn this." + colnames[i] + ";\r\n");
sb.append("\t}\r\n");
}
}
生成每个表名的构造函数:
/**
* @author one
* 该方法用于生成构造函数
* @param sb,把stringbuffer 对象传进来继续append
* @see 默认生成一个无参数构造和带全部参数构造
*
* public UserInfo(){}
public UserInfo(int uid, String uname, String usex) {
super();
this.uid = uid;
this.uname = uname;
this.usex = usex;
}
* */
private static void processConstructor(StringBuffer sb,String tableName) {
sb.append("\tpublic "+tableName+"(){}\r\n");
sb.append("\tpublic "+tableName+"(");
String link="";
for (int i = 0; i < colnames.length; i++) {
sb.append(link + colTypes[i] + " " + colnames[i]);
link=",";
}
sb.append("){\r\n");
for (int i = 0; i < colnames.length; i++) {
sb.append("\t\tthis."+colnames[i]+"="+colnames[i]+";\r\n");
}
sb.append("\t}\r\n");
}
数据类型转换的方法:
/**
* 该方法用于类型转换
* @param dbType:传入的数据类型
* @author one
* */
private static String sqlTypeToJava(String dbType) {
dbType = dbType.toUpperCase();
switch (dbType) {
case "VARCHAR":
case "VARCHAR2":
case "CHAR":
return "String";
case "NUMBER":
case "DECIMAL":
return "double";
case "INT":
case "SMALLINT":
case "INTEGER":
return "int";
case "BIGINT":
return "int";
case "DATETIME":
case "TIMESTAMP":
case "DATE":
return "Date";
default:
return "Object";
}
}
创建文件夹,写入项目:
/**
* 创建java 文件 将生成的属性 get/set 方法 保存到 文件中
*
* @author one
* @param className
* 类名称
* @param content
* 类内容 包括属性 getset 方法
*/
public static void createFloder(String className, String content, String packageName) {
String folder = System.getProperty("user.dir") + "/src/" + packageName + "/"; File file = new File(folder);
if (!file.exists()) {
file.mkdirs();
}
String fileName = folder + className + ".java"; try {
File newdao = new File(fileName);
FileWriter fw = new FileWriter(newdao);
fw.write("package\t" + packageName.replace("/", ".") + ";\r\n");
fw.write(content);
fw.flush();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
生成实体类:
/**
* 该方法生成Entity
* @param tablename:表名集合
* @param packname:要生成的路径
* @author one
* */
public static List<StringBuffer> createEntity(List<String> tableNames,String packname) throws Exception{
Connection conn=null;
PreparedStatement pstmt=null;
ResultSetMetaData rsmd = null;
//每个表的表名
String eveTableName="";
conn=mySQLOpen(); //System.out.println("当前数据库下的表的总数:"+tableNames.size());
for (int i = 0; i < tableNames.size(); i++) {
//用StringBuffer的形式先输出测试一下
StringBuffer sb=new StringBuffer("");
//表名首字母转大写
eveTableName=tableNames.get(i).substring(0, 1).toUpperCase()+tableNames.get(i).substring(1,tableNames.get(i).length());
sb.append("public class "+eveTableName+" {\n\n");
//查询语句
String sql="select * from "+eveTableName; pstmt=conn.prepareStatement(sql);
//获得表的元数据
rsmd=pstmt.getMetaData();
// 每个表共有多少列
int size = rsmd.getColumnCount();
//把字段放在集合里面
colnames = new String[size];
colTypes = new String[size];
upperColnames = new String[size]; for (int j = 0; j < size; j++) {
String columnName = rsmd.getColumnName(j+1);//每列的字段名
colnames[j]=columnName;
String colunmType=sqlTypeToJava(rsmd.getColumnTypeName(j+1));//每列的类型
colTypes[j]=colunmType;
//接下来做驼峰命名的字段
String upperColumnNam= rsmd.getColumnName(j+1).substring(0,1).toUpperCase()+
rsmd.getColumnName(j+1).substring(1,rsmd.getColumnName(j+1).length());
upperColnames[j]=upperColumnNam;
}
processAllField(sb); //生成字段
processAllMethod(sb); //生成set,get方法
processConstructor(sb,eveTableName); //生成构造函数
//添加最后一个括号
sb.append("}");
//创建文件夹,sb.toString(),把数据加进去
createFloder(eveTableName,sb.toString(),packname);
listArr.add(sb);
}
//关闭连接
mySQLClose(null,pstmt,conn);
return listArr;
}
展示数据的方法:
/**
* 展示
* */
public static void goCreate(){
try {
List<StringBuffer> result=createEntity(getTableFromNowConnectDB(),"vo2");
for (int i = 0; i < result.size(); i++) {
System.out.println("============第"+(i+1)+"个表的实体类生成============");
System.out.println(result.get(i));
}
} catch (Exception e) {
e.printStackTrace();
}
}
效果如下:
文件夹创建效果:
JDBCUtils,根据当前MySQL数据库下面的表生成java实体类的更多相关文章
- Mysql逆向工程效率神器之使用IDE自动生成Java实体类
Mysql逆向工程效率神器之使用IDE自动生成Java实体类 简介:实战使用IDE根据Mysql自动生成java pojo实体类 1.IDEA连接数据库 菜单View→Tool Windows→Dat ...
- 在线数据库表(sql语句)生成java实体类工具
相信每个做java开发的读者,都接触过SQL建表语句,尤其是在项目开发初期,因为数据库是项目的基石. 在现代项目开发中,出现了许多ORM框架,通过简单的实体映射,即可实现与数据库的交互,然而我们最初设 ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类
笔记 6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类 简介:实战使用IDE根据Mysql自动生成java pojo实体类 1.IDEA连接数 ...
- PowerDesigner16.5物理数据表生成C#实体类Model
原文:PowerDesigner16.5物理数据表生成C#实体类Model 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/da454122373/a ...
- 【转】PowerDesigner物理数据表生成C#实体类Model
model实体类是什么: 在三层架构UI,BLL,DAL中,有时用户插入一条记录到数据库中,必然会有不少数据,按正常编程,也必然会一下子调用某个函数传入不少参数.为了减少参数的数量,达到高效简洁的效果 ...
- mysql逆向生成 java 实体类
import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; import java.sql.Connecti ...
- ABAP表生成Java实体Bean
项目中需要将HR模块中的表数据同步到Java系统中,向外围系统提供分发与查询服务,涉及到的表有两百多张,字段好几千上万个,如果手工一张张这些ABAP表在Java系统数据库中创建一遍的话,工作量将非常大 ...
- myeclipse 从数据库生成java实体类
- net core天马行空系列-可用于依赖注入的,数据库表和c#实体类互相转换的接口实现
1.前言 hi,大家好,我是三合.作为一名程序猿,日常开发中,我们在接到需求以后,一般都会先构思一个模型,然后根据模型写实体类,写完实体类后在数据库里建表,接着进行增删改查, 也有第二种情况,就是有些 ...
随机推荐
- 置顶,博客中所有源码 github
所有项目源代码,开源地址. 作者 github 主页 https://github.com/nejidev 目前开源项目有: 1, linux tea5767 at24c08 mmap 实现fm 收音 ...
- cocos2d-x android 入门
前一段时间使用传统方式做了一个CS软件,发现 UI 显示的比较慢,突发奇起,开始研究起来 GPU 加速,最后开始学习 cocos2dx. 开发环境以最新的 Cocos2d-x 3.17.1 Andro ...
- 【05】openlayers 网格图层
效果: 创建地图: //创建地图 var map = new ol.Map({ //设置显示地图的视图 view: new ol.View({ projection: 'EPSG:4326', //投 ...
- 学习ConcurrentHashMap并发写机制
1. 前言 上篇文章讲了 Unsafe 类中 CAS 的实现,其实是在为这篇文章打基础.不太熟悉的小伙伴请移步Unsafe 中 CAS 的实现.本篇文章主要基于 OpenJDK8 来做源码解析. 2. ...
- Python数据科学手册(1) IPython:超越Python
1.1 shell还是Notebook Jupyter Notebook 是 IPython shell 基于浏览器的图形界面,提供了一系列丰富的动态展示功能.Jupyter Notebook 不仅可 ...
- js 实现字符串的查找和替换
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- go源码分析(一) 通过调试看go程序初始化过程
参考资料:Go 1.5 源码剖析 (书签版).pdf 编写go语言test.go package main import ( "fmt" ) func main(){ fmt.Pr ...
- el-dialog对话弹框中根据后台数据无限制添加el-select标签,并进行展示,搜索,删除
前几天遇到一个题,el-dialog对话弹框中根据后台数据无限制添加el-select标签,并进行展示,搜索,删除,在这上面用到了递归算法,废话不多说,直接上代码 <template> & ...
- 视频 embed标签动态改变Src的值,局部刷新播放其他视频的javascript方法
看图: 视频处html代码: <div id="mod_player" class="mod_player"> <embed id=" ...
- 等价类计数:Burnside引理 & Polya定理
提示: 本文并非严谨的数学分析,有很多地方是自己瞎口胡的,仅供参考.有错误请不吝指出 :p 1. 群 1.1 群的概念 群 \((S,\circ)\) 是一个元素集合 \(S\) 和一种二元运算 $ ...