1. public interface EmployeeMapperPlus {
  2. Employee getEmpById(Integer id);
  3. Employee getEmpAndDept(Integer id);
  4. Employee getEmpByIdStep(Integer id);
  5. }

全局配置文件

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。

(注意)配置文件中的标签顺序是有要求的,先后顺序不能乱!
properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,objectWrapperFactory?, plugins?, environments?, databaseIdProvider?, mappers?

配置文档的顶层结构如下:
image.png

先建立一个子模块:
image.png

properties 标签

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=12345678
<!--
mybatis可以使用properties来引入外部properties配置文件的内容
  resource:引入类路径下的资源
  url:引入网络路径或者磁盘路径下的资源
-->
<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>

settings 标签

<!--设置项,比如驼峰命名映射-->
<settings>
  <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

typeAliases 标签与@Alias注解

<typeAliases>
    <!--
    1、typeAlias:为某个java类型起别名
    type:指定要起别名的类型全类名;默认别名就是类名小写;employee
    alias:指定新的别名
    -->
<!-- <typeAlias type="com.atguigu.mybatis.bean.Employee" alias="emp"/>-->

    <!--
    2、package:为某个包下的所有类批量起别名
    name:指定包名(为当前包以及下面所有的后代包的每一个类都起一个默认别名(类名小写))
    -->
    <package name="com.atguigu.mybatis.bean"/>

    <!-- 3、批量起别名的情况下,在类的上面使用@Alias注解为某个类指定新的别名 -->
</typeAliases>

下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。
image.png
image.png

environments 标签

environments:环境们,mybatis 可以配置多种环境 ,default指定使用某种环境。可以达到快速切换环境。
environment:配置一个具体的环境信息;必须有两个标签;id 代表当前环境的唯一标识。
transactionManager:事务管理器,type:事务管理器的类型:

  • JDBC(JdbcTransactionFactory)
  • MANAGED(ManagedTransactionFactory)
  • 自定义事务管理器:实现TransactionFactory接口.type指定为全类名

dataSource:数据源,type:数据源类型:

  • UNPOOLED(UnpooledDataSourceFactory)
  • POOLED(PooledDataSourceFactory)
  • JNDI(JndiDataSourceFactory)
  • 自定义数据源:实现DataSourceFactory接口,type是全类名
    <environments default="dev_mysql">
    <environment id="dev_mysql">
      <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>
    <environment id="dev_oracle">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${orcl.driver}"/>
        <property name="url" value="${orcl.url}"/>
        <property name="username" value="${orcl.username}"/>
        <property name="password" value="${orcl.password}"/>
      </dataSource>
    </environment>
    </environments>
    

databaseIdProvider 标签

databaseIdProvider:支持多数据库厂商的
type="DB_VENDOR" 代表 VendorDatabaseIdProvider,作用就是得到数据库厂商的标识(驱动getDatabaseProductName()),MyBatis 就能根据数据库厂商标识来执行不同的 sql,比如:MySQL,Oracle,SQL Server等等。

<databaseIdProvider type="DB_VENDOR">
    <!-- 为不同的数据库厂商起别名 -->
    <property name="MySQL" value="mysql"/>
    <property name="Oracle" value="oracle"/>
    <property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>

使用的时候,在mapper.xml文件中,databaseId 属性指明即可:

<mapper namespace="com.atguigu.mybatis.mapper.EmployeeMapper">
    <select id="getEmpById" resultType="emp" databaseId="mysql">
        select * from tbl_employee where id = #{id}
    </select>
</mapper>

mappers 标签

我们写好的sql映射文件(xxxMapper.xml)一定要注册到全局配置文件中才能起作用。
mapper:注册一个 sql 映射

  • 注册配置文件
    • resource:引用类路径下的 sql 映射文件,没有要求必须与接口放在一起。
    • url:引用网路路径或者磁盘路径下的sql映射文件。
  • 注册接口
    • class:引用(注册)接口。
      • 如果有 sql 映射文件,则映射文件名必须和接口同名,并且放在与接口同一目录下。
      • 如果没有 sql 映射文件,所有的 sql 都是利用注解写在接口上的。

推荐: 比较重要的复杂的Dao接口我们来写sql映射文件,不重要的简单的Dao接口为了开发快速可以使用注解。

<mappers>
    <mapper resource="com/atguigu/mybatis/mapper/EmployeeMapper.xml"/>
    <mapper class="com.atguigu.mybatis.mapper.EmployeeMapperAnnotation"/>

    <!-- 批量注册:要求sql映射文件和接口在同一目录下-->
    <package name="com.atguigu.mybatis.mapper"/>
</mappers>
//不需要配置EmployeeMapperAnnotation.xml文件
//如果不使用注解,就必须要配置xml文件,且放在同一个目录下
public interface EmployeeMapperAnnotation {
    @Select("select * from tbl_employee where id=#{id}")
    Employee getEmpById(Integer id);
}