【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 在加载时已经把常用的数据类型注册了别名,从而我们在使用 基本数据类型常见引用类型 时可以不写包名,而我们的是自己编写实体类并没有注册别名,所以必须写全限定类名。

别名映射的类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
objectObject
mapMap
hashmapHashMap
listList
arraylistArrayList
collectionCollection
iteratorIterator

以上这些这些都是支持的默认别名,摘自 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 映射文件名称相同,且放在同一个目录中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值