MyBatis·基础篇(六) MyBatis核心配置文件详解
1. SqlMapConfig.xml 中配置的内容和顺序
/**
*-properties(属性)
* --property
*
*-settings(全局配置参数)
* --setting
*
*-typeAliases(类型别名)
* --typeAliase
* --package
*
*-typeHandlers(类型处理器)
*
*-objectFactory(对象工厂)
*
*-plugins(插件)
*
*-environments(环境集合属性对象)
* --environment(环境子属性对象)
* ---transactionManager(事务管理)
* ---dataSource(数据源)
*
*-mappers(映射器)
* --mapper
* --package
*/
本篇文章学习三个重点的 properties typeAliases mappers,其余后期用到时深入讲解
2. properties(属性)
在使用 properties 标签配置时,我们可以采用两种方式指定属性配置
第一种:静态配置属性
<properties>
<property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="jdbc.url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="jdbc.username" value="root"/>
<property name="jdbc.password" value="123456"/>
</properties>
第二种:动态配置属性
在 classpath 下定义 db.properties 文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
properties 标签配置引入 db.properties
<!-- 配置连接数据库的信息
resource 属性:用于指定 properties 配置文件的位置,要求配置文件必须在类路径下
resource="jdbcConfig.properties"
url 属性:
URL: Uniform Resource Locator 统一资源定位符
http://localhost:8080/mystroe/CategoryServlet URL
协议 主机 端口 URI
URI:Uniform Resource Identifier 统一资源标识符
/mystroe/CategoryServlet
它是可以在 web 应用中唯一定位一个资源的路径
-->
<properties resource=“db.properties" />
在配置文件中引入导入的 db.properties
<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>
如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:
- 在 properties 元素体内指定的属性首先被读取。
- 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,覆盖已读取的同名属性。
- 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性。
新特性:从 MyBatis 3.4.2 开始,你可以为占位符指定一个默认值~
<dataSource type="POOLED">
<!-- 如果属性 'username' 没有被配置,'username' 属性的值将为 'ut_user' -->
<property name="username" value="${username:ut_user}"/>
</dataSource>
这个特性默认是关闭的。如果你想为占位符指定一个默认值, 你应该添加一个指定的属性来开启这个特性:
~~~xml
<properties resource="db.properties">
<!-- 启用默认值特性 -->
<property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/>
</properties>
3. typeAliases(类型别名)
类型别名是为 Java 类型设置一个短的名字。 它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。
3.1 默认别名
mybaits 在加载时已经把常用的数据类型注册了别名,从而我们在使用 基本数据类型 和 常见引用类型 时可以不写包名,而我们的是自己编写实体类并没有注册别名,所以必须写全限定类名。
别名 | 映射的类型 |
---|---|
_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 |
以上这些这些都是支持的默认别名,摘自 MyBatis官网开发者文档——类型别名(typeAliases)
3.2 参考 TypeAliasRegistery.class 的源码
3.3 自定义别名
在 SqlMapConfig.xml 中配置自定义别名
<typeAliases>
<!-- 单个别名定义 -->
<typeAlias alias="user" type="com.itheima.domain.User"/>
<!-- 批量别名定义,扫描整个包下的类,别名为类名(不区分大小写) -->
<package name="top.lzchao.domain"/>
<package name="*.*.*(其它包)"/>
</typeAliases>
自定义别名后,我们在映射文件中,只用写类名(不区分大小写),而无需再写全限定类名了
<!-- 查询所有用户列表 -->
<select id="findAll" resultType="User">
select * from user
</select>
使用注解 @Alias 指定别名
@Alias("myUser")
public class User {
...
}
通过注解 @Alias 指定别名后,该类的别名就是注解值
4. mappers(映射器)
使用相对于类路径的资源:<mapper resource=" " />
如:<mapper resource=“top/lzchao/dao/UserMapper.xml” />
使用 mapper 接口类路径:<mapper class=" " />
如:<mapper class=“top.lzchao.mapper.UserMapper”/>
注意:此种方法要求 mapper 接口名称和 mapper 映射文件名称相同,且放在同一个目录中。
注册指定包下的所有 mapper 接口: <package name=""/>
如:<package name=“top.lzchao.mybatis.mapper”/>
注意:此种方法要求 mapper 接口名称和 mapper 映射文件名称相同,且放在同一个目录中。