• MyBatis 配置文件详解


    根元素<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包下所有的映射文件。

  • 相关阅读:
    解决微信OAuth2.0网页授权回调域名只能设置一个的问题
    js中window.location.search的用法和作用。
    在T-SQL语句中访问远程数据库
    C# 解析 json
    C#后台执行JS
    WhereHows前后端配置文件
    jar打包混淆上传全自动日志
    quartz中设置Job不并发执行
    解决eclipse maven 项目重新下载包这个问题
    Sublime Text 3中文乱码问题解决(最新)
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/12120023.html
Copyright © 2020-2023  润新知