MyBatis使用心得(一)--- 简单介绍

 Mybatis的前身是iBatis,iBatis原本就是apache的一个开源项目,2010年该项目有apache迁移到了google code,并改名为MyBatis。

1. 简介
    MyBatis支持普通SQL查询,存储过程和高级映射的优秀持久层框架,消除了几乎所有的JDBC代码和参数的手动设置以及结果集的检索。MyBatis可以使用XML或者注解用于配置和映射,将接口和JavaBean映射成数据库的记录。
    每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来获得,SqlSessionFactoryBuilder对象可以从XML配置文件或从Configuration类获得。例如:

String resource = "com/alvinliang/mybatis/mybatis-config.xml";
InputStream is= Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

    XML配置文件包含了对MyBatis系统的核心设置,有获取数据库连接实例的数据源和决定事务范围和控制事务管理器。详细内容后面会讲,这里给出一个简单示例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/alvinliang/mybatis/BlogMapper.xml"/>
  </mappers>
</configuration>

还有很多可以配置,上面指出了最关键的部分。environment元素体里包含对事务管理和连接池的环境配置。mapppers元素包含了所有mapper映射器,这些mapper的xml文件包含了SQL代码和映射定义信息。

2. 总体流程
(1) 加载配置并初始化
  触发条件:加载配置文件,将SQL配置文件加载成一个个MappedStatement对象。
(2) 接受调用请求
  触发条件:调用MyBatis提供的API
  传入参数:为SQL的ID和传入参数对象
  处理过程:将请求传递给下层的请求的处理层进行处理。
(3) 处理操作请求
  触发条件:API接口层传递请求过来
  传入参数:为SQL的ID和传入参数对象
  处理过程:
    (A)根据SQL的ID查找对应的MappedStatement对象。
    (B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
    (C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。
    (D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。
    (E)释放连接资源。
(4)返回处理结果将最终的处理结果返回。

3. 功能框架
  Mybatis可以分为三层:
(1) API接口层:提供给外部使用的接口API,开发人员可以通过本地API来操纵数据库。
(2) 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。
(3) 基础支持层:负责最基本的功能支撑,包括连接管理、事务管理、配置加载和缓存处理等。

4. 简单使用
先从SqlSessionFactory对象来获得SqlSession的实例,SqlSession对象包含了对数据库的所有执行SQL操作的方法。例如:

SqlSession session = sqlSessionFactory.openSession();
try {
  Blog blog = (Blog) session.selectOne("com.alvinliang.mybatis.BlogMapper.selectBlog", 1);
} finally {
  session.close();
}

下面给出映射的SQL语句:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.alvinliang.mybatis.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

这里只是给出了一个简洁的例子,其中在命名空间“com.alvinliang.mybatis.BlogMapper”中定义了一个名为“selectBlog”的映射语句,这样它允许你使用完全限定名“com.alvinliang.mybatis.BlogMapper.selectBlog”来调用映射语句。
注意:现在命名空间是必须的,而且命名空间使得接口绑定成为可能,使用命名空间并将它放在合适的Java包空间下,将会使你的代码变得简洁,会在很长的时间内提高MyBatis的作用。

5. 范围和生命周期
SqlSessionFactoryBuilder
这个类可以被实例化,使用和丢弃。一旦你创建了SqlSessionFactory后,这个类就不需要了。因此SqlSessionFactoryBuilder实例的最佳范围就是方法范围(也就是本地方法变量)。你可以重用SqlSessionFactoryBuilder来创建多个SqlSessionFactory实例。

SqlSessionFactory
一旦被创建,SqlSessionFactory应该在你的应用执行期间都存在,没有理来处理或者重新创建它。使用SqlSessionFactory的最佳实践是在应用运行期间不要重复创建多次。因此SqlSessionFactory的生命周期是Application范围。很多方法可以做到,如单例模式或者静态单例模式。

SqlSession
每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能被共享,也是线程不安全的。因此最佳范围应该是request或者method范围。绝对不能将SqlSession实例的引用放在一个类的静态字段甚至是实例字段中。也绝对不能将SqlSession实例引用放在任何类型的管理范围中,比如Servlet中的HttpSession。如果你正在使用Web框架,可以考虑将SqlSession放在一个和Http Request对象相似的范围内。下面的示例就是一个确保SqlSession关闭的基本模式:

SqlSession session = sqlSessionFactory.openSession();
try {
  // do work
} finally {
  session.close();
}
在你的代码中一贯的使用这种模式,将会保证所有的数据库资源都正常的关闭。

转载于:https://my.oschina.net/liangbo/blog/224891

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值