Mybatis-config.xml配置解析
官网对应文档地址
声明:https://mybatis.org/mybatis-3/zh/configuration.html。详尽的配置解析,可以参考官方文档。本文只是列举常用的配置,并且加以解释说明。。
关于Mybaits核心配置文件需要掌握的大致如下,可以自行参考官方文档以及https://blog.csdn.net/weixin_41549354/article/details/107739736搭建一个Mybatis02-son自己配置一下,剩下的内容也可以阅读官方文档自行了解。
属性(properties)
即我们可以将一些值进行外部声明,然后通过类似 ${名称} 的形式引用,常用的配置有environments中的url,数据卡驱动,连接池,用户名,密码等的配置。类似用法为。
先在资源文件夹resources下新建一个db.properties文件,将这些值声明在里面
Driver=com.mysql.jdbc.Driver
URL=jdbc\:mysql\://localhost\:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
userName=root
pwd=123456
<properties resource="db.properties"></properties>
<!-- environments中可以配置多套environment,default指定默认的一套 -->
<environments default="development">
<environment id="development">
<!-- 默认为jdbc的事务管理 -->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="${URL}"/>
<property name="username" value="#{userName}"/>
<property name="password" value="${pwd}"/>
</dataSource>
</environment>
</environments>
声明之后,通过properties标签进行引用,注意xml中标签的顺序,放错位置编译器会提示
The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".
当然,properties文件,本来就是进行属性外部声明的一个文件,这个文件的用途不仅仅是用于properties标签的引用,还可以在java代码中通过类似方式进行引用。
环境配置(environments)
在environments中可以有一个default属性,可以指定我们所使用的默认的环境。在实际开发中,我们可能需要连接很多数据库进行,在environments中可以配置多个environment标签,指定多套数据库,**不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。**每个数据库对应一个 SqlSessionFactory 实例
<!-- environments中可以配置多套environment,default指定默认的一套,切换到第二套环境 -->
<environments default="development01">
<environment id="development">
<!-- 默认为jdbc的事务管理 -->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="${URL}"/>
<property name="username" value="#{userName}"/>
<property name="password" value="${pwd}"/>
</dataSource>
</environment>
<environment id="development01">
<!-- 默认为jdbc的事务管理 -->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="${URL}"/>
<property name="username" value="#{userName}"/>
<property name="password" value="${pwd}"/>
</dataSource>
</environment>
</environments>
environment中的常用属性
transactionManager:在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"),默认为JDBC
- JDBC –我们一般使用JDBC, JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
- MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。当然可以通过配置,不让它关闭,一般这个用的很少
- 如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
数据源dataSoucrce:大多数 MyBatis 应用程序会按示例中的例子来配置数据源。虽然数据源配置是可选的,但如果要启用延迟加载特性,就必须配置数据源。有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]")。数据源即连接数据库的模式,常见数据源有dbcp ,c3p0,druid。UNPOOLED:这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。 性能表现则依赖于使用的数据库,对某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形,但实际应用比较少。POOLED: 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。里面的具体配置可以参考官方文档阅读,这些配置说白了,也就是配置数据库的连接信息,比如url,驱动,用户名,密码等等。Mybatis中默认数据源是POOLED
类型别名(typeAliases)
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。
我们在mapper.xml中则可以省略他的全限定类名,使用别名,当然在任何用到了com.pojo.User的地方用user替换
<!-- resultType="user" 这个user即为在配置文件中声明的别名 -->
<select id="FindUserListByName" resultType="user" parameterType="String">
<!-- 一般模糊查询的通配符可以用concat函数进行拼接 -->
select * from mybatis.user where name like concat('%',#{String},'%')
</select>
他有三种方式(配置在Mybatis-config.xml中):
第一种:每个类独自声明,适用于实体类比较少的时候,优点是可以随便命名
<typeAliases>
<typeAlias alias="user" type="com.pojo.User"/>
</typeAliases>
第二种,包扫描,MyBatis 会在包名下面搜索需要的 Java Bean,
<typeAliases>
<package name="com.pojo"/>
</typeAliases>
第三种,在JavaBean上用注解@Alias(“别名”),这个配置是三个配置中优先级最大的,实用了注解,配置文件中配置不起作用。
@Alias("User")
public class User {
...
}
设置(settings)
Mybatis中settings有一大堆乱七八糟的,具体的可以参考官方文档中,设置可以改变Mybatis运行时候的行为,总结常用的有:
设置名 | 描述 | 有效值 | 默认值 |
---|---|---|---|
cacheEnabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 | true | false | true |
lazyLoadingEnabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 | true | false | false |
useGeneratedKeys | 允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。 | true | false | False |
mapUnderscoreToCamelCase | 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。即数据库命名规则是下划线,而java规范是驼峰命名法,比如:stu_name自动映射为java中stuName | true | false | False |
logImpl | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 | SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING | 未设置 |
映射器(mappers)
即将我们写了sql的mapper文件在Mybatis-config.xml中声明为映射器。在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。
第一种配置方法:
<!-- 使用相对于类路径的资源引用 推荐-->
<mappers>
<!-- 注意路径资源是 / 分割,而全限定名是 . -->
<mapper resource="com/dao/mapper/UserMapper.xml"/>
</mappers>
<!-- 使用完全限定资源定位符(URL,不建议,没什么用 -->
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<mapper url="file:///var/mappers/BlogMapper.xml"/>
<mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- 注意!!!接口和它的mapper配置文件必须要同一个包下,切必须同名 -->
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>
<!-- 注意!!!接口和它的mapper配置文件必须要同一个包下,切必须同名 -->