欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MyBatis 全局配置文件详解

程序员文章站 2022-06-11 16:49:24
根元素,子元素: ......

根元素<configuration>,子元素:

  • <properties>
  • <setttings>
  • <typealiases>
  • <typehandlers>
  • <objectfactory>
  • <plugins>
  • <environments>
  • <databaseidprovider>
  • <mappers>

这些子元素的配置是有顺序的,只能按照上面的顺序配置。

可缺省部分子元素。

 

 


 

 

<properties>

用于将内部的配置外在化,在<properties>中引入外部配置即可。

 

比如数据库的连接信息,我们可以直接写在全局配置文件中:

<environments default="development">
        <environment id="development">
            <transactionmanager type="jdbc"></transactionmanager>
            <datasource type="pooled">
                <property name="driver" value="com.mysql.cj.jdbc.driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/my_db?servertimezone=gmt"/>
                <property name="username" value="chy"/>
                <property name="password" value="abcd"/>
            </datasource>
        </environment>
</environments>

考虑到更换数据库时,运维从一大堆代码不好找数据库的连接信息,我们可以把数据库的连接信息拿出来,单独写在一个配置文件中。

 

sql.properties:

mysql_driver=com.mysql.cj.jdbc.driver
mysql_url=jdbc:mysql://localhost:3306/my_db?servertimezone=gmt
mysql_username=chy
mysql_password=abcd
#oracle_driver=.....
#oracle_url=.....
#oracle_username=.....
#oracle_password=.....

 

mybatis-config.xml:

    <properties resource="sql.properties"></properties>

    <environments default="development">
        <environment id="development">
            <transactionmanager type="jdbc"></transactionmanager>
            <datasource type="pooled">
                <property name="driver" value="${mysql_driver}"/>
                <property name="url" value="${mysql_url}"/>
                <property name="username" value="${mysql_username}"/>
                <property name="password" value="${mysql_password}"/>
            </datasource>
        </environment>
    </environments>

 

 


 

 

<settings>

用于设置mybatis运行时的参数。常用的项有:

  • cacheenabled:是否使用缓存,boolean值,默认为false
  • lazyloadingenabled :是否使用懒加载,boolean值,默认为false
  • defaultstatementtimeout:设置超时时间,默认单位秒
  • mapunderscoretocamelcase:是否启用camel命名规则的映射,boolean值,默认为false
  • logimpl:使用的日志框架

 

一般只需配置logimpl:

<settings>
        <setting name="logimpl" value="log4j"/>
</settings>

如果不使用日志框架,可以缺省此配置。

 

 


 

 

<typealias>

用于配置pojo类别名。

 

在映射文件中,如果parametertype、 resulttype是自己写的pojo类,必须使用全限定类名:

resulttype="com.chy.pojo.student"

又臭又长,很麻烦。可以使用别名。

 

 

配置pojo类的别名:

<typealiases>
        <typealias type="com.chy.pojo.student" alias="student"/>
        <typealias type="com.chy.pojo.teacher" alias="teacher"/>
 </typealiases>
resulttype="student"

直接写别名即可。

如果缺省alias属性,默认为类名的camel写法,比如student => student。

 

 

也可以使用注解来配置pojo类的别名:

@alias(value = "student")
public class student {
//......
}

可以缺省属性名,简写为

@alias("student")

 

 

如果觉得一个一个地配置pojo类很麻烦,可以使用包自动扫描:

<typealiases>
        <package name="com.chy.pojo"/>
</typealiases>

这个包下所有的pojo类都使用camel命名方式的别名。

 

在映射文件中使用别名有一个缺点:ctrl+左键不会转到定义处。

 

 


 

 

<typehandlers>

将参数传给预处理语句时,需要将数据从javatype(java类型)转换为jdbctype(jdbc类型);

将结果集中的数据转换为指定类型时,需要将数据从jdbctype转换为javatype。

这2个过程都要用到typehandler(类型转换器)。一般我们使用mybatis自带的类型转换器即可,也可以在<typehandlers>中引用自定义的类型转换器。

 

 


 

 

<objectfactory>

objectfactory负责创建结果实例。

将查询结果映射为指定对象时,默认的objectfactory先调用无参的构造器创建pojo类的实例,再调用setter方法注入值。

一般我们使用默认的objectfactory即可,也可以在<objectfactory>中引用自定义的objectfactory类。

 

 


 

 

<plugins>

mybatis允许在将查询结果映射为指定类型的过程中,以插件形式执行自定义的代码。

 

 


 

 

<environments>

环境配置,mybatis是持久层框架,它的环境自然是数据库,即数据库的配置。

<environments default="development">
        <environment id="development">
            <transactionmanager type="jdbc"></transactionmanager>
            <datasource type="pooled">
                <property name="driver" value="${mysql_driver}"/>
                <property name="url" value="${mysql_url}"/>
                <property name="username" value="${mysql_username}"/>
                <property name="password" value="${mysql_password}"/>
            </datasource>
        </environment>
</environments>

一般要配置多个环境,开发一个环境,正式使用一个环境。default指定要使用哪个<environment>。

 

 

一个<environment>即一个环境(数据库配置)。

<transactionmanager>指定使用哪种事务管理,通常使用jdbc的事务管理。如果搭配spring使用,一般使用spring的事务管理(在spring中配置事务管理),不在mybatis中配置事务。

<datasource>配置数据源,mybatis提供了三种数据源:

  • unpooled    不使用连接池
  • pooled   使用连接池
  • jndi   适合在在ejb或应用服务器等容器中使用

type指定使用哪种数据源,<property>子元素设置具体选项。

 

 

unpooled

不使用连接池,适合对性能没有要求的、简单的应用程序。

常用属性:

  • driver、url、username、password
  • defaulttransactionlsolationlevel   设置默认的事务隔离级别

 

 

pooled

操作数据库速度更快,适合高并发的程序,很常用。

常用属性:

  • driver、url、username、password
  • defaulttransactionlsolationlevel   设置默认的事务隔离级别
  • poolmaximumactiveconnections   最大活跃连接数
  • poolmaximumidleconnections   最大闲置连接数

 

 


 

 

<mapper>

用于引入映射文件。写法很多,常用的有3种:

  •  通过映射文件的路径引入
<mappers>
        <mapper resource="com/chy/mapper/studentmapper.xml"/>
        <mapper resource="com/chy/mapper/teachermapper.xml"/>
</mappers>

 

 

  • 通过mapper接口类引入
<mappers>
        <mapper class="com.chy.mapper.studentmapper"/>
</mappers>

 

 

  • 通过包名引入
<mappers>
        <package name="com.chy.mapper"/>
</mappers>

这种最常用,可以一次性引入mapper包下所有的映射文件。