一个简单的数据库持久方案
来源:互联网 发布:kitti数据集介绍 编辑:程序博客网 时间:2024/04/29 11:28
1、select 查询语句,可能返回一个数据集(ResultSet),或单一数据类型
2、insert、delete、update更新数据语句,没有返回集。
3、存储过程,可能有返回集。
JAVA O/R持久方案,即将JAVA对象与DBMS的二维数据进行关联映射,主要也依赖上述三种操作来同步二维数据。
现在行内持久方案有多种持久方案,其中Hibernate、Ibatis较为著名。我曾用过这两个框架,可能并不很深入,如下面有误,请指教。
Hibernate建立了一整套对应关系,包括HBM对应、VO、SessionFactory + DAO。业务开发人员可以只关注JAVA层,而无耍太多数据库技能。
Ibatis 则拥抱SQL,为开发人员提供更多更方便的SQL支持。开发人员必须有相关SQL经验,并需手写SQL操作语句,对VO、DAO也相对较灵活,同时提供了SQL语句可配置(个人很喜欢这点)。
Hibernate对实现了二维数据到VO(或Map)的select映射支持,Hibernate同时还实现了insert、update、delete的自动代码。两者都有Cache支持。
个人认为,Hibernate封装了太多东西,并不方便控制,而且由于VO必须与数据库表对应,对于复杂的SQL操作实现很麻烦。而且SQL/HQL硬编码在代码中,不方便维护。Ibatis比Hibernate来说灵活多了,但由于很多过程被封装了,开发人员想对中间步骤进行控制比较麻烦,比如我想在DAO层AOP控制通用分面和通用数据权限。
由于这些问题,我综合了上述框架的优缺点,完成了一个简单的持久方案。先介绍一下相关的知识:
- java.sql.ResultSetMetaData 数据集元数据,其中可得到此操作结果集的列信息。
- org.apache.commons.beanutils.BeanUtils和org.apache.commons.beanutils.RowSetDynaClass apache组织Beanutils包提供的一些工具类,BeanUtils实现了对JavaBean的常用操作工具。
- org.springframework.jdbc.core.JdbcTemplate Spring框架简化SQL操作的一个工具类。
- 数据库系统字典表,根据DBMS会有所不同(我用过的都有:ORACLER的user_*,SqlServer的sysobjects等,DB2的sys*,应规定接口并对各DBMS单独实现),根据这些表可得到数据库表、表字段、约束、存储过程的相关信息。
我需要完成以下内容:
1、将数据库结果集映射成JavaBean VO或Map。通过使用BeanUtils、ResultSetMetaData和RowSetDynaClass即可完成,并在相关处提供AOP关注点方便以扣扩展。
2、将JAVA对象持久化到数据库中,这需要用到DBMS系统字典表和JAVA类反射,根据在系统表中查询要操作的表信息,得到主键,字段名称类型等信息,在JAVA中动态拼装一个update/insert/delete的SQL语句及Where条件。然后执行。
这可能大伙认为,每次操作均访问一次系统表字典会影响性能,实际上这在引入了CACHE后,性能影响很小。
3、对存储过程及单一类据查询(如select count(*) from table)的支持,单一数据类型支持JdbcTemplate已经实现了,这直接代理调用JdbcTemplate即可。存储过程支持,由于各数据库调用方式不一致,所以需在相关的DbmsUtils中实现一些内容。通过读取系统数据字典可得到过程的调用规范(入参及出差等),通过类反射和数据字典可拼装出过程调用SQL。加入AOP关注点,执行过程,并循环对所有出参进行处理(游标采用数据集方式处理)。
4、将SQL配置化,将所有操作的SQL均配置到XML文件中,这一块Ibatis做得相当不错,直接阅读Ibatis源程序,将相关内容偷过来即可。
5、以前面的AOP注入点中加入分页实现(需与前台相配合),加入数据权限实现(目前还未做到通用,谁有啥好方法,欢迎共享下)。
- 一个简单的数据库持久方案
- 数据库和持久化方案
- Redis 作为数据库持久化替代方案的问题分析
- 数据库sql简单的优化方案
- Redis的持久化方案
- Redis的持久化方案
- 一个简单的tomcat部署方案
- 实现一个简单的服务端推送方案
- 一个简单的网络推广小方案
- 实现一个简单的服务端推方案
- 一个简单的C++调试输出方案
- 一个简单的异步加载方案
- 跨域的一个简单方案
- 一个简单的redis高可用方案
- 一个简单的分布式锁实现方案
- [iOS]数据持久化-数据库的简单使用
- Apache ActiveMQ 持久化到MySQL数据库的简单配置
- Apache ActiveMQ 持久化到MySQL数据库的简单配置
- 不经保存,直接读取上传文件的内容
- 将Access数据库移植到Microsoft SQL Server 7.0
- Schema Structure小结
- 每日一句2006-12-25
- 用ASP自动生成SQL数据库的安装源程序
- 一个简单的数据库持久方案
- 避免asp的SQL的执行效率低
- 九段理财:投资人才是高手
- 天使和海豚的爱情
- 乘法速算的方法
- installshield的多安装程序制作
- 继续搬家
- 利用ASP存取各种常用类型数据库
- 由速算思路想到的大数相乘算法(一)