开发实用小工具-通过类自动创建数据库表,从此摆脱手动建表麻烦
Posted 沉默着忍受
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发实用小工具-通过类自动创建数据库表,从此摆脱手动建表麻烦相关的知识,希望对你有一定的参考价值。
通过类自动创建数据库表,从此摆脱手动建表麻烦
当我们在做java项目的时候当我们创建好一个类的时候,如果要创建对应的数据库存储多条信息,如果这个类的属性很多,怎么才能避免创建表的时候不会失误,或者减少工作量?我最近开发了一个自动创建类对应的数据库小工具 CreateTableUtil,源码见下面文章。下面我重点讲讲怎么使用。
文章目录
工具使用背景
项目数据库存储类信息,但是该类的属性有几十条之多,sql脚本建表,可以会发生错误,代码编写量很多,数据库连接工具建表,可以会缺少属性或数据类型错误,一个对应类,用户自定义生成数据库的小工具就显得十分重要。对于学生党来说,在毕业设计时,使用这个小工具 CreateTableUtil,可以极大的减少创建表时的出错概率。最重要的是节省时间!一、引入CreateTableUtil需要的jdbc依赖
友情推荐我的文章:JDBC技术浅谈
1.1 使用Spring框架集成CreateTableUtil方式;
在pom.xml中引入如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
我们的工具主要是使用jdbc进行数据库连接。
1.1.1 在项目目录里创建util工具包;
1.在util工具包创建Createtableutil包
2.在Createtableutil包下创建Config类;
package com.vaccine.mywork.util.Createtableutil;
import lombok.Data;
@Data
public class Config
private int id;
private String driverClassName="com.mysql.cj.jdbc.Driver";
private String url="jdbc:mysql://localhost:3306/yourdb?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" ;
private String username="root";
private String password="root";
注意:我这里使用了lombok工具,如果你在使用的时候没有lombok工具,记得手动构建类
3.创建CreateTable实现类;
package com.vaccine.mywork.util.Createtableutil;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
public class Createtable
//支持map通过K-v获取值
private List getClassInfo(Object o)
Field[] fields = o.getClass().getDeclaredFields();
String[] fieldNames = new String[fields.length];
List list = new ArrayList();
Map infoMap = null;
for (int i = 0; i < fieldNames.length; i++)
infoMap = new HashMap();
infoMap.put("type", fields[i].getType().toString());
infoMap.put("name", fields[i].getName());
list.add(infoMap);
return list;
//获取类的属性名称
private String[] getClassdatatype(Object o)
Field[] fields = o.getClass().getDeclaredFields();
String[] fieldtypes = new String[fields.length];
for (int i = 0; i < fieldtypes.length; i++)
fieldtypes[i] = fields[i].getType().toString();
return fieldtypes;
//获取类的属性类型
private String[] getClassdataName(Object o)
Field[] fields = o.getClass().getDeclaredFields();
String[] fieldNames = new String[fields.length];
for (int i = 0; i < fieldNames.length; i++)
fieldNames[i] = fields[i].getName();
return fieldNames;
//自动生成sql语句
public String createTablesql(String tablename,Object obs)
//判断是否符合规范
if(tablename.isEmpty()||obs==null)
return "参数不完整";
//获得类的属性名称
String[] name = getClassdataName(obs);
String[] type = getClassdatatype(obs);
String sql ="create table if not exists "+tablename+"(";
//转换数据类型
for(int i = 0;i<type.length;i++)
if(type[i].equals("class java.lang.String"))
type[i] = "varchar(255)";
for(int i = 0;i<name.length-1;i++)
sql=sql+name[i]+" "+type[i]+",";
sql=sql+name[name.length-1]+" "+type[name.length-1]+")";
return sql;
public static String createTable(Config config, String sql,String tablename) throws ClassNotFoundException, SQLException
Class.forName(config.getDriverClassName());
String url = config.getUrl();
String user=config.getUsername();
String password = config.getPassword();
Connection conn = DriverManager.getConnection(url, user, password);
Statement st = conn.createStatement();
//4. 执行sql
st.executeUpdate(sql);//创建表
String sql1 = "select * from "+tablename;
int res =0;
if(st.executeQuery(sql1)!=null)
res=1;
//5. 释放资源
st.close();
conn.close();
return res>0? "创建成功":"创建失败";
public String createTableUtils(Object obs,String tablename) throws SQLException, ClassNotFoundException
if(obs!=null)
Config config = new Config();
Createtable con = new Createtable();
String sql = con.createTablesql(tablename,obs);
System.out.println(sql);
System.out.println(createTable(config,sql,tablename));
return null;
1.2 无框架集成CreateTableUtil方式;
1.准备数据库驱动包,并添加到项目的依赖中:
在项目中创建文件夹lib,并将依赖包mysql-connector-java-5.1.47.jar复制到lib中。再配置该jar
包到本项目的依赖中:右键点击项目Open Module Settings,在Modules中,点击项目,配置
Dependencies,点击+,JARS or Directories,将该lib文件夹配置进依赖中,表示该文件夹下的
jar包都引入作为依赖。
文件目录参考:
mysql-connector-java-5.1.36jar包已经上传至GitHub,拿来即用!
2.需要手动实现Config构造;
package Createtableutil;
public class Config
private String driverClassName="com.mysql.cj.jdbc.Driver";
private String url="jdbc:mysql://localhost:3306/vaccines?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" ;
private String username="root";
private String password="318422";
public String getDriverClassName()
return driverClassName;
public String getUrl()
return url;
public String getUsername()
return username;
public String getPassword()
return password;
二、使用步骤
2.1 创建一个实例类
为了展示CreateTableUtil功能的强大,我创建一个超多属性的类;
package com.vaccine.mywork.model;
import com.vaccine.mywork.util.Createtableutil.Createtable;
import lombok.Data;
import java.sql.SQLException;
@Data
public class Vaccine
private int id;
private String vaccid; //疫苗编号
private String name; //疫苗名称
private String type; //疫苗种类
private String temp1; //存储温度
private String temp2; //运输温度
private int coldroomid; //冷库id
private String createtime; //生产时间
private String keep; //保质期
private String shop; //生产商
private String intoroomtime; //入库时间
private String rootid; //管理员id
private String guige; //疫苗规格
private int price; //疫苗价格
private String desction; //描述
private String canperson; //接种人群
private String body; //接种部位
private String way; //接种流程
private String usefultime; //有效期
private String warn; //备注
2.2 在这个类创建main方法,开始调用工具;
public static void main(String[] args) throws SQLException, ClassNotFoundException
Vaccine vaccine= new Vaccine();//创建需要创建数据库的实体类
Createtable con = new Createtable(); //创建工具类
con.createTableUtils(vaccine,"vaccdb");
//第一个参数是需要创建数据库的类,第二个参数是设置该表的名称;
3.3 运行main方法,并且查看数据库中是否创建好表;
自动生成的sql语句:
create table if not exists vaccdb(id int,vaccid varchar(255),name varchar(255),type varchar(255),temp1 varchar(255),temp2 varchar(255),coldroomid int,createtime varchar(255),keep varchar(255),shop varchar(255),intoroomtime varchar(255),rootid varchar(255),guige varchar(255),price int,desction varchar(255),canperson varchar(255),body varchar(255),way varchar(255),usefultime varchar(255),warn varchar(255))
创建成功
总结
该工具主要借助与jdbc和java类的反射机制实现,我只是站在前人的基础上开发出的这个自动生成数据库表的工具;项目还需优化,比如在自动生成sql语句我目前只处理了String转varchar,像Date类型并没有转换,而且没有设置主键和给予项目真实数据长度;需要通过你的项目需求修改; 只需要修改Createtable类中的createTablesql方法即可;//自动生成sql语句
public String createTablesql(String tablename,Object obs)
//判断是否符合规范
if(tablename.isEmpty()||obs==null)
return "参数不完整";
//获得类的属性名称
String[] name = getClassdataName(obs);
String[] type = getClassdatatype(obs);
String sql ="create table if not exists "+tablename+"(";
//转换数据类型
for(int i = 0;i<type.length;i++)
if(type[i].equals("class java.lang.String"))
type[i] = "varchar(255)";
for(int i = 0;i<name.length-1;i++)
sql=sql+name[i]+" "+type[i]+",";
sql=sql+name[name.length-1]+" "+type[name.length-1]+")";
return sql;
以上是关于开发实用小工具-通过类自动创建数据库表,从此摆脱手动建表麻烦的主要内容,如果未能解决你的问题,请参考以下文章