基于JDBC,JPA Annotation 实现的简易CRUD的泛型Dao

:D 想法的由来是蛮长的历史原因:


[color=red][b][使用iBATIS的历史][/b][/color]
使用iBATIS已经有很长一段时间了,系统中的CRUD是使用模板工具生成的代码,虽说有工具生成,但看着一大堆CRUD的SqlMap.xml文件,依旧是很不爽的一件事情.


[color=red][b][Hibernate与iBATIS的整合][/b][/color]
后来, 考虑了[b]整合Hibernate和iBATIS[/b]的想法,也就是[b]Hibernate处理CRUD, iBATIS负责复杂查询[/b]. 实践后是可行的,目前项目中也采纳并加以推广使用.

但是, Hibernate是有自己的缓存机制,而iBATIS完全没有像Hibernate这么强烈的延时缓存的概念, (当然,iBATIS有CacheModel,但那也是结果集的缓存,而不是new一个对象都是缓存的.) 而且, Hibernate是最后一次性flush事务,一个事务内的其他操作都是对缓存的操作.而iBATIS在一个事务内的操作都是直接对connection进行操作.
正由于Hibernate与iBATIS之间有这么大的差异,处理起来就必须注意调用Hibernate与iBATIS的先后顺序.


[color=red]
[b][使用JDBC实现基本CRUD功能,替换掉Hibernate][/b][/color]
但是,最近又在想,既然只是一个简单的CRUD功能就劳师动众的使用Hibernate,而且,还带来很多不必要的麻烦, 于是考虑在[b]JDBC的基础上自己实现CRUD的功能[/b], 由于iBATIS也是直接进行connection操作的,JDBC同样也是,那么就事务而言比Hibernate与iBATIS的整合简单多了,避免了很多不必要的烦恼.


[color=red][b][依赖JPA的Entity,Id,Column的Annotation配置][/b][/color]
在基本实现后,考虑继续使用JPA的Annotation配置来维护Entity Bean,使用后,虽然感觉比较冗余,不过也蛮不错的. 由于Annotation不熟,目前只能将@Id, @Column等配置写于getter方法上. 目前的实现也没有处理任何的容错,field都必须标注@Column.


东西蛮简单的, 莫见怪. 具体内容可以见项目代码, 项目基于Eclipse3.4,Spring2.5,Mysql.
项目rar的lib中已经包含了所依赖的所有jar包. 项目rar中也有基本的说明文字.

摘录基本代码:

[b]Entity Bean[/b]

@Entity(name = "ONE")
public class OneBean extends BaseBo {
private BigDecimal id;

@Id
@Column(name = "ID")
public BigDecimal getId() {
return id;
}
// ...
}


[b]CrudDao的使用[/b]

public class OneBeanService implements IOneBeanService {
private CrudDaoFactory crudDaoFactory;

public void noException() throws Exception {
CrudDao<OneBean> crudDao = crudDaoFactory.getCrudDao(OneBean.class);
OneBean bean = this.createOneBean(new BigDecimal(100));
crudDao.insert(bean);
}
// ...
}


[b]Spring配置[/b]

<bean id="crudDaoFactory" class="cn.iwoo.frame.orm.CrudDaoFactory">
<property name="dbType" value="mysql"/>
<property name="dataSource" ref="dataSource"/>
</bean>

<bean id="oneBeanService" class="cn.iwoo.frame.orm.service.impl.OneBeanService">
<property name="crudDaoFactory" ref="crudDaoFactory"/>
</bean>



下面是Test.java运行时输出的log信息:

16:48:11,156 DEBUG CrudDao:36 - INSERT INTO ONE(NAME, ID, PASSWORD, SEX, BIRTH_DATE_TIME) VALUES ('xx', 200, 'psw', null, '2009-02-23 16:48:11.156')

16:48:11,171 DEBUG CrudDao:66 - SELECT NAME, ID, PASSWORD, SEX, BIRTH_DATE_TIME FROM ONE WHERE ID = 200

16:48:11,203 DEBUG CrudDao:124 - NAME,ID,PASSWORD,SEX,BIRTH_DATE_TIME

16:48:11,203 DEBUG CrudDao:128 - xx,200,psw,null,2009-02-23 16:48:11.156
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值