Java学习:Java Bean 自动生成 INSERT SQL 及 JDBC 操作优化,
分享于 点击 26387 次 点评:184
Java学习:Java Bean 自动生成 INSERT SQL 及 JDBC 操作优化,
功能说明
将Java Bean类转换为标准的INSERT SQL语句模板,支持:
- 自动转换驼峰命名 → 下划线命名
- 动态适配所有字段
- 生成参数占位符(?)
public static String generateInsert(Class<?> beanClass){
//基础结构初始化
StringBuilder sql = new StringBuilder("insert into ");
//表名转换
String tableName = convertToSnake(beanClass.getSimpleName());
sql.append(tableName).append("(");
//Bean 对象中的所有字段 - 注意:Bean对象的字段与数据表的字段————对应
Field[] declaredFields = beanClass.getDeclaredFields();
for (Field declaredField : declaredFields) {
sql.append(convertToSnake(declaredField.getName())).append(",");
}
//去除最后一个逗号
sql.deleteCharAt(sql.length()-1);
sql.append(") values (");
//参数占位符生成
for (int i = 0; i < declaredFields.length; i++) {
sql.append("?").append(",");
}
sql.deleteCharAt(sql.length()-1);
sql.append(")");
return sql.toString();
}
自动生成添加SQL,并实现JDBC 添加操作
public static int insert(Object model){
int row = 0;
String sql = SqlGenerate.generateInsert(model.getClass());
Connection connection = DruidUtil.getConnection();
PreparedStatement pst = null;
try {
pst = connection.prepareStatement(sql);
//第四:填充数据
//1.获取Bean对象的 Class对象
Class<?> clazz = model.getClass();
//2.获取Bean对象的所有字段
Field[] fields = clazz.getDeclaredFields();
//3.循环遍历所有的字段,读取字段数据,并填充占位符
for (int i = 0; i < fields.length; i++) {
fields[i].setAccessible(true);
//3.1)获取当前遍历字段的数据
Object currentFieldData = fields[i].get(model);
//3.2)填充占位符
pst.setObject(i + 1,currentFieldData);
}
//第五:执行SQL语句
row = pst.executeUpdate();
} catch (Exception e) {
throw new RuntimeException(e);
}
return row;
}
测试结果:
// 第一:定义一个员工对象,并初始化相关的信息
Staffs staff = new Staffs();
staff.setId(6);
staff.setName("王八");
staff.setAge(22);
staff.setPhone("110");
staff.setStaPos("项目经理");
staff.setAddTime(LocalDateTime.now());
staff.setUpdateTime(LocalDateTime.now());
System.out.println(DbUtil.insert(staff));
用户点评