什么是 MyBatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
Mybatis 的优点
- 简单小巧易于上手,方便浏览修改 SQL 语句
- 解除 SQL 与程序代码的耦合
- 提供映射标签,支持对象与数据库的 ORM 字段关系映射
- 提供 xml 标签,支持编写动态 SQL
安装
在 maven 项目中,导入以下
1 | <dependency> |
配置 SqlSessionFactory
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory
的实例为核心的。SqlSessionFactory
的实例可以通过 SqlSessionFactoryBuilder
获得。而 SqlSessionFactoryBuilder
则可以从 XML 配置文件或一个预先定制的 Configuration
的实例构建出 SqlSessionFactory
的实例。
1 | //引入mybatis-config.xml资源文件 |
mybatis-config.xml 文件包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)
简单实例:
1 |
|
要注意 XML 头部的声明,它用来验证 XML 文档正确性。environment 元素体中包含了事务管理和连接池的配置。mappers 元素则是包含一组映射器(mapper),这些映射器的 XML 映射文件包含了 SQL 代码和映射定义信息。
从 SqlSessionFactory 中获取 SqlSession
既然有了 SqlSessionFactory,顾名思义,我们就可以从中获得 SqlSession 的实例了。
1 | try (SqlSession session = sqlSessionFactory.openSession()) { |
这里到底是怎么执行的?
先看看上述 mybatis-config.xml 文件中包含的映射(mapper)文件:BlogMapper.xml
1 |
|
在命名空间 “org.mybatis.example.BlogMapper” 中定义了一个名为 “selectBlog” 的映射语句,允许你使用指定的完全限定名 “org.mybatis.example.BlogMapper.selectBlog” 来调用映射语句.这和使用完全限定名调用 Java 对象的方法类似。这样,该命名就可以直接映射到在命名空间中同名的 Mapper 类,并将已映射的 select 语句中的名字、参数和返回类型匹配成方法。 因此你就可以像上面那样很容易地调用这个对应 Mapper 接口的方法,就像下面这样:
1 | BlogMapper mapper = session.getMapper(BlogMapper.class); |
用注释来映射
对于像 BlogMapper 这样的映射器类来说,还有另一种方法来处理映射。 它们映射的语句可以不用 XML 来配置,而可以使用 Java 注解来配置。比如,上面的 XML 示例可被替换如下:
1 | package org.mybatis.example; |
使用注解来映射简单语句会使代码显得更加简洁,然而对于稍微复杂一点的语句,Java 注解就力不从心了,并且会显得更加混乱。 因此,如果你需要完成很复杂的事情,那么最好使用 XML 来映射语句。