欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

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

来源: javaer 分享于  点击 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));
相关栏目:

用户点评