mybatis的全局配置文件SqlMapConfig.xml,配置内容如下:
properties(属性)
settings(全局配置参数)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器)
下面介绍一些常用的属性
1.1 properties属性
需求:将数据库连接参数配置在db.properties中,只需要在SqlMapConfig.xml中加载db.properties的属性值,在SqlMapConfig.xml中就不需要对数据库参数进行硬编码
将数据库参数配置在db.properties的原因:数据库参数同一管理,方便其他xml引用该db.properties,例如当系统庞大形成集群的时候,系统升级需要修改数据库连接信息,需要脚本来操作,只需要操作db.properties即可
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
在SqlMapConfig.xml中加载配置文件并引用配置文件中的参数如下
<!-- 加载属性文件 -->
<properties resouce="db.properties">
<!-- 元素体,properties中还可以配置一些属性名和属性值
<property name="jdbc.driver" value=""/>-->
</properties>
<!-- 和spring整合后将会移除environments的配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<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>
properties特性
注意:Mybatis会按照下面的顺序来加载属性:
- properties元素体内的值首先会被读取
- 然后会读取properties 元素中resouce或url加载的属性,它会覆盖已加载的同名属性
- 最后读取parameterType(sql配置文件中的)传递的属性,它会覆盖已读取的同名属性。
当sql配置文件中statement有传递参数为name
<select id="findUserByName" parameterType="java.lang.String" resultType="cn.eugene.po.User">
select * from user where userName like '%${name}%'
</select>
并且db.properties配置中也有参数为name
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
name=aaa
程序最后会读取到statement中传递的name的值
建议:
不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。
在properties文件中定义属性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX
1.2 settings全局参数配置
mybatis框架在运行时可以调整一些运行参数。
比如:开启二级缓存、开启延迟加载。。
全局参数将会影响mybatis的运行行为
1.3 typeAliases(别名)
需求
在mapper.xml中,定义很多的statement,statement需要parameterType指定输入参数的类型、需要resultType指定输出结果的映射类型。
如果在指定类型时输入类型全路径,不方便进行开发,可以针对parameterType或resultType指定的类型定义一些别名,在mapper.xml中通过别名定义,方便开发。
1.3.1 mybatis默认支持的别名
1.3.2 定义单个别名
<!-- 定义别名 -->
<typeAliases>
<typeAlias type="cn.eugene.po.User" alias="user" />
</typeAliases>
在sql配置文件中引用别名
<select id="findUserById" parameterType="int" resultType="user">
select * from user where id = #{id}
</select>
1.3.3 批量定义别名(常用)
指定包名,mybaties自动扫描包中的类,别名就是类名
<typeAliases>
<!-- <typeAlias type="cn.eugene.po.User" alias="user" /> -->
<package name ="cn.eugene.po"/>
</typeAliases>
1.4 typeHandlers(类型处理器)
mybatis中通过typeHandlers完成jdbc类型和java类型的转换。
通常情况下,mybatis提供的类型处理器满足日常需要,不需要自定义.
1.5 mappers(映射配置)
1.5.1 通过resource加载单个映射文件
<mappers>
<!-- 加载userMapper.xml文件 -->
<mapper resource="sqlmap/userMapper.xml" />
<mapper resource="mapper/userMapper2.xml" />
</mappers>
1.5.2 通过mapper接口加载单个mapper
通过mapper接口加载单个mapper需要满足一些规范:mapper接口类名要和mapper.xml的文件名要保持一致且在同一个目录中
上边规范的前提:使用mapper代理开发
1.5.3 批量加载mapper(推荐使用)
批量加载mapper,和上面的的批量定义类名类似,我们指定mapper接口的包名,mybatis会自动扫描包下所有的mapper接口
需遵循一些规范::mapper接口类名要和mapper.xml的文件名要保持一致且在同一个目录中,使用的是mapper代理开发
<mappers>
<!-- 通过指定包名批量加载mapper口 -->
<package name="com.eugene.mapper"/>
</mappers>