【Mybatis专题】(2)入门
精简篇幅,用于知识点回顾。内容基本来源于 Mybatis中文简介,详情参考请链接。
安装
要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。也可以使用 maven 引入相关依赖:https://mvnrepository.com/artifact/org.mybatis/mybatis
构建 SqlSessionFactory
SqlSessionFactoryBuilder 根据配置(Configuration)构建出 SqlSessionFactory 的实例。配置可以使用 xml 和 java。
xml配置构建 SqlSessionFactory
<?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">
<!--极简 mybatis 配置示例-->
<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="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
String resource = "org/mybatis/example/mybatis-config.xml";
//Resources 工具类,帮助加载资源文件。
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
java配置构建 SqlSessionFactory
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
//BlogMapper.xml 将会基于类路径和 BlogMapper.class 的类名被加载进来。
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
从上面的两种配置可以看出,构建SqlSessionFactory的步骤如下:
(1)定义一个包含事务管理(TransactionManager)和数据源(DataSource)的环境(Environment),进而生成配置(Configuration)。
(2)SqlSessionFactoryBuilder 根据配置(Configuration)构建出 SqlSessionFactory 的实例。
从 SqlSessionFactory 中获取 SqlSession
SqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
//旧版方法,没有使用Mapper接口
//Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
} finally {
session.close();
}
SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。
命名空间(namespace)使得你所见到的接口绑定成为可能,代码结构也更加整洁。
命名解析:
1. 完全限定名(比如“com.mypackage.MyMapper.selectAllThings”)将被直接查找并且找到即用。
2. 短名称(比如“selectAllThings”)如果全局唯一也可以作为一个单独的引用。
生命周期
依赖注入框架可以创建线程安全的、基于事务的 SqlSession 和映射器(mapper)并将它们直接注入到你的 bean 中,因此可以直接忽略它们的生命周期。
SqlSessionFactoryBuilder:(方法作用域)这个类用完即丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。
SqlSessionFactory:(应用作用域)一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。最简单的就是使用单例模式或者静态单例模式。
SqlSession:(方法作用域)每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的。
映射器实例(Mapper Instances)映射器接口的实例是从 SqlSession 中获得的。作用域同SqlSession即可。