SqlMapConfig.xml中配置的内容和顺序如下:
properties(属性) ★
settings(全局配置参数)
typeAliases(类型别名) ★
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器) ★
1.properties属性
可以在SqlMapConfig.xml中引入properties文件的配置信息,实现配置的热插拔效果。例如:
1.1 准备jdbc.properties放在resources下
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///mybatis63
jdbc.username=root
jdbc.password=root
1.2 在SqlMapConfig.xml中引入jdbc.properties
<configuration>
<!--
properties标签:
resource属性:properties资源文件的路径,从类加载路径下开始查找
url属性:url地址
-->
<properties resource="jdbc.properties"/>
<environments default="mysql_mybatis">
<environment id="mysql_mybatis">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 使用${OGNL}表达式,获取从properties中得到的配置信息 -->
<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>
<mappers>
<mapper resource="com/itheima/dao/UserDao.xml"/>
</mappers>
</configuration>
1.3 注意加载顺序
假如:
有jdbc.properties配置文件在resource下
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///mybatis49
jdbc.username=root
jdbc.password=root
SqlMapConfig.xml配置如下:
<properties resurce="jdbc.properties">
<property name="jdbc.username" value="root"/>
<property name="jdbc.password" value="123456"/>
</properties>
那么:
Mybatis会首先加载xml配置文件里的的property标签,得到了jdbc.username和jdbc.password
然后再加载外部jdbc.properties配置文件,覆盖掉刚刚得到的jdbc.username和jdbc.password的值
总结:
后加载覆盖先加载,外部properties配置文件的优先级,要高于xml里property标签的配置
2. typeAlias类型别名
在映射配置文件中,我们要写大量的parameterType和resultType,如果全部都写全限定类名的话,代码就太过冗余,开发不方便。可以使用类型别名来解决这个问题。
类型别名:是Mybatis为Java类型设置的一个短名称,目的仅仅是为了减少冗余。
注意:类型别名不区分大小写
2.1 内置别名
Mybatis提供的别名有:
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
object | Object |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
2.2 自定义类型别名
自己定义的JavaBean,全限定类名太长,可以自定义类型别名。
2.2.1 给一个类指定别名
1) 在SqlMapConfig.xml中配置一个类的别名
<typeAliases>
<!-- type:要指定别名的全限定类名 alias:别名 -->
<typeAlias type="com.itheima.domain.QueryVO" alias="vo"/>
<typeAlias type="com.itheima.domain.User" alias="user"/>
<typeAlias type="com.itheima.domain.User2" alias="user2"/>
</typeAliases>
2) 在映射配置文件中使用类型别名
<!-- parameterType使用别名:vo, resultType使用别名:user -->
<select id="findByVO" parameterType="vo" resultType="user">
select * from user where username like #{user.username}
</select>
2.2.2 指定一个包名
1) 在SqlMapConfig.xml中为一个package下所有类注册别名:类名即别名
<typeAliases>
<!-- 把com.itheima.domain包下所有JavaBean都注册别名,类名即别名,不区分大小写 -->
<package name="com.itheima.domain"/>
</typeAliases>
2) 在映射配置文件中使用类型别名
<!-- parameterType使用别名:queryvo, resultType使用别名:user -->
<select id="findByVO" parameterType="queryvo" resultType="user">
select * from user where username like #{user.username}
</select>
3. mappers映射器
用来配置映射器接口的配置文件位置,或者映射器接口的全限定类名
3.1 <mapper resource=""/>
用于指定映射配置文件xml的路径,支持xml开发方式,例如:
<mapper resource="com/itheima/dao/UserDao.xml"/>
注意:
映射配置文件的名称,和映射器接口类名 可以不同
映射配置文件的位置,和映射器接口位置 可以不同
配置了xml的路径,Mybatis就可以加载statement信息,并且根据namespace属性找到映射器
3.2 <mapper class=""/>
用于指定映射器接口的全限定类名,支持XML开发和注解开发,例如:
<mapper class="com.itheima.dao.UserDao"/>
如果是使用xml方式开发,那么要注意:
映射配置文件的名称 要和 映射器接口的类名相同
映射配置文件的位置 要和 映射器接口的位置相同
Mybatis只知道映射器的名称和位置,不知道配置文件的名称和位置。只能查找同名同路径的配置文件
3.3 <package name=""/>
用于自动注册指定包下所有的映射器接口,支持XML开发和注解开发,例如:
<package class="com.itheima.dao"/>
如果是使用XML方式开发,那么要注意:
映射配置文件的名称 要和 映射器接口的类名相同
映射配置文件的位置 要和 映射器接口的位置相同
Mybatis只能根据包名找到所有的映射器的类名和位置, 不知道配置文件的名称和位置。只能查找同名同路径的配置文件