不积跬步,无以至千里
问题所在
今天重构以前的代码,因为数据库有比较大的改动,所以需要写很多javaBean!
作为一个程序员,重复意味着没有效率,更意味着无聊,一旦无聊便没有想编程的欲望,代码质量肯定刷刷刷的下降,质量下降了就意味着重写。。。。
so,为了集中精力在业务逻辑的代码上,减少不必要的时间浪费,于是花了一点时间写了一个把数据库中表的字段自动映射到 javaBean 中。
需求说明
输入所生成 文件的存放路径、文件的名称(默认是表名)、包名(生成的是java文件,一定要指定包名)、是否使用lombok插件(考虑到自己实现getter/setter方法有一定的困难,直接借助lombok插件),判断每一个表中的字段的类型,生成一个标准的javaBean文件。
实现
依赖
- jdk1.8
- mysql-connector-java 驱动包
实现方法
- 使用mysql-connector-java连接需要操作的数据库;
- 得到数据库中所有的表名;
- 根据表名和数据库名称得到表的字段以及字段的类型;
- 根据表名和字段的类型,生成目标文件最重要的部分内容;
- 一个创建文件并向文件输入内容的方法;
- 对上述方法进行封装!
- 测试+完工;
- 记录+完善。
假想的条件
- 数据库的表名使用 下划线区分各个单词 来命名,eg: registed_user , approved_user;
- 数据库中的字段也如同表名的命名一样;
show代码
文件结构说明
ConnectionUtil.java
得到数据库的连接
package connection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionUtil {
public static Connection getConn(String dbName, String username, String password) {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/"+dbName+"?useUnicode=true&characterEncoding=utf-8&useSSL=false";
Connection conn = null;
try {
Class.forName(driver);
conn = (Connection) DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
}
MapperUtil.java
这里写的是上述需要封装的所有方法
package mapper;
import connection.ConnectionUtil;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.sql.*;
import java.util.*;
public class MapperUtil {
private DatabaseMetaData databaseMetaData;
Connection connection;
public MapperUtil(String dbName, String username, String password) throws SQLException {
connection = ConnectionUtil.getConn(dbName, username, password);
databaseMetaData = connection.getMetaData();
}
/**
* 只是文件名(不包含扩展名)
* @param fileName 文件名称
* @param dir 文件所处的目录
* @param mainContent 文件的主要内容
* @param isLombok 是否包含lombok常见的一些方法?包含:不包含
*/
public void createFile(String fileName, String dir, String packagePath, String mainContent, boolean isLombok) throws Exception {
if (fileName == null || fileName.trim().equals("") || dir == null || dir.trim().equals("")){
throw new Exception("传入参数不正确");
}
/**
* 1.首先检测是否有这个文件夹路径
* 2.如果不存在则新建
*/
File fileDir = new File(dir);
if (!fileDir.exists()){
fileDir.setWritable(true);