spring jdbcTemplate 做持久层 并对其进行优化

这个系列的文章不只是为了向大家介绍成果,同时也是开发过程的记录,也是一个脚印吧。

为什么选择jdbcTemplate

    本人在开发的过程中接触到的持久层包括 hibernate 、mybatis .. 两种持久层框架都感觉不尽如人意。首先说说hibernate,hibernate对数据库操作进行了重量级封装,使得对数据库的操作完全是面向对象的操作,其中的面向对象操作成为很多开发人员的福音。但是hql就不那么好了,hql虽然是sql的简化版本,但是hql毕竟是在sql上面套了一层,如果有一天你的程序在那一块操作变的异常的缓慢,那么对hql优化将会变得比较间艰难,而且hibernate底层大量使用了反射机制,虽然其反射大多数情况都是在程序初始化时执行的,但是在程序运行过程中反射机制也是存在的。而mybatis是持久层的轻量级封装,在mybatis中如果需要进行某一个操作,首先需要定义mapper,然后再定义mapper.xml。在mapper.xml中需要完成model映射,需要写上接口相关的sql,这个过程作者认为重复性的工作比较大。如果能够在java类中直接书写sql,同时还能够进行简单的对象操作,那么程序将既拥有hibernate的部分有点,又将拥有mybatis的部分有点。在今后的开发中,我将会使用spring jdbcTemplate进行开发。

jdbcTemplate 的缺点

jdbcTemplate开发时不需要定义那么多的xml,不会有hql语句优化艰难的缺点,但是其存在一个致命性的问题,就是太过基础,基础的就像在使用jdbc进行操作。这严重影响了开发的效率。不过也正因为其基础性非常好,才使得其优化具有可行性。

如何进行jdbcTemplate的优化

      我认为提高jdbcTemplate 开发效率的方式是使用其具有面向对象的功能,比如说我们可以定义方法使得传入对象就可以完成单表CRUD操作、比如说,我们查询的时候,查询接口可以完成到DTO或者model的映射。

        这个时候我们就会想这在model上,或者dto上写上注解。使得字段可以与成员变量映射,然后使用反射操作将结果映射成对象。前面定义注解我认为是可取的,因为写注解的开销并不是很大。当然如果实体很多的时候,重复性也是会让人受不了的。不过我之前写过一个eclipse的插件,该插件可以给定义的实体批量的添加注解,虽然添加的注解有时候会有误差。但是修改比重复的添加效率总会提升很多很多吧。而后者使用反射来进行CRUD操作我认为是不可取的,因为反射的效率太慢了。

        我的想法是自动生成实体相关的crud操作实例化对象,然后创建可以map对象存储 实体的class与crud操作类相映射,每次对某个实体进行crud操作时,就从map中获取的操作对象,然后调用该操作类完成操作即可,业务处理过程将不存在任何的反射操作。

理想如此丰满,现实意味着妥协

       我采用javasist+freemarker的相关技术完成了相关的功能,由于javasist的很多的限制,比如说javasist不支持泛型,javasist生成的类有时候会不能通过java虚拟机的安全校验,结果不是像前面说的那么的完美,但是最终的结果应该是等效的。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值