ibatis

转载 http://blog.csdn.net/chen861201/article/details/7614201

这段时间闲来无事重新研究下SSH和SSI的模型,以前写过一篇关于Hibernate对JDBC的封装的文章,这不就再来写一篇Ibatis的。

相对于Hibernate的一站式ORM解决方案而言,Ibatis则是一种半自动化的ORM的实现方案了,怎么说呢,大家看Hibernate是对数据库结构提供了较为完整的封装,提供了POJO到数据库表的全套映射机制,我们要做的就是配置好配置文件和POJO以及他们之间的映射关系即可,即便是你不懂SQL语句,也能进行开发使用。可是往往这种情况下就稍微的有点儿局限性,对于有些需求来说不容易满足,并且不利于sql的优化等。这时我们就更多的考虑到了轻量级的Ibatis这种半自动的实现形式了。要知道Ibatis的优点在于,它仅仅实现的是POJO与sql之间的映射关系,具体的sql语句需要我们自己来写才行。然后通过Ibatis的配置文件将sql所需的参数,以及返回的结果字段映射到指定的POJO。从而达到ORM效果.下面让我们来一一介绍Ibatis的配置文件以及核心函数:

1.Ibatis的实例配置文件及jdbc的配置:

[html] view plain copy

  1. <sqlMapConfig>
  2. <properties resource="SqlMap.properties"/>这里是jdbc的配置文件
  3. <transactionManager type="JDBC">
  4. <dataSource type="SIMPLE">
  5. <property value="${driver}" name="JDBC.Driver"/>
  6. <property value="${url}" name="JDBC.ConnectionURL"/>
  7. <property value="${username}" name="JDBC.Username"/>
  8. <property value="${password}" name="JDBC.Password"/>
  9. </dataSource>
  10. </transactionManager>
  11. <sqlMap resource="ncut/com/map/Student.xml"/>这里是POJO与sql语句的映射文件
  12. </sqlMapConfig>

2.POJO的基础类文件:

[html] view plain copy

  1. public class Student {
  2. private int id;
  3. private String username;
  4. private String password;
  5. private int age;
  6. /**
  7. * @return the id
  8. */
  9. public int getId() {
  10. return id;
  11. }
  12. /**
  13. * @param id the id to set
  14. */
  15. public void setId(int id) {
  16. this.id = id;
  17. }

3.sql的映射文件:

[html] view plain copy

  1. <sqlMap>
  2. <typeAlias alias="Student" type="ncut.com.bean.Student"/><!-- 其实就是将bean的替换成一个短的名字 -->
  3. <select id="selectAllStudent" resultClass="Student">
  4. select * from student1
  5. </select>
  6. <!-- parameterClass  和 parameterMap都是参数类型
  7. resultClass resultMap都是返回值类型  -->
  8. <select id="selectStudentById" parameterClass="int" resultClass="Student">
  9. select * from student1
  10. where id=#id#
  11. </select>
  12. <insert id="addStudent" parameterClass="Student">
  13. insert student1(id,username,password,age)
  14. values  (#id#,#username#,#password#,#age#)
  15. </insert>
  16. </sqlMap>

4.SqlMapClient是Ibatis运作的核心,所有的数据库操作都是通过SqlMapClient实例来完成的。

XmlSqlMapClientBuilder是ibatis的组件,是用来根据配置文件创建SqlMapClient实例的:

[html] view plain copy

  1. private static SqlMapClient sqlMapClient;
  2. static{
  3. try {
  4. Reader reader=com.ibatis.common.resources.Resources.getResourceAsReader("SqlMapConfig.xml");
  5. sqlMapClient=com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(reader);
  6. reader.close();
  7. } catch (IOException e) {
  8. // TODO Auto-generated catch block
  9. e.printStackTrace();
  10. }
  11. }

然后就可以直接调用SqlMapClient中的方法,进行数据库的CRUD了。 其中还有很多的细节,值得自己去慢慢研究。

时间: 2024-11-10 07:56:52

ibatis的相关文章

通过maven test 报org.apache.ibatis.binding.BindingException: Invalid bound statement

背景 直接使用eclipse工具去执行,没有问题,通过testng.xml去执行,没有问题,但通过mvn clean test执行,就报错,提示org.apache.ibatis.binding.BindingException: Invalid bound statement 解决方法 首先先肯定的是:mybatis的配置是没有问题,因为eclipse可以正常执行: 在eclipse中把mapper的xml文件放到src代码目录下是可以一起打包进classes的,而maven去编译的时候不会,

hibernate和ibatis对比

Hibernate是当前最流行的O/R mapping框架,iBATIS是另外一种优秀的O/R mapping框架. Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO和数据库表之间的映射,以及SQL的自动生成和执行.程序员往往只需定义好了POJO到数据库表的映射关系,即可通过Hibernate提供的方法完成持久层操作.Hibernate/OJB会根据制定的存储逻辑,自动生成对应的SQL并调用JDBC接口加以执行. 而iBATIS的着力点

iBatis系列之三

iBatis和Hibernate最大差别就是在于iBatis没有严格的和具体的表做关联:而是将结果集和DAO做关联. iBatis的SqlConfig.xml配置一个properties文件,其实可以完全在SqlConfig中配置相应的数据库信息,但是有了一个properties文件之后有一个好处:如果是从生产环境切换到测试环境,只需要修改一处"properties"节点即可. DAO模式就是通过生命一个DAO的接口形式来隐藏数据库层具体的实现:DAO模式提供的规则(接口的方法以及方法

spring2.5整合ibatis

SqlMapClient对象 这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作.这个类是我们使用iBATIS的最主要的类. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/s

Mybatis与Ibatis区别

相信很多关键词在运用ibatis2.x的兄弟并没有通过ibatis的xml映射文件来完成目标间的联系映射.本来也的确没有必要那么做,由于ibatis2.x采用的是"嵌套查询"的方法将目标之间的联系通过查询句子的直接拼装来完成,其作用和在DAO或Service中自行封装是相同的. 不过这种方法存在"N+1查询疑问". 概括地讲,N+1查询疑问可所以这样导致的: ? 你执行了一个独自的SQL句子来获取成果列表(即是+1). ? 对回来的每条记录,你执行了一个查询句子来为

Mybatis缓存报错org.apache.ibatis.exceptions.PersistenceException

错误信息如下: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.apache.ibatis.cache.CacheException: Error deserializing object. Cause: java.lang.ClassNotFoundException: com.kytsoft.model.Adminlink ### Cause: org.apa

ibatis中使用缓存

简单在ibatis中使用cache 首先设置SqlMapConfig.xml中<settings/>节点的属性cacheModelsEnabled="true"    然后在具体sqlmap文件中书写<cacheModel>    <cacheModel id="product-cache" type="LRU">       <flushInterval hours="24"/>

MyBatis3.4.0以上的分页插件错误:Could not find method on interface org.apache.ibatis.executor.statement.StatementHandler named prepare. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.executor.stateme

错误: Could not find method on interface org.apache.ibatis.executor.statement.StatementHandler named prepare. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.executor.statement.StatementHandler.prepare(java.sql.Connection)] with root cause 问题

spring+ibatis环境搭建

简单的spring+ibatis入门实例:ibatis是一种半自动化的持久层框架,它介于JDBC和hibernate之间,使用比较灵活. 一:目录结构 二:需要导入的jar包: 所有的第三方jar包都需要加上,spring.jar.ibatis.-2.3.3.720.jar.sqlijdbc.jar.oscache-2.4.jar.commons-pool-1.3.jar.commons-dbcp-1.4.jar,mysql-connector-5.0.5.jar.不然运行的时候都要报错,这里需

Mybatis/Ibatis,数据库操作的返回值

该问题,我百度了下,根本没发现什么有价值的文章:还是看源代码(详见最后附录)中的注释,最有效了!insert,返回值是:新插入行的主键(primary key):需要包含<selectKey>语句,才会返回主键,否则返回值为null.update/delete,返回值是:更新或删除的行数:无需指明resultClass:但如果有约束异常而删除失败,只能去捕捉异常.queryForObject,返回的是:一个实例对象或null:需要包含<select>语句,并且指明resultMap