浏览 7310 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-23
最后修改:2009-02-23
[使用iBATIS的历史] 使用iBATIS已经有很长一段时间了,系统中的CRUD是使用模板工具生成的代码,虽说有工具生成,但看着一大堆CRUD的SqlMap.xml文件,依旧是很不爽的一件事情. [Hibernate与iBATIS的整合] 后来, 考虑了整合Hibernate和iBATIS的想法,也就是Hibernate处理CRUD, iBATIS负责复杂查询. 实践后是可行的,目前项目中也采纳并加以推广使用. 但是, Hibernate是有自己的缓存机制,而iBATIS完全没有像Hibernate这么强烈的延时缓存的概念, (当然,iBATIS有CacheModel,但那也是结果集的缓存,而不是new一个对象都是缓存的.) 而且, Hibernate是最后一次性flush事务,一个事务内的其他操作都是对缓存的操作.而iBATIS在一个事务内的操作都是直接对connection进行操作. 正由于Hibernate与iBATIS之间有这么大的差异,处理起来就必须注意调用Hibernate与iBATIS的先后顺序. [使用JDBC实现基本CRUD功能,替换掉Hibernate] 但是,最近又在想,既然只是一个简单的CRUD功能就劳师动众的使用Hibernate,而且,还带来很多不必要的麻烦, 于是考虑在JDBC的基础上自己实现CRUD的功能, 由于iBATIS也是直接进行connection操作的,JDBC同样也是,那么就事务而言比Hibernate与iBATIS的整合简单多了,避免了很多不必要的烦恼. [依赖JPA的Entity,Id,Column的Annotation配置] 在基本实现后,考虑继续使用JPA的Annotation配置来维护Entity Bean,使用后,虽然感觉比较冗余,不过也蛮不错的. 由于Annotation不熟,目前只能将@Id, @Column等配置写于getter方法上. 目前的实现也没有处理任何的容错,field都必须标注@Column. 东西蛮简单的, 莫见怪. 具体内容可以见项目代码, 项目基于Eclipse3.4,Spring2.5,Mysql. 项目rar的lib中已经包含了所依赖的所有jar包. 项目rar中也有基本的说明文字. 摘录基本代码: Entity Bean @Entity(name = "ONE") public class OneBean extends BaseBo { private BigDecimal id; @Id @Column(name = "ID") public BigDecimal getId() { return id; } // ... } CrudDao的使用 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); } // ... } Spring配置 <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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-05-10
iBatis-Ext: 一个iBatis + annotations 的框架,通过 annotations, 来简化你的开发
http://www.ibstaff.net/fmartinez/?p=48 使用步骤 1. 编写你的 POJO See the code here 2. 使用@DAO annotate 来编写DAO接口 3. 使用@SelectStatement, @UpdateStatement, ….来给接口增加方法 4. 编写sqlmap.xml 文件 5. 编写sqlMap config文件 6.其他的使用同IBatis 如果步骤5使用代码生成工具替换的话,那么还是一个不错的解决方案。 iBATIS 3.0将支持Annotation,看来,iBATIS也是逃不错Annotation的大趋势呀。 |
|
返回顶楼 | |
发表时间:2009-05-23
lggege 写道 iBATIS 3.0将支持Annotation,看来,iBATIS也是逃不错Annotation的大趋势呀。
同意,但是现在似乎一说支持 Annotation 就是得支持 JPA, 楼下的怎么看? |
|
返回顶楼 | |
发表时间:2010-02-20
先下载看看。。。
|
|
返回顶楼 | |
发表时间:2010-02-20
不是很喜欢使用侵入式的Annotation进行ORM。
|
|
返回顶楼 | |
发表时间:2010-02-20
这个 能支持多表吗? 有select例子吗? 看了你的Test 都只是插入的例子
|
|
返回顶楼 | |
发表时间:2010-02-20
我们也实现了一个类似的东东,不过有点罗嗦
http://code.google.com/p/simplejee/source/browse/#svn/trunk/simplejee/src/com/yuqiaotech/simplejee/miniorm 这个是一点说明 http://code.google.com/p/simplejee/source/browse/trunk/simplejee/document/miniorm.txt 这个是测试类,CRUD都有了 http://code.google.com/p/simplejee/source/browse/trunk/simplejee/test/com/yuqiaotech/simplejee/test/miniorm/TestSessionFactory.java |
|
返回顶楼 | |