Mybatis(二):框架构建

Mybatis:框架构建

一、安装、导入依赖

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

二、使用XML构建SqlSessionFactory

认识SqlSessionFactory

  • SqlSessionFactory是个单个数据库映射关系经过编译后的内存镜像

  • 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心

  • SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得

  • SqlSessionFactoryBuilder 可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例

  • SqlSessionFactory是线程安全的,一旦被创立,在整个执行过程中都存在,

  • 最好使用单例模式,不要多次创建

  • SqlSessionFactory是创建SqlSession的工厂

实例操作

//核心配置文件路径
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

  1. 认识SqlSession
    • SqlSession是持久化操作的对象,类似于JDBC的Connection
    • 他是持久层和应用程序执行交互操作的单线程对象
    • sqlSession完全包含以数据库为背景的所有Sql操作方法
    • SqlSession的实例不能被共享
    • 非线程安全
    • 使用完要关闭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,就不再需要它了(局部方法变量)
posted @ 2020-02-19 13:22  梦想与爱  阅读(170)  评论(0编辑  收藏  举报