Java学习:Java Bean 自动生成 INSERT SQL 及 JDBC 操作优化

打印 上一主题 下一主题

主题 987|帖子 987|积分 2961

功能说明
将Java Bean类转换为标准的INSERT SQL语句模板,支持:

  • 自动转换驼峰命名 → 下划线命名
  • 动态适配全部字段
  • 生成参数占位符(?)
  1. public static String generateInsert(Class<?> beanClass){
  2.       //基础结构初始化   
  3.       StringBuilder sql = new StringBuilder("insert into ");
  4.         //表名转换
  5.         String tableName = convertToSnake(beanClass.getSimpleName());
  6.         sql.append(tableName).append("(");
  7.         //Bean 对象中的所有字段 - 注意:Bean对象的字段与数据表的字段————对应
  8.         Field[] declaredFields = beanClass.getDeclaredFields();
  9.         for (Field declaredField : declaredFields) {
  10.             sql.append(convertToSnake(declaredField.getName())).append(",");
  11.         }
  12.         //去除最后一个逗号
  13.         sql.deleteCharAt(sql.length()-1);
  14.         sql.append(") values (");
  15.         //参数占位符生成
  16.         for (int i = 0; i < declaredFields.length; i++) {
  17.             sql.append("?").append(",");
  18.         }
  19.         sql.deleteCharAt(sql.length()-1);
  20.         sql.append(")");
  21.         return sql.toString();
  22.     }
复制代码
自动生成添加SQL,并实现JDBC 添加操作
  1.   public static int insert(Object model){
  2.         int row = 0;
  3.         String sql = SqlGenerate.generateInsert(model.getClass());
  4.         Connection connection = DruidUtil.getConnection();
  5.         PreparedStatement pst = null;
  6.         try {
  7.             pst = connection.prepareStatement(sql);
  8.             //第四:填充数据
  9.             //1.获取Bean对象的 Class对象
  10.             Class<?> clazz = model.getClass();
  11.             //2.获取Bean对象的所有字段
  12.             Field[] fields = clazz.getDeclaredFields();
  13.             //3.循环遍历所有的字段,读取字段数据,并填充占位符
  14.             for (int i = 0; i < fields.length; i++) {
  15.                 fields[i].setAccessible(true);
  16.                 //3.1)获取当前遍历字段的数据
  17.                 Object currentFieldData = fields[i].get(model);
  18.                 //3.2)填充占位符
  19.                 pst.setObject(i + 1,currentFieldData);
  20.             }
  21.             //第五:执行SQL语句
  22.             row = pst.executeUpdate();
  23.         } catch (Exception e) {
  24.             throw new RuntimeException(e);
  25.         }
  26.         return row;
  27.     }
复制代码
测试效果:
  1.    // 第一:定义一个员工对象,并初始化相关的信息
  2.         Staffs staff = new Staffs();
  3.         staff.setId(6);
  4.         staff.setName("王八");
  5.         staff.setAge(22);
  6.         staff.setPhone("110");
  7.         staff.setStaPos("项目经理");
  8.         staff.setAddTime(LocalDateTime.now());
  9.         staff.setUpdateTime(LocalDateTime.now());
  10.         System.out.println(DbUtil.insert(staff));
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

数据人与超自然意识

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表