天天看点

【MyBatis】基础篇(六) MyBatis核心配置文件详解 MyBatis·基础篇(六) MyBatis核心配置文件详解

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 的源码

【MyBatis】基础篇(六) MyBatis核心配置文件详解 MyBatis·基础篇(六) MyBatis核心配置文件详解

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 映射文件名称相同,且放在同一个目录中。

继续阅读