基于Java的简易ORM实现

本文介绍了一种在项目中实现动态分流功能的方法,通过自定义工具类直接与MySQL交互,绕过了主流ORM框架,实现了简单查询功能。文章分享了具体的Java代码实现细节,并讨论了进一步完善的方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目需要实现一个动态分流功能,需要获取各种数据表的配置信息,最终决定将配置信息写入Mysql中,做周期性同步,然后再从中读取配置进行分流。因业务不是很复杂,就不引入市面上主流的ORM框架了,故自行编写工具类做了个简易实现,也趁此复习了一下ORM,泛型,反射等(基础知识还是不过关啊…)
话不多说直接上代码吧:

    /**
     * @param sql                   sql语句
     * @param clazz                 对象所对应的类
     * @param underScoreCaseToCamel 根据代码中对象属性是驼峰与否写入true|false
     * @return 查询对象结果集合
     */
    public static <T> List<T> query(String sql, Class<T> clazz, boolean underScoreCaseToCamel) {
        //TODO 0.关闭资源 try-with-resource
        //TODO 2.建立连接
        //TODO 3.创建db操作对象
        //TODO 4.执行sql
        try (
                Connection connection = DriverManager.getConnection(MYSQL_URL, USER, PASSWORD);
                PreparedStatement ps = connection.prepareStatement(sql);
                ResultSet resultSet = ps.executeQuery();
        ) {
            //TODO 1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //TODO 5.处理结果集
            ResultSetMetaData metaData = resultSet.getMetaData();
            List<T> resultList = new ArrayList<>();
            while (resultSet.next()) {
                //反射创建对象
                T obj = clazz.newInstance();
                //注意jdbc下标从1开始
                for (int pos = 1; pos < metaData.getColumnCount(); pos++) {
                    String propertyName = metaData.getColumnName(pos);
                    if (underScoreCaseToCamel) {
                        //工具类简易转换字段风格
                        propertyName = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, propertyName);
                    }
                    //bean工具类简易对象属性赋值
                    BeanUtils.setProperty(obj, propertyName, resultSet.getObject(pos));
                }
                resultList.add(obj);
            }
            return resultList;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("执行sql查询出错!");
        }
    }

使用的工具类:

<!--在https://mvnrepository.com/中均可找到-->
apache-commons-beanutils
google-guava

正如标题所言,以上只是本人项目过程中临时写出来的工具类,功能等实现尚不完整(只是提供了一个简单的查询功能,条件查询与聚合等操作并不支持=,=),但已满足个人业务需要,以后有时间会将此好好完善的,请大佬轻喷(逃

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值