首先连接数据库: 创建包 com.hnsl.util 在里边建DBHelper类
package com.yzx.util;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DBHelper {
//驱动
private static String driver = "com.mysql.jdbc.Driver";
//访问数据的链接路径
private static String url = "jdbc:mysql:///stu?useSSL=false&serverTimezone=UTC&characterEncoding=utf8";
private static String name = "root";
private static String pwd = "123456";
private static Connection conn;
private static PreparedStatement ps;
private static ResultSet rs;
private DBHelper() {
}
static {
try {
Class.forName(driver);
System.out.println("驱动加载成功!");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取链接
*/
public static Connection getConn() {
try {
conn = DriverManager.getConnection(url, name, pwd);
System.out.println("数据库链接建立成功!");
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 关闭资源
*/
public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
try {
if (conn != null) {
conn.close();
}
if (ps != null) {
ps.close();
}
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(Connection conn, PreparedStatement ps) {
close(conn, ps, null);
}
public static void close(Connection conn) {
close(conn, null, null);
}
/**
* 查询方法
*
* @param sql sql语句
* @param obj 参数
* @return List<Map>
*/
public static List<Map> select(String sql, Object... obj) {
List<Map> list=new ArrayList<>();
// 1.建立连接
getConn();
try {
// 2.创建语句对象,预编译
ps = conn.prepareStatement(sql);
System.out.println("sql语句:"+sql);
// 3.参数处理 itar 普通for循环
for (int i = 0; i < obj.length; i++) {
System.out.println("第"+(i+1)+"个参数:"+obj[i]);
ps.setObject(i + 1, obj[i]);
}
// 4.执行sql,得到结果集
rs = ps.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();//元数据,查询的数据结构
while (rs.next()) {
Map map = new HashMap();
int columnCount = metaData.getColumnCount();//字段的列数,id,name 获取的就是2
for (int i = 0; i < columnCount; i++) {
//metaData.getColumnLabel(i+1)//这个的从1开始获取第几列的字段名称
//rs.getObject(i+1)//根据列数(从1开始)数据集中的数据
map.put(metaData.getColumnLabel(i + 1), rs.getObject(i + 1));
}
list.add(map);
}
return list;
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn, ps, rs);
}
return null;
}
/**
* 编辑方法
*
* @param sql sql语句
* @param obj 参数
* @return List<Map>
*/
public static int update(String sql, Object... obj) {
int l = 0;
// 1.建立连接
getConn();
try {
// 2.创建语句对象,预编译
ps = conn.prepareStatement(sql);
System.out.println("sql语句:"+sql);
// 3.参数处理 itar 普通for循环
for (int i = 0; i < obj.length; i++) {
System.out.println("第"+(i+1)+"个参数:"+obj[i]);
ps.setObject(i + 1, obj[i]);
}
// 4.执行sql,得到结果集
l = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn, ps, rs);
return l;
}
}
public static void main(String[] args) {
System.out.println(getConn());
}
}
效果:
然后在com.hnsl.util包里 创建Gen类
package com.yzx.util;
import java.io.PrintWriter;
import java.util.List;
import java.util.Map;
/**
* 代码生成类
*/
public class Gen {
//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={"stu","student"};//stu:数据库名 student:表名
static String packages="com.hnsl";//路径
static String tableName=Change_Upper(table[1]);
static StringBuffer parameter=new StringBuffer();
//parameter 参数
public static void main(String[] args) {
String clz="package ${packages}.entity;\n" +
"\n" +
"import lombok.Data;\n" +
"\n" +
"@Data\n" +
"public class ${tableName} {\n" +
" ${parameter}\n" +
"}";
List<Map> list=DBHelper.select(sql,table);
for(Map map:list){
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"));
}
//将更改后的文件输出
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 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;
}
//类型转换
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";
case "char":
return "Character";
default:
return "";
}
}
}
运行结果:封装实体类生成