IBatis 后改名为MyBatis,官方网站 http://www.mybatis.org/
官方给出了详细的中文示例文档,比较容易上手.
数据库操作之前接触过JDBC,apache common dbutils,Hibernate.
JDBC最基础的,然后dbutils对JDBC做了些封装,Hibernate 中关系映射已经可以脱离SQL使用HQL操作了.MyBatis则处于dbutils和Hibernate之间,相对dbutils封装的更完整,相对于Hibernate则更灵活.
参考:http://yancc.iteye.com/blog/983815
与Hibernate 的区别在于,它的Transaction是默认开启的,也就是必需在修改结束后使用commit或rollback(默认).
对于查询操作,支持注解和XML形式,感觉xml的支持要更好一些.
最后对http://yancc.iteye.com/blog/983815作一些补充
1 XML中添加属性文件.
<configuration> <!-- 读取属性文件 --> <properties resource="config.properties" /> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <!-- 以${key}形式使用属性文件的值 --> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </transactionManager> </environment> </environments> </configuration>
2 查询,插入,修改,删除 操作参数存在2种情况
2.1 只有1个参数.此时示例中已经展示了.
2.2 多个参数.这时支持Map<key,value>形式,也可以使用JavaBean形式.示例:
SqlSession session = baseDao.getSession(); UserBOMapper userBOMapper = session.getMapper(UserBOMapper.class); UserBO userBO = new UserBO(0, "good kic"); int result = userBOMapper.insertUserBO(userBO); session.commit();
BaseDao baseDao = new BaseDao();//这里BaseDao是一个简单的操作类,用execute代替insert,update,delete Map<String, Object> map = new HashMap<String, Object>(); map.put("userName", "test"); int count = baseDao.execute("bo.userBO.insertUser", map); assertEquals(1, count); map.put("userID", 0); count = baseDao.execute("bo.userBO.deleteUser", map);//这里需注意,添加时因为设置primary key自动生成,删除时userID不能不存在 System.out.println(count); assertEquals(1, count); //Error updating database. Cause: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 1 UserBO userBO = new UserBO(0, "haha");//这里不可以使用1因为已使用,同时为primary key count = baseDao.execute("bo.userBO.insertUser", userBO); assertEquals(1, count); count = baseDao.execute("bo.userBO.deleteUser", userBO); assertEquals(1, count);
Map的使用类似.
关于返回值也可以设置为JavaBean或int,String等(如果有多相查询结果,则仅返回第一个值).
3条件查询中where条件设置
<select id="selectUser2" resultType="int"> select userID from t_user <where> <if test="userID != 0"> and userID = #{userID} </if> <if test="userName != null"> and userName = #{userName} </if> </where> </select>
这里使用OGNL方式,具体参考附件里的中文说明.注解里如何设置没搞明白,说明文档上说因为java注解的限制,它的优势在C#上才会显现,这也是支持XML的一个重要原因
4最后个人猜想,源代码里大量用到了反射,而Hibernate里面是通过xml配制的,从这个角度来说,MyBatis的性能应该在Hibernate之下.MyBatis相对简单,操作方便.Hibernate复杂,但是很优秀,如果有信心可以选Hibernate,然后可以考虑MyBatis,而SQL操作较少的可以考虑dbutils或直接JDBC.