第一步先连接数据库
public class DBUHelpers {
private static String DRIVER = "com.mysql.jdbc.Driver";
private static String URL = "jdbc:mysql://localhost:3306/zhongyin?useSSL=false&serverTimezone=UTC&characterEncoding=utf8";
private static String USERNAME = "root";
private static String PASSWORD = "123456";
private static Connection conn;
private static PreparedStatement ps;
private static ResultSet rs;
//预加载
static{
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//建立连接
public static Connection getConn(){
try {
conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
return conn;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
第二部你要通过数据库找到自己所在表中的三个列名
SELECT COLUMN_NAME name,DATA_TYPE type,COLUMN_COMMENT comment FROM information_schema.`COLUMNS` where TABLE_SCHEMA=? and TABLE_NAME=?
sql语句的由来
第三步
//sql语句把三个需要的搞出来 name 名称 type 类型 comment 注释
static String sql="SELECT COLUMN_NAME name,DATA_TYPE type,COLUMN_COMMENT comment FROM information_schema.`COLUMNS` where TABLE_SCHEMA=? and TABLE_NAME=?";
static String[] table={"zhongyin","doctor"};
static String packages="cn.hp.ioc";
static String tableName=Change_Upper(table[1]);
static StringBuffer parameter=new StringBuffer();
第四步
配置字母大小写
/**
* 首字母大写,如果有,则下一个字母大写
* @param s1
* @return
*/
public static String Change_Upper(String s1) {
String r = "";
String[] a = s1.split("_");//以_为分隔符,将单词分开
String[] b = new String[a.length + 1];
for (int i = 0; i < a.length; i++) {
//substring(0,1)首字母,toUpperCase()大写
b[i] = a[i].substring(0, 1).toUpperCase() + a[i].substring(1, a[i].length());
r = r + b[i];
}
return r;
}
/**
* //类型转换
* @param dataType
* @return
*/
public static String convertDataType(String dataType) {
switch (dataType) {
case "varchar":
case "longtext":
case "text":
return "String";
case "double":
return "Double";
case "int":
case "tinyint":
return "Integer";
case "bigint":
return "Long";
case "datetime":
case "timestamp":
case "Date":
return "Date";
case "decimal":
return "BigDecimal";
default:
return "";
}
}
然后设置编码格式
/**
* 将更改后的文件输出
* @param clz
* @param path
*/
public static void outPW(String clz,String path){
PrintWriter pw=null;
try {
pw = new PrintWriter(path,"UTF-8");
pw.write(clz);
} catch (Exception e) {
e.printStackTrace();
}finally {
if(pw!=null){
pw.close();
}
}
}
第五步开始导入
public static void main(String[] args) {
String clz="package ${packages}.entity;\n" +
"import lombok.Data;\n" +
"import java.util.Date;\n" +
"\n" +
"@Data\n" +
"public class $(tableName) {\n" +
" ${parameter}\n" +
"\n" +
"}\n";
List<Map> list = DBUHelpers.select(sql,table);
for (Map map:list){
System.out.println(map);
parameter.append(" /**\n")
.append(" *"+map.get("comment")+"\n")
.append(" **/\n")
.append(" private"+" "+convertDataType(map.get("type").toString())+" "+map.get("name")+" "+";\n");
}
System.out.println(clz.replace("${packages}", packages)
.replace("$(tableName)",tableName)
.replace("${parameter}",parameter.toString()));
outPW(clz.replace("${packages}", packages)
.replace("$(tableName)",tableName)
.replace("${parameter}",parameter.toString()),tableName.concat(".java"));
}
第六步开始运行
一个列名类,拉到你封装实体类的包下即可
这就是逆向生成实体类,不懂不会可以私聊我