properties标签(引入外部proprties文件)
mybatis可以使用properties标签来引入外部proprties文件的内容。
properties标签下有2个属性:
- resource:类路径下的proprties文件
- url:网络路径下的proprties文件
举例:
<?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>
<!-- 配置环境-->
<properties resource="db.properties"></properties>
<environments default="mysql">
<!--配置mysql的环境-->
<environment id="mysql">
<!--配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置连接池-->
<dataSource type="POOLED">
<!--配置连接数据库的4个基本信息-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
<mappers>
<mapper resource="mapper/User.xml" />
</mappers>
</configuration>
db.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
jdbc.username=root
jdbc.password=dexuan97
这里引入类路径下db.properties文件,如果xml想要使用db.properties中属性,只需要用${key}就行了。
settings标签(重要的设置项)
<?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>
<!-- 配置环境-->
<properties resource="db.properties"></properties>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<environments default="mysql">
<!--配置mysql的环境-->
<environment id="mysql">
<!--配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置连接池-->
<dataSource type="POOLED">
<!--配置连接数据库的4个基本信息-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
<mappers>
<mapper resource="mapper/User.xml" />
</mappers>
</configuration>
settings包含了许多重要的设置项,setting中有两种属性:
- name:设置项名
- value:设置项
设置参数 | 描述 | 有效值 | 默认值 |
---|---|---|---|
mapUnderscoreToCamelCase | 是否开启自动驼峰命名映射,即从数据库列名A_COLUMN到JAVA属性名aColumn的类似映射 | true、false | false |
cacheEnable | 该配置影响所有映射器中配置的缓存全局开关 | true、false | true |
lazyLoadingEnable | 延迟加载的全局开关。当它开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态 | true、false | false |
aggressiveLazyLoading | 当启用时,对任意延迟属性对象的调用会使带有延迟加载属性的对象完整加载,反之每种属性按需加载 | true、false | true |
multipleResultSets | 是否允许单一语句返回结果集(需要兼容驱动) | true、false | true |
useColumnLabel | 使用列标签代替列名 | true、false | true |
useGenerateKeys | 允许JDBC自动生成主键,需要驱动兼容。如果设置为true,则强制自动生成主键 | true、false | false |
autoMappingBehavior | 指定mybatis应如何自动映射列到字段或属性,NONE:取消自动映射,PARTIAL:只会自动映射没有定义嵌套结果集映射的结果集,FULL:自动映射任务复杂的结果集(无论是否嵌套) | NONE、PARTILA、FULL | PARTIAL |
defaultExecutorType | 配置默认的执行器,SIMPLE:普通的执行器,REUSE:执行器会重复利用预处理语句(prepared statements),BATCH:执行器将重用语句并执行批量更新 | SIMPLE、REUSE、BATCH | SIMPLE |
defaultStatementTimeout | 设置超时时间,它决定驱动等待数据相应的秒数。当没有设置时它取得是驱动默认时间 | any position integer | |
safeRowBoundsEnabled | 允许在嵌套语句中使用分页 | true、false | false |
mapUnderscoreToCamelCase | 是否开启自动驼峰命名映射,即从数据库列名A_COLUMN到JAVA属性名aColumn的类似映射 | true、false | false |
localCacheScope | mybatis利用本地缓存机制(local cache)防止循环引用(circular references)和加速重复嵌套查询。默认值是SESSIOn,这种情况下会缓存一个会话执行的所有查询。若设置为STATEMENT,本地会话仅仅用在语句执行上,对相同的sqlSession的不同调用将不会共享数据 | SESSION、STATEMENT | SESSION |
jdbcTypeForNull | 当没有为参数提供特定的JDBC类型时,为空值指定JDBC类型 | 常见:NULL、VARCHAR、OTHER | OTHER |
lazyLoadTriggerMethod | 指定对象的方法触发一次延迟加载 如果是一个方法列表,则用逗号隔开 | equals、clone、hashCode |
typeHandlers标签
plugins标签
environments标签
mybatis所需的环境,比如有开发环境和测试环境在这里配置就好了,有environment子标签组成。environment中必须有2个子标签:
- transactionManager:事务管理器
- type属性:JDBC或MANAGED(使用jdbc回滚还是j2ee容器的方式进行回滚)
- dataSource:数据源
- type属性:UNPOOLED|POOLED|JNDI(UNPOOLED:不使用连接池。POOLED:使用连接池。JNDI:使用jndi技术。自定义数据源:实现DataSourceFactory接口,type是全类名。)
environment中还需要1个属性代表当前环境就是id属性,如果想要变换当前属性,就需要在environments中的default标签中指明当前环境id名称。
<configuration>
<!-- 配置环境-->
<properties resource="db.properties"></properties>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<environments default="dev">
<!--配置mysql的环境-->
<environment id="dev">
<!--配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置连接池-->
<dataSource type="POOLED">
<!--配置连接数据库的4个基本信息-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
<mappers>
<mapper resource="mapper/User.xml" />
</mappers>
</configuration>
mappers标签
指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件。
<mappers>
<mapper resource="mapper/User.xml" />
</mappers>
mapper有三种属性:
- resource: 指定了磁盘下sql映射文件文件路径。
- url:指定了网络路径下sql映射文件文件路径。
- class: 接口注册,class=“接口路径”
- 如果有映射文件,映射文件需要和接口同名且放在同一目录下。
- 没有映射文件,需要用注解方式写明。
建议使用映射文件降低耦合,不然每次修改都需要编译。