MyBatis配置详解

MyBatis配置详解

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

在resources文件夹中创建mybatis-config.xml

  • 可配置内容
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
<!-- 注意元素节点的顺序!顺序不对会报错 -->

以基础项目配置为例

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="localhost"/>
                <property name="username" value="root"/>
                <property name="password" value="*********"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>

properties元素

  • 用来配置参数信息,比如最常见的数据库连接信息。

  • 为了避免直接把参数写死在xml配置文件中,我们可以把这些参数单独放在properties文件中,用properties标签引入进来,然后在xml 配置文件中用$引用就可以了。

    新建一个db.properties文件

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/mybatis?
    useSSL=true&useUnicode=true&characterEncoding=utf8
    username=root
    password=123456
    

    xml中引入properties配置文件

    <properties resource="db.properties"/>
    <dataSource type="POOLED">
      <property name="driver" value="${driver}"/>
      <property name="url" value="${url}"/>
      <property name="username" value="${username}"/>
      <property name="password" value="${password}"/>
    </dataSource>
    

settings元素

  • setttings里面是MyBatis的一些核心配置,在 MyBatis 中 settings 是最复杂的配置,它能深刻影响 MyBatis 底层的运行,但是在大部分情况下使用默认值便可以运行,只需要修改一些常用的规则即可,比如自动映射、驼峰命名映射、级联规则、是否启动缓存、执行器(Executor)类型等。

    <settings>
      <setting name="cacheEnabled" value="true"/>	
      <!--全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。-->
      
      <setting name="lazyLoadingEnabled" value="true"/>
      <!--延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。-->
      
      <setting name="multipleResultSetsEnabled" value="true"/>
      <!--是否允许单个语句返回多结果集(需要数据库驱动支持)。-->
      
      <setting name="useColumnLabel" value="true"/>
      <!--使用列标签代替列名。实际表现依赖于数据库驱动,具体可参考数据库驱动的相关文档,或通过对比测试来观察。 -->
      
      <setting name="useGeneratedKeys" value="false"/>
      <!--允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby) -->
      
      <setting name="autoMappingBehavior" value="PARTIAL"/>
      <!--指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示关闭自动映射;PARTIAL 只会自动映射没有定义嵌套结果映射的字段。 FULL 会自动映射任何复杂的结果集(无论是否嵌套)。 -->
      
      <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
      <!--指定发现自动映射目标未知列(或未知属性类型)的行为。 -->
      
      <setting name="defaultExecutorType" value="SIMPLE"/>
      <!--配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement); BATCH 执行器不仅重用语句还会执行批量更新。 -->
      
      <setting name="defaultStatementTimeout" value="25"/>
      <!--设置超时时间,它决定数据库驱动等待数据库响应的秒数。 -->
      
      <setting name="defaultFetchSize" value="100"/>
      <!--为驱动的结果集获取数量(fetchSize)设置一个建议值。此参数只可以在查询设置中被覆盖。 -->
      
      <setting name="safeRowBoundsEnabled" value="false"/>
      <!--是否允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为 false。 -->
      
      <setting name="mapUnderscoreToCamelCase" value="false"/>
      <!--是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 -->
      
      <setting name="localCacheScope" value="SESSION"/>
      <!--MyBatis 利用本地缓存机制(Local Cache)防止循环引用和加速重复的嵌套查询。 默认值为 SESSION,会缓存一个会话中执行的所有查询。 -->
      
      <setting name="jdbcTypeForNull" value="OTHER"/>
      <!--当没有为参数指定特定的 JDBC 类型时,空值的默认 JDBC 类型。 某些数据库驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。 -->
      
      <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
      <!--指定对象的哪些方法触发一次延迟加载。 -->
    </settings>
    

typeAliases元素

  • 类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。例如:

    <typeAliases>
      <typeAlias alias="Author" type="domain.blog.Author"/>
    </typeAliases>
    

    在任何我们需要使用到domain.blog.Author时我们都可以使用Author来代替

  • 当然我们也可以使用注解来把我们需要使用别名的类标注

    @Alias("author")
    public class Author {
        ...
    }
    

    这样我们就可以使用author来代替domain.blog.Author

plugins元素

  • 当我们在使用mybatis时有时候会遇到功能不够用的情况我们可以导入插件

    例如分页插件pagehelper

    <plugins>
        <!-- com.github.pagehelper为PageHelper类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <property name="param1" value="value1"/>
        </plugin>
    </plugins>
    

environments元素

  • environments中可配置多套environment运行环境,不同环境以id区分,将SQL映射到多个不同的数据库上,必须指定其中一个id为默认运行环境(通过default指定)

    • 子元素节点:environment(该套环境的具体配置,id唯一)

      • 子元素节点:transactionManager - (事务管理器 )

        type属性中可选择两种事务管理器type=”[JDBC|MANAGED]”

        JDBC,会使用Connection对象的commit()、rollback()、close()管理事务,如果配置成MANAGED,会把事务交给容器来管理,如果是Spring + MyBatis,则没有必要配置,因为 Spring 模块会使用自带的管理器来覆盖前面的配置(多数情况下不会单独使用mybatis,所有可忽略)

      • 子元素节点:dataSource(数据源)

        数据源是必须配置的

        dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源

        type可选择三种内建的数据源类型type="[UNPOOLED|POOLED|JNDI]")

        • unpooled: 这个数据源的实现只是每次被请求时打开和关闭连接。
        • pooled: 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来 , 这是一种使得
          并发 Web 应用快速响应请求的流行处理方式。
        • jndi:这个数据源的实现是为了能在如 Spring 或应用服务器这类容器中使用,容器可以
          集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。

mappers元素

  • 既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。 首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。
  • 引入资源方式
<!--使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>

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

<!--使用映射器接口实现类的完全限定类名
需要配置文件名称和接口名称一致,并且位于同一目录下-->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
</mappers>

<!--将包内的映射器接口实现全部注册为映射器
但是需要配置文件名称和接口名称一致,并且位于同一目录下-->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>
  • mapper文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.springboot.mapper.UserMapper">
    <select id="findAll" resultType="com.example.springboot.entity.User">
        SELECT * FROM user
    </select>
</mapper>

namespace中文意思:命名空间,作用如下:

  1. namespace和子元素的id联合保证唯一 , 区别不同的mapper
  2. 绑定DAO接口
    1.namespace的命名必须跟某个接口同名
    2.接口中的方法与映射文件中sql语句id应该一一对应

namespace命名规则 : 包名+类名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值