开发者社区> 问答> 正文

关于ORM选型问题,分享下我对spring jdbc的使用经验:报错

由于不太喜欢hibernate和mybatis,更多使用spring jdbc来开发,针对spring jdbc一些不便捷的地方,做了写整合,写了sborm,具体可以看项目介绍。
osc项目地址:http://www.oschina.net/p/sborm
之所以要写这个,主要基于以下几个方面:

1、hibernate:过于臃肿,使用不够灵活,优化难(其实主要是因为很少用),HQL感觉就是个渣,在 mysql几乎一统天下的背景下,跨数据库级别的兼容吃力不讨好。Hibernate的对象化关联处理确实挺强大,但是使用起来坑太多,有多少人敢在项目 中大范围使用真不知道,屠龙刀不是人人都提的起啊。

2、mybatis:轻量级,基于xml的模式感觉不利于封装,代码量不小,基于xml维护也麻烦(个人观点, 现在注解模式貌似也挺不错),感觉mybatis更适合存在dba角色的年代,可以远离代码进行sql调优,复杂的查询拼装起来也更加优雅(java基本 就是if else ...),但是对于查询业务简单但是数据库集群环境的场景有点憋屈(其实对mybatis使用也不多,瞎评论^_^)。

3、springjdbc:小巧,灵活,足够优秀,个人比较喜欢使用,但是代码量偏大,原生的接口重复劳动量大,比如insert、mapper之类的;

sborm只是针对springjdbc的一些不方便的地方,做了一些封装,更加简化日常的开发工作,基于springjdbc的RowMapper自动实现对象映射,也勉强算的上叫ORM,只是大部分功能已经由springjdbc实现了。

平时不太喜欢使用hibernate和mybatis,主要是使用springjdbc,写这个东西的出发点主要是平时使用springjdbc觉 得比较麻烦,重复性的代码偏多,一方面通过自动mapper降低返回结果处理工作量,另一方面参考hibernate对象化查询条件的模式,写了一个 QueryBudiler,使得更多简单的单表查询可以通过对象组织查询、更改逻辑,避免过多去写相似性的SQL语句,减少DAO接口量。

展开
收起
kun坤 2020-06-09 11:21:31 950 0
1 条回答
写回答
取消 提交回答
  • ######欢迎交流使用activerecord模式、https://github.com/Dreampie/resty 或者 http://git.oschina.net/Dreampie/resty###### 下面这样的代码,看上去就不想用了。

    public static void testSelect() {
            try {
                Demo demo = new Demo();
                QueryBuilder q = new QueryBuilder(demo);
                q.columns().select(Demo.Columns.id, Demo.Columns.name); // 不选择默认查询所有,多参数模式
                q.where()
                        .add(QueryCondition.EQ(Demo.Columns.name, "test"))  // =条件
                        .add(QueryCondition.BETWEEN(Demo.Columns.createTime, "2014-07-10 11", "2014-07-19 12")); // between条件
                q.order().add(Demo.Columns.createTime, OrderMode.DESC);     // 条件排序
                List<?> list = dao.select(q);
                System.out.println(list.size());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    ######回复 @franticwind : 没什么代码量,定义接口Mapper和SQL的XML就完了,Mapper用Spring生成,用autowared注入,都是固定的模式。主要是SQL可以直接用,拼的SQL太难读######回复 @jorneyr : 这个是mybatis的方式吧,感觉代码量有点大,无法抽象,你是咋简化的?######回复 @franticwind : 直接写SQL在xml里比这个看上去好多了######你一般是怎么写的?说实话,开始我也是写n多dao接口,发现实在麻烦,才这么做,更通用一点,你有啥好推荐的方法,指教下。######同意!###### 推荐我的ORM
    https://github.com/hubinix/com.kamike.db ###### 我ORM的检索代码

     public ArrayList<Disk> find(Disk t) { GenericSelect<Disk> select = createSelect(); ResultSet rs = null; PreparedStatement ps = null; Connection conn = null;

        ArrayList<Disk> ret = null;
        try {
            conn = DbInst.getInstance().getDatabase().getSingleConnection();
            ps = conn.prepareStatement(select.rawSql() + "where t.id=? ", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            ps.setString(1, t.getId());
       
            rs = ps.executeQuery();
            ret = select.fetch(rs);
    
    
        } catch (Exception e) {
            ret = new ArrayList<>();
            System.out.println(this.getClass().getName() + e.toString());
    
    
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                    rs = null;
                }
                if (ps != null) {
                    ps.close();
                    ps = null;
                }
                if (conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException ex) {
                Logger.getLogger(DiskReader.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    
    
        return ret;
    
    
    }</pre> 
    

    ######很好!最重要找到自己的方式,适合就是最好!######自己用的爽就好了。######

    引用来自“Black_JackQ”的评论

    自己用的爽就好了。 经常用dbutils######有没有对
    2020-06-09 11:21:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载