1、概念:MyBatis是一个优秀的持久层框架,支持普通SQL查询,存储过程和高级映射,使用MyBatis可以消除几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单XML或者注解进行配置和映射,将接口和POJOs映射成数据库中的记录。
2、使用入门:每个MyBatis的应用程序都是以一个SqlSessionFactory的实例作为核心。SqlSessionFactoryBuilder对象从XML配置文件或者从Configuration类的实例中构建SqlSessionFactory实例,然后通过SqlSessionFactory实例获得SqlSession对象,SqlSession对象完全包含以数据库为背景的所有执行Sql操作的方法。
2.1 构建SqlSessionFactory实例
2.1.1 通过XML配置文件构建SqlSessionFactory实例
String resource = "org/mybatis/example/Configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);
XML配置文件包含对MyBatis系统的核心设置,包含获取数据库连接实例的数据源和决定事务范围和控制的事务管理器。XML实例:
<?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>
2.1.2 从Configuration类中创建SqlSessionFactory
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);
2.2 从SqlSessionFactory中获取SqlSession,用SqlSession实例来直接执行已映射的SQL语句
SqlSession session = sqlMapper.openSession();
try {
Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
} finally {
session.close();
}
Mapper XML实例:
<?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”来调用映射语句。
3、范围和生命周期
3.1 SqlSessionFactoryBuilder
一旦创建了SqlSessionFactory后,这个类就不需要存在了。因此SqlSessionFactoryBuilder实例的最佳范围是方法范围(也就是本地方法变量)。
3.2 SqlSessionFactory
一旦被创建,SqlSessionFactory应该在整个应用执行期间都存在。使用SqlSessionFactory的最佳实践是在应用运行期间不要重复创建多次。因此实例的最佳范围是应用范围。通过使用单例模式或者静态单例模式,或者使用Spring等框架的依赖注入。
3.3 SqlSession
SqlSession是线程不安全的。最佳范围是方法范围。关闭SqlSession非常重要,应该确保使用final块来关闭它。
3.4 Mapper
Mapper是创建绑定映射语句的接口,最佳范围是方法范围,不需要明确的关闭。
浙公网安备 33010602011771号