MyBatis配置文件详解

mybatis配置文件主要作用

  • 注册db.properties属性文件,以便使用
  • 注册实体类(JavaBean)的全限定性类名的别名
  • 配置MyBatis运行环境,即数据源与事务管理器
  • 注册映射文件mapper

基本上mybatis的配置文件主要作用是上面的这些内容。

1.注册db.properties属性文件
我们在mybatis.xml文件中添加了下面配置:

<properties resource="db.properties"/>

这个配置的作用就是注册db.properties属性文件,这样子就可以获取里面的数据库信息了。

2.注册实体类(JavaBean)的全限定性类名的别名
因为在写mapper配置文件的时候,需要写上一些javabean类的全限定名,这样子就不太方便,此时就可以使用typeAliases标签设置该javabean类的别名,这样子就不用再写包名了,减少冗余。

<typeAliases>
    <typeAlias type="com.monkey1024.bean.Student" alias="student"/>
</typeAliases>

这样子,在mapper配置文件中就可以直接使用student来代替之前的com.monkey1024.bean.Student。

上面的是第一种方式,倘若有个多个javabean的话,需要写多个typeAlias,此时我们可以使用package指定一个包名,mybatis会在这个包名下搜索需要的JavaBean。

<typeAliases>
    <package name="com.monkey1024.bean"/>
</typeAliases>

默认情况下,会将com.monkey1024.bean包下的类名首字母小写作为别名,例如:com.monkey1024.bean.Student的别名就是student。
我们还可以在Student类上使用@Alias注解来手动给他取一个别名:

@Alias("stu")
public class Student {

    private int id;

    private String name;

    private int age;

    private double score;
}

mybatis已经为一些常见的类内建了别名:

别名   映射的类型
_byte   byte
_long   long
_short  short
_int    int
_integer    int
_double double
_float  float
_boolean    boolean
string  String
byte    Byte
long    Long
short   Short
int Integer
integer Integer
double  Double
float   Float
boolean Boolean
date    Date
decimal BigDecimal
bigdecimal  BigDecimal
object  Object
map Map
hashmap HashMap
list    List
arraylist   ArrayList
collection  Collection
iterator    Iterator

3.配置MyBatis的运行环境

  • 运行环境的切换
    一个稍具规模的项目在开发的时候都会有多个环境,即多个数据库,在开发阶段连接数据库A(或者是本地的数据库),集成测试阶段使用数据库B,项目上线后使用数据库C,此时在mybatis中配置选择哪个数据库。





    <!--生产环境-->
    <environment id="online">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.online.driver}"/>
            <property name="url" value="${jdbc.online.url}"/>
            <property name="username" value="${jdbc.online.user}"/>
            <property name="password" value="${jdbc.online.password}"/>
        </dataSource>
    </environment>
    

在environments标签中有两个environment子标签表示了两个数据库,此时可以在environments中使用default属性来指定使用哪一个数据库,这样子,在切换环境的时候,只需要修改default的属性即可。

  • transactionManager标签
    该标签用于指定MyBatis所使用的事务管理器。 MyBatis 支持两种事务管理器类型:

    • JDBC
      该事务器就是我们之前通过Connection的commit()方法提交,通过rollback()方法回滚,默认是需要手动提交的。

    • MANAGED
      由容器来管理事务的整个事务的生命周期,默认情况下会关闭连接,将来学习spring框架之后,就不用在配置事务管理器了,spring会使用自带的管理器。

  • dataSource标签
    该项主要用于配置数据源和数据库连接基本属性,有以下三种内建的数据源类型:

    • UNPOOLED
      该配置表示不使用连接池,每次请求都会创建一个数据库连接,使用完毕后再关闭。当项目对数据库性能要求不大的时候,可以使用该配置。
    • POOLED
      改配置表示使用mybatis自带的数据库连接池,可以在dataSource下的property属性中设置数据库连接池的基本信息,该部分可以在mybatis的官网中看到。
    • JNDI
      配置外部数据源

4.mapper映射器
映射器的作用就是在告诉mybatis.xml配置文件我们编写的mapper所在的路径,一共有四种写法:

第一种:

<mappers>
    <!--使用相对于类路径的资源引用-->
    <mapper resource="com/monkey1024/dao/StudentMapper.xml"/>
</mappers>

第二种:

<mappers>
    <!--使用完全限定资源定位符(URL)-->
    <mapper url="F:///monkey1024/StudentMapper.xml"/>
</mappers>

第三种:
该方式的使用,需要满足以下几个要求:
(1)映射文件名要与 Dao 接口名称相同
(2)映射文件要与接口在同一包中
(3)映射文件中的 namespace 属性值为 Dao 接口的全类名

<mappers>
    <!--使用映射器接口实现类的完全限定类名-->
    <mapper class="com.monkey1024.dao.StudentDao"/>
</mappers>

第四种:
这种方式的使用需要满足以下几个条件:
(1)dao 使用 mapper 动态代理实现(后面再将)
(2)映射文件名要与 Dao 接口名称相同
(3)映射文件要与接口在同一包中
(4)映射文件中的 namespace 属性值为 Dao 接口的全类名

<mappers>
    <!--将包内的映射器接口实现全部注册为映射器-->
    <package name="com.monkey1024.dao"/>
</mappers>