Mybatis是什么
Mybatis是一个Java的持久层框架,数据持久层(DAO层)是在程序中直接对数据库进行持久化操作的部分。JDK自身提供了访问数据库的接口API——JDBC,Mybatis本质上是对JDBC的封装。JDBC在开发过程中过于面向底层,直接使用JDBC对数据库进行访问会导致许多操作变得繁琐且缺少安全性,而Mybatis在JDBC的基础上扩展了功能,避免了JDBC原有的许多参数设置和获取结果集上的繁琐,简化了程序对数据库的操作。
关于Mybatis的文档可以在官网中获取:https://mybatis.org/mybatis-3/zh/index.html 
在项目中加入Mybatis依赖
JAR包
直接将官网下载的JAR依赖包放在项目的CLASSPATH下即可
Maven
在Maven中加入如下依赖项
1 2 3 4 5
   | <dependency>   <groupId>org.mybatis</groupId>   <artifactId>mybatis</artifactId>   <version>x.x.x</version> </dependency>
   | 
 
要注意的是,Mybatis是基于JDBC的框架,除了在项目中加载Mybatis的依赖以外,还要根据数据库加载对应的SQL驱动依赖
1 2 3 4 5
   | <dependency>     <groupId>org.mariadb.jdbc</groupId>     <artifactId>mariadb-java-client</artifactId>     <version>3.1.2</version> </dependency>
   | 
 
这里根据自己使用的SQL数据源加载对应的驱动,然后在下面的XML配置好driver即可
核心类
SqlSessionFactory
Mybatis的SQL会话是通过工厂模式管理的,Mybatis提供了一个SqlSessionFactory的工厂类来获取SqlSession,且一个SqlSessionFactory往往对应一个SqlSession
1 2 3 4 5
   | public class SqlSessionFactory{   public SqlSession openSession();   public SqlSession openSession(boolean autoCommit);    }
  | 
 
1 2 3 4 5
   |  String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource);
  SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 
  | 
 
SqlSession
SqlSession是一个SQL会话,提供了Sql操作的相关方法,还有关于事务的相关操作
1 2 3 4 5 6
   | public class SqlSession{   T getMapper(Class<T> type);    void commit();                 void rollback();               void close();                }
  | 
 
XML构建
我们需要在CLASSPATH的Resource目录下如下创建mybatis-config.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
   |  <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"   "https://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>  
 
  | 
 
Properties
Properties标签可以引入其他的properties配置文件,并通过${}引入其中的字段,如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
   |  <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"   "https://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration>   <properties resource="jdbc.peroperties"></properties>   <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>     ... </configuration>  
 
  | 
 
此外,也可以手动地在标签内替换掉文件中的某些字段的值:
1 2 3
   | <properties resource="jdbc.peroperties">   <property name="username" value="root"> </properties>
   | 
 
Settings
Settings可以配置Mybatis的许多配置选项,详见官方文档 
1 2 3
   | <settings>   <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>
   | 
 
typeAlias
对于mapper配置文档,返回类型设置为全限定名较为繁琐,这时可以通过设置typeAlias为其设置别名
1 2 3
   | <typeAliases>   <typeAlias alias="Author" type="domain.blog.Author"/> </typeAliases>
   | 
 
此外,可以通过package子标签批量设置别名,规则默认设置为全限定名的最后一个类名
1 2 3
   | <typeAliases>   <package name="domain.blog"/> </typeAliases>
   | 
 
environments
Mybatis支持同时配置多个数据库环境,但一个SqlSessionFactory仅能对应一个环境
对于SqlSessionFactory,可以选择传入配置中对应环境的环境ID
1 2
   | SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);
   | 
 
其中environment参数若忽略则默认使用默认环境ID:default=”XXX”
1 2 3 4 5 6 7 8 9 10 11 12 13
   | <environments default="development">   <environment id="development">     <transactionManager type="JDBC">       <property name="..." value="..."/>     </transactionManager>     <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
mappers标签指示Mybatis去哪些路径搜索mapper配置文件,支持多种路径格式
1 2 3 4 5 6
   |  <mappers>   <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>   <mapper resource="org/mybatis/builder/BlogMapper.xml"/>   <mapper resource="org/mybatis/builder/PostMapper.xml"/> </mappers>
 
  | 
 
1 2 3 4 5 6
   |  <mappers>   <mapper url="file:///var/mappers/AuthorMapper.xml"/>   <mapper url="file:///var/mappers/BlogMapper.xml"/>   <mapper url="file:///var/mappers/PostMapper.xml"/> </mappers>
 
  | 
 
1 2 3 4 5 6
   |  <mappers>   <mapper class="org.mybatis.builder.AuthorMapper"/>   <mapper class="org.mybatis.builder.BlogMapper"/>   <mapper class="org.mybatis.builder.PostMapper"/> </mappers>
 
  | 
 
1 2 3 4
   |  <mappers>   <package name="org.mybatis.builder"/> </mappers>
 
  | 
 
当使用package子标签时,要求resource的路径结构和src的路径结构相同,这样才能将对应mapper配置文件和接口类放在同一路径下
代码模板
在IntelliJ IDEA中,我们可以在文件->设置->编辑器->文件和代码模板中创建一个配置文件的模板,这样就可以直接创建一个mybatis的配置文件预设
XML映射
1 2 3 4 5
   | 
  public interface BlogMapper{   List<Blog> selectBlog(); }
 
  | 
 
1 2 3 4 5 6 7 8 9 10 11
   |  <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.mybatis.example.BlogMapper">      <select id="selectBlog" resultType="Blog">               select * from Blog where id = #{id}                  </select>   ... </mapper>
 
  | 
 
要注意的是,这里从获取到的Blog的SQL结果集会自动和resultType中导入的结果类的各同名字段匹配,也就是说,SQL里获取到的一个数据库的int类型的ID字段会自动对应到Blog类里的int类型的ID字段变量。
在建立完映射后,即可通过
1 2 3 4 5 6
   |  try (SqlSession session = sqlSessionFactory.openSession()) {   BlogMapper mapper = session.getMapper(BlogMapper.class);   ...   Blog result=mapper.selectBlog(101); }
 
  | 
 
来获取一个Dao层接口的实现类(这里底层是通过动态代理来实现的),此时即可直接调用相应方法来获取结果集
Mybatis插件
提供了快速生成mapper映射文件和Mybatis语法补全的功能
在Dao接口上alt+enter即可调用mapper.xml生成器