每一个MyBatis 的应 用程序 都以一 个 SqlSessionFactory 对象的 实例为 核心。SqlSessionFactory 对 象 的 实 例 可 以 通 过 SqlSessionFactoryBuilder 对 象 来 获 得 。
SqlSessionFactoryBuilder 对象可以通过 XML 配置文件,或从以往使用惯例中准备好的Configuration 类实例中来构建 SqlSessionFactory 对象。
从XML 中构建 SqlSessionFactory:
从XML 文件中构建 SqlSessionFactory 的实例非常简单。这里建议你使用类路径下的资源文件来配置,但是你可以使用任意的 Reader 实例,这个实例包括由文字形式的文件路径
或 URL 形式的文件路径 file://来创建。MyBatis 包含了一些工具类,称作为资源,这些工具类包含一些方法,这些方法使得从类路径或其它位置加载资源文件更加简单。
String resource = "org/mybatis/example/Configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);
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="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
当然,在XML配置文件中还有很多可以配置的,上面的示例指出的则是最关键的部分。
要注意 XML 头部的声明,需要用来验证 XML 文档正确性。environment 元素体中包含对事务管理和连接池的环境配置。
mappers 元素是包含所有 mapper (映射器)的列表,这些 mapper的 XML 文件包含 SQL 代码和映射定义信息。
不使用 XML 构建 SqlSessionFactory:
如果你喜欢从 Java 程序而不是 XML 文件中直接创建配置实例,或创建你自己的配置构建器,MyBatis 也提供完整的配置类,提供所有从 XML 文件中加载配置信息的选项。
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment =new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(configuration);
从 SqlSessionFactory 中获取 SqlSession:
我们已经知道如何获取 SqlSessionFactory 对象了,基于同样的启示,我们就可以获得 SqlSession 的实例了。SqlSession 对象完全包含以数据库为背景的所有执行 SQL 操作
的方法。你可以用 SqlSession 实例来直接执行已映射的 SQL 语句。
SqlSession session = sqlMapper.openSession();
try {
Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
} finally {
session.close();
}
这种方法起到的作用,和我们使用之前的 MyBatis 版本是相似的,现在有一种更简洁的方法。使用合理描述参数和 SQL 语句返回值的接口(比如 BlogMapper.class),这样现
在就可以执行更简单,更安全的代码,没有容易发生的字符串文字和转换的错误。
例如:
SqlSession session = sqlSessionFactory.openSession();
try {
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
} finally {
session.close();
}
上面提到的任何一个示例,语句是通过 XML 或注解定义的。我们先来看看 XML。使用基于 XML 的映射语言,在过去的几年中使得 MyBatis 非常流行,它为 MyBatis 提供所有
的特性设置。如果你以前用过 MyBatis,这个概念就应该很熟悉了,但是 XML 映射文件也有很多的改进,这里给出一个基于 XML 映射语句的示例,这些语句应该可以满足上述
示例中 SqlSession 对象的调用。
<?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="org.mybatis.example.BlogMapper">
<select id="selectBlog" parameterType="int" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
在命名空间“com.mybatis.example.BlogMapper”中,它定义了一个名为“selectBlog”的映射语句,这样它允许你使用完全限名“org.mybatis.example.BlogMapper.selectBlog”来
调用映射语句。
Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
这个命名可以直接映射相同命名空间下的映射器类,使用一个名称,参数和返回值和已映射的查询语句都一样的方法即可。这就允许你非常容易地调用映射器接口中的方法。
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
第二种方式有很多的优点,首先它不是基于文字的,那就更安全了。
第二,如果你的IDE 有代码补全功能,那么你可以利用它来操纵已映射的 SQL 语句。
第三,不需要强制类型转换,同时 BlogMapper 接口可以保持简洁,返回值类型很安全(参数类型也很安全)。