spring jdbcTemplate 做持久层 并对其进行优化
来源:互联网 发布:工商联数据库 编辑:程序博客网 时间:2024/05/29 10:55
这个系列的文章不只是为了向大家介绍成果,同时也是开发过程的记录,也是一个脚印吧。
为什么选择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虚拟机的安全校验,结果不是像前面说的那么的完美,但是最终的结果应该是等效的。
- spring jdbcTemplate 做持久层 并对其进行优化
- Spring持久层(一)Spring JdbcTemplate 的例子
- Spring持久层(二)Spring 命名JdbcTemplate 的例子
- 对其SQL进行优化
- 对主流的图像分割算法进行比较,并对其部分算法进行优化
- 写持久层时对Handler进行的总结
- hibernate做持久层,spring管理事物的架构方式
- Spring持久层
- spring 持久层
- spring持久层
- spring boot 整合quartz并进行jdbc持久化
- 定时器精确到毫秒并对其进行误差测试
- 通过反射访问私有属性并对其进行修改
- Java创建一个文本文件,并对其进行读写操作
- Android选取相册中的图片并对其进行压缩
- JQuery 遍历web中的Table并对其进行操作
- python之Pexpect, 启动子进程并对其进行控制
- JDBC--java链接数据库并对其进行操作
- 无线与PC的区别
- string的常用操作
- iOS中的md5,crc32校验
- iOS企业级用户版本更新
- Basic Operators Of Swift 2.1
- spring jdbcTemplate 做持久层 并对其进行优化
- c++11智能指针解析——揭开底层面纱,完整理解智能指针
- c++反射机制的实现
- unsafe的使用报错
- canvas 折线图
- java 中泛型的使用
- Google Map开发系列(十二)——定制GoogleBar --谷歌地图的本地搜索栏
- This project contains java compilation errors
- Hibernate框架简述