描述
- 持久性框架,支持自定义SQL、存储过程和高级映射
- 消除了几乎所有的JDBC代码以及参数的手动设置和结果检索
- 可以使用简单的XML或注解进行配置,并将图元、映射接口和Java POJO映射到数据库记录
流程图
原理
- (1)应用程序通过
SqlSessionFactoryBuilder
从mybatis的配置文件中构建出SqlSessionFactory
<!-- mybatis-config.xml文件 -->
<configuration>
<!--使用properties来引入外部properties配置文件的内容 -->
<properties resource="dbconfig.properties"> </properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 将sql映射文件注册到全局配置文件(mybatis-config.xml)中 -->
<mappers>
<mapper resource="xxxMapper" />
</mappers>
</configuration>
//从XML构建SqlSessionFactory
String resource = "xxx/xxx/mybatis-config.xml";
InputStream inputStream = resources.getResourceAsStream(resource);
SqlsSessionFactory sqlsSessionFactory = new SqlsSessionFactoryBuilder().build(inputStream);
- (2)
SqlSessionFactory
开启一个SqlSession
,通过SqlSession
实例获得Mapper
对象并执行Mapper
映射的SQL语句,完成对数据库的CRUD和事务的提交 - 注:sqlSession 是单线程对象,线程不安全,是持久化操作的独享对象,类似jdbc中的Connection,底层封装了jdbc的连接
<!-- xxxMapper文件-->
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
try (SqlSession session = sqlSessionFactory.openSession()) {
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
}
- (3)关闭SqlSession,顺序与开启相反。
JDBC–>MyBatis 优化
(1)灵活
- sql语句写在xml文件里,便于统一管理和优化
(2)sql与程序代码解耦
- 通过提供DAO层,将业务逻辑与数据访问逻辑分离,便于维护
(3)使用数据库连接池对连接进行管理
- 统一从DataSource里面获取数据库连接,节约资源,加快连接
(4)提供xml标签,支持动态sql
(5)对数据库操作结果的映射和结果缓存