Mybatis(二):框架构建

一、安装、导入依赖

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>

二、使用XML构建SqlSessionFactory

认识SqlSessionFactory

  • 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心
  • SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得
  • SqlSessionFactoryBuilder 可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例

实例操作

//核心配置文件路径
String resource = "mybatis-config.xml"; 
//加载资源文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//构建出SqlSessionFactory实例
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  • MyBatis 包含一个名叫 Resources 的工具类,可使从 classpath 或其他位置加载资源文件更加容易。
  • 也可以使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置

Mybatis核心配置

  1. 核心配置文件中,包含数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)
  2. environment 元素体中包含了事务管理和连接池的配置。mappers 元素包含一组映射器(mapper),这些映射器的 XML 映射文件包含了 SQL 代码和映射定义信息。

三、从 SqlSessionFactory 中获取 SqlSession

try (SqlSession session = sqlSessionFactory.openSession()) {
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  Blog blog = mapper.selectBlog(101); //执行selectBlog方法
}

事实上,为了方便,通常我们会创建一个utils工具类进行封装操作,

public class CustomerUtils {
    private static SqlSessionFactory sessionFactory;
    static {
        String resource = "mybatis-config.xml";
        try {
            InputStream resourceAsStream = Resources.getResourceAsStream(resource);
            sessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static SqlSession getsession() {
        return sessionFactory.openSession();
    }

}

这样,我们就可以通过工具类直接调用方法,是不是很方便呢?

四、Sql语句的映射

<mapper namespace="org.mybatis.example.BlogMapper"> //所映射的接口
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>
BlogMapper mapper = session.getMapper(BlogMapper.class); 
Blog blog = mapper.selectBlog(101);

五、Sql语句注解映射

public interface BlogMapper {
  @Select("SELECT * FROM blog WHERE id = #{id}")
  Blog selectBlog(int id);
}

说明:

  1. 命名空间的作用:
    • 利用更长的完全限定名来将不同的语句隔离开
    • 实现了接口绑定
  2. SqlSessionFactoryBuilder:
    • 这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了(局部方法变量)
  3. SqlSessionFactory
    • 一旦被创建就应该在应用的运行期间一直存在
  4. SqlSession
    • SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域

猜你喜欢

转载自www.cnblogs.com/dreamzone/p/12330895.html
今日推荐