作为mybatis的第二章节讲解,本章节主要讲mybatis的配置文件,mybatis-config.xml。作为mybatis的核心配置文件,它影响mybatis行为甚深的设置(setting)和属性(properties),本章节主要包括:
1.properties属性
2.settings设置
3.typeAliases 别名处理
4.typeHandlers 类型处理器
5.environment 环境配置
6.mappers 映射器
7.其中plugins(插件机制)和databaseIdProvider(数据库厂商标识),不做讲解,感兴趣的同学可自行查找资料
在正式讲解之前,要事先说明,mybatis-config.xml文件中的标签是有顺序要求的
<configuration>
<properties></properties>
<settings></settings>
<typeAliases></typeAliases>
<typeHandlers></typeHandlers>
<objectFactory></objectFactory>
<plugins></plugins>
<environments>
<environment></environment>
<transactionManager></transactionManager>
<dataSource></dataSource>
</environments>
<databaseIdProvider></databaseIdProvider>
<mappers></mappers>
</configuration>
1.Properties属性
mybatis-config.xml中一些属性的值,可由外部文件(.properties 结尾)进行动态的替换,属性的值在resources文件夹下db.properties文件中设置
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
mysql.username=root
mysql.password=1234
<!--引入外部的属性文件-->
<properties resource="db.properties"/>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}" />
<!--使用mysql server 超过6版本的同学 加上 serverTimezone=UTC,否则会报告关于时区错误的问题-->
<property name="url" value="${mysql.url}" />
<property name="username" value="${mysql.username}" />
<property name="password" value="${mysql.password}" />
</dataSource>
执行测试用例,可以正常返回结果
2.settings设置
涉及到的settings属性设置有很多,这里不一一进行测试演示,日后用到可慢慢体会
<settings>
<!--1.开启缓存-->
<setting name="cacheEnabled" value="true"/>
<!--2.开启懒加载,也叫做延迟加载-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--3.是否允许单一语句返回多结果集,需要驱动支持-->
<setting name="multipleResultSetsEnabled" value="true"/>
<!--4.使用列标签代替列名-->
<setting name="useColumnLabel" value="true"/>
<!--5.允许JDBC支持自动生成组件,需要驱动支持-->
<setting name="useGeneratedKeys" value="false"/>
<!--6.指定Mybatis应如何自动映射列到字段或属性,NONE表示取消自动映射,PARTIAL只会自动映射没有定义嵌套结果集的结果集,
FULL会自动映射任务复杂的结果集(无论是否嵌套)-->
<setting name="autoMappingBehavior" value="PARTIAL"/>
<!--7.当自动映射目标的未知列(或未知属性时)NONE 什么也不做,WARNING 输出警告日志,FAILING 抛出SqlSessionException -->
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<!--8.配置默认的执行器,SIMPLE就是普通的执行器,REUSE执行器会重用预处理语句(prepared statements),BATCH 执行器将重用语句并执行批量更新-->
<setting name="defaultExecutorType" value="SIMPLE"/>
<!--9.设置超时时间,他决定驱动等待数据库相应的秒数-->
<setting name="defaultStatementTimeout" value="25"/>
<!--10.为驱动程序设置一个提示,以控制返回结果的获取大小,此参数值可以由查询设置覆盖-->
<setting name="defaultFetchSize" value="100"/>
<!--11.允许在嵌套语句中使用分页-->
<setting name="safeRowBoundsEnabled" value="false"/>
<!--12.是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名A_COLUMN到经典Java属性名aColumn的类似映射-->
<setting name="mapUnderscoreToCamelCase" value="false"/>
<!--13.MyBatis利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询,默认值为SESSION,
这种情况下,会缓存一个会话中执行的所有查询,若设置值为STATEMENT,本地会话仅用在语句执行上,对相同SqlSession的不同调用将不会共享数据-->
<setting name="localCacheScope" value="SESSION"/>
<!--14.当没有为参数提供特定的JDBC类型时,为空值指定JDBC类型。某些驱动需要指定列的JDBC类型,某些驱动需要指定列的JDBC类型,
多数情况直接用一般类型即可,比如NULL,VARCHAR,OTHER -->
<setting name="jdbcTypeForNull" value="OTHER"/>
<!--15.指定哪个对象的方法触发一次延迟加载-->
<setting name="lazyLoadTriggerMethods"
value="equals,clone,hashCode,toString"/>
</settings>
3.typeAliases 别名处理
类型别名是为JavaBean设置一个短的名字,可以方便我们引用某个类
<typeAliases>
<!--单个别名处理-->
<typeAlias type="com.together.www.bean.Employee" alias="emp"/>
<!--批量处理,别名默认为类名首字母小写-->
<package name="com.together.www.bean"/>
</typeAliases>
4.typeHandlers 类型处理器
无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型,Mybatis中提供了丰富的类型处理器:
类型处理器 | Java 类型 | JDBC 类型 |
---|---|---|
BooleanTypeHandler | java.lang.Boolean, boolean | 数据库兼容的 BOOLEAN |
ByteTypeHandler | java.lang.Byte, byte | 数据库兼容的 NUMERIC 或 BYTE |
ShortTypeHandler | java.lang.Short, short | 数据库兼容的 NUMERIC 或 SHORT INTEGER |
IntegerTypeHandler | java.lang.Integer, int | 数据库兼容的 NUMERIC 或 INTEGER |
LongTypeHandler | java.lang.Long, long | 数据库兼容的 NUMERIC 或 LONG INTEGER |
FloatTypeHandler | java.lang.Float, float | 数据库兼容的 NUMERIC 或 FLOAT |
DoubleTypeHandler | java.lang.Double, double | 数据库兼容的 NUMERIC 或 DOUBLE |
BigDecimalTypeHandler | java.math.BigDecimal | 数据库兼容的 NUMERIC 或 DECIMAL |
等等… | 等等… | 等等… |
但在3.4版本以后,类型处理器实现了自动注册,无需手动进行注册
5.environment环境配置
MyBatis可以配置多种环境,比如开发、测试和生产环境需要有不同的配置,每种环境使用一个environment标签进行配置并指定唯一标识符,可以通过environments标签中的default属性指定一个环境的标识符来快速的切换环境,environment指具体环境,id指定当前环境的唯一标识,我这指定看上去指定了mysql和oracle两个数据源,实际上都是指向mysql,因为我只安装了mysql …
<environments default="oracle">
<environment id="mysql">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}" />
<!--使用mysql server 超过6版本的同学 加上 serverTimezone=UTC,否则会报告关于时区错误的问题-->
<property name="url" value="${mysql.url}" />
<property name="username" value="${mysql.username}" />
<property name="password" value="${mysql.password}" />
</dataSource>
</environment>
<environment id="oracle">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${oracle.driver}" />
<!--使用mysql server 超过6版本的同学 加上 serverTimezone=UTC,否则会报告关于时区错误的问题-->
<property name="url" value="${oracle.url}" />
<property name="username" value="${oracle.username}" />
<property name="password" value="${oracle.password}" />
</dataSource>
</environment>
</environments>
6.mappers 映射器
用来在mybatis初始化的时候,告诉mybatis需要引入哪些Mapper映射文件, mapper逐个注册SQL映射文件
resource : 引入类路径下的文件
url : 引入网络路径或者是磁盘路径下的文件
class : 引入Mapper接口,有SQL映射文件 , 要求Mapper接口与 SQL映射文件同名同位置, 没有SQL映射文件 , 使用注解在接口的方法上写SQL语句.
我就是采用直接在接口方法上写sql语句,并没有写SQL映射文件。
<mappers>
<mapper class="com.together.www.mapper.EmployeeMapper" />
<mapper resource="EmployeeMapper.xml" />
<!--使用批量注册,这种方式要求SQL映射文件名必须和接口名相同并且在同一目录下-->
<package name="com.together.www.mapper"/>
</mappers>