这是 mybatis 系列第 4 篇。没看前文的倡议先去【Java 冢狐】公众号中查看前文,不便了解和把握
别名
为什么须要应用别名?
在 xml 文件中有很多须要类残缺的类名的中央,非常的简短,为了加重咱们的工作量和复杂度 mybatis 反对咱们给某个类起一个别名,而后通过别名能够拜访到指定的类型。
别名的用法
应用别名之前须要先在 mybatis 中注册别名,而注册别名有 3 种形式。
形式 1
应用 typeAlias 元素进行注册
如下:
<typeAliases>
<typeAlias type="残缺的类型名称" alias="别名" />
</typeAliases>
typeAliases 元素中能够蕴含多个 typeAlias 子元素,每个 typeAlias 能够给一个类型注册别名,有 2 个属性须要指定:
- type:残缺的类型名称
- alias:别名
形式 2
通过 packege 元素批量注册
下面咱们通过 typeAlias 元素能够注册一个别名,如果咱们有很多类须要注册,须要写很多 typeAlias 配置。
mybatis 为咱们提供了批量注册别名的形式,通过 package 元素,如下:
<typeAliases>
<package name="须要扫描的包"/>
</typeAliases>
这个也是在 typeAliases 元素上面,不过这次应用的是 package 元素,package 有个 name 属性,能够指定一个包名,mybatis 会加载这个包以及子包中所有的类型,给这些类型都注册别名, 别名名称默认会采纳类名小写的形式 ,如 UserModel 的别名为 usermodel
形式 3
package 联合 @Alias 批量注册并指定别名
形式 2 中通过 package 能够批量注册别名,然而容易呈现多个类名雷同的类。
所以在 package 形式批量注册别名的时候,咱们能够给类中增加一个 @Alias 注解来给这个类指定别名:
@Alias("user")
public class UserModel {}
当 mybatis 扫描类的时候,发现类上有 Alias 注解,会取这个注解的 value 作为别名,如果没有这个注解,会将类名小写作为别名,如同形式 2。
别名不辨别大小写
mybatis 默认为很多类型提供了别名
别名的原理
mybatis 容许咱们给某种类型注册一个别名,别名和类型之间会建设映射关系,这个映射关系存储在一个 map 对象中,key 为别名的名称,value 为具体的类型,当咱们通过一个名称拜访某种类型的时候,mybatis 依据类型的名称,先在别名和类型映射的 map 中依照 key 进行查找,如果找到了间接返回对应的类型,如果没找到,会将这个名称当做残缺的类名去解析成 Class 对象,如果这 2 步解析都无奈辨认这种类型,就会报错。
别名应用倡议
别名的形式能够简化类型的写法,本来很长一串的 UserModel 对象,当初只用写个 user 就行了,用起来非常的不便和简洁。然而从保护下面来讲,不是很不便。
所以倡议自定义的类尽量别应用别名,而对 mybatis 中内置的一些别名咱们须要晓得。
属性配置文件详解
连贯数据库的配置,咱们是间接写在 mybatis 全局配置文件中的,然而上线当前可能须要进行一些改变切换数据库,并不是非常的优化,所以咱们通常将一些须要运培修改的配置信息(如:db 配置、邮件配置、redis 配置等等各种配置)放在一个 properties 配文件中,而后上线时,只须要运维去批改这个配置文件就能够了,基本不必他们去批改和代码相干的文件。
mybatis 也反对咱们通过内部 properties 文件来配置一些属性信息。
mybatis 配置属性信息有 3 种形式。
形式 1:property 元素中定义属性
属性定义
mybatis 全局配置文件中通过 properties 元素来定义属性信息,如下:
<configuration>
<properties>
<property name="属性名称" value="属性对应的值"/>
</properties>
</configuration>
下面通过 property 元素的形式进行配置属性信息:
- name:属性的名称
- value:属性的值。
如:
<property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
应用 ${属性名称} 援用属性的值
属性曾经定义好了,咱们能够通过 ${属性名称} 援用定义好的属性的值,如:
<property name="driver" value="${jdbc.driver}"/>
形式 2:resource 引入配置文件
形式 1 中,咱们的配置文件还是写在全局配置文件中,mybatis 反对从内部引入配置文件,能够把配置文件写在其余内部文件中,而后进行引入。
引入 classes 门路中的配置文件
<configuration>
<properties resource="配置文件门路"/>
</configuration>
properties 元素有个 resource 属性,值为配置文件绝对于 classes 的门路,配置文件咱们个别放在 src/main/resource 目录,这个目录的文件编译之后会放在 classes 门路中。
形式 3:url 的形式引入近程配置文件
mybatis 还提供了引入近程配置文件的形式,如下:
<properties url="近程配置文件的门路" />
这次还是应用 properties 元素,不过应用的是 url 属性,如:
<properties url="http://itsoku.com/properties/config.properties" />
属性配置文件应用倡议
下面咱们说了 3 中形式,第 2 中形式是比拟常见的做法,倡议大家能够应用第二种形式来引入内部资源配置文件。
如果 3 种形式如果咱们都写了,mybatis 会怎么走?
- 形式 1 和形式 2 都存在的时候,形式 2 的配置会笼罩形式 1 的配置。
- 如果形式 2 和形式 3 都存在的时候,形式 3 会生效
mybatis 会先读取形式 1 的配置,而后读取形式 2 或者形式 3 的配置,会将 1 中雷同的配置给笼罩。
mybatis 中引入 mapper 的 3 种形式
mapper xml 文件是十分重要的,咱们写的 sql 基本上都在外面,应用 mybatis 开发我的项目的时候,和 mybatis 相干的大部分代码就是写 sql,基本上都是和 mapper xml 打交道。
编写好的 mapper xml 须要让 mybatis 晓得,咱们怎么让 mybatis 晓得呢?
能够通过 mybatis 全局配置文件进行引入,次要有 3 种形式。
形式 1:应用 mapper resouce 属性注册 mapper xml 文件
目前咱们所波及到的各种例子都是采纳的这种形式,应用上面的办法进行引入:
<mappers>
<mapper resource="Mapper xml 的门路(绝对于 classes 的门路)"/>
</mappers>
注意事项
- 个别状况下, 咱们会创立一个和 Mapper xml 中 namespace 同名的 Mapper 接口,Mapper 接口会和 Mapper xml 文件进行绑定
- mybatis 加载 mapper xml 的时候,会去查找 namespace 对应的 Mapper 接口,而后进行注册,咱们能够通过 Mapper 接口的形式去拜访 Mapper xml 中的具体操作
- Mapper xml 和 Mapper 接口配合的形式是比拟常见的做法,也是强烈建议大家应用的
形式 2:应用 mapper class 属性注册 Mapper 接口
引入 Mapper 接口
mybatis 全局配置文件中引入 mapper 接口,如下:
<mappers>
<mapper class="接口的残缺类名" />
</mappers>
这种状况下,mybais 会去加载 class 对应的接口,而后还会去加载和这个接口同一个目录的同名的 xml 文件。
如:
<mappers>
<mapper class="zhonghu.chat01.demo1.UserMapper" />
</mappers>
下面这种写法,mybatis 会主动去注册 UserMapper 接口,还会去查找上面的文件:
zhonghu.chat01.demo1.UserMapper.xml
大家当前开发我的项目的时候预计也会看到这种写法,Mapper 接口和 Mapper xml 文件放在同一个包中。
形式 3:应用 package 元素批量注册 Mapper 接口
批量注册 Mapper 接口
下面说 2 种形式都是一个个注册 mapper 的,如果咱们写了很多 mapper,是否可能批量注册呢?
mybatis 提供了扫描包批量注册的形式,须要在 mybatis 全局配置文件中退出上面配置:
<mappers>
<package name="须要扫描的包" />
</mappers>
mybatis 会扫描 package 元素中 name 属性指定的包及子包中的所有接口,将其当做 Mapper 接口进行注册,所以个别咱们会创立一个 mapper 包,外面放 Mapper 接口和同名的 Mapper xml 文件。
应用留神
形式 3 会扫描指定包中所有的接口,把这些接口作为 Mapper 接口进行注册,扫描到的类型只有是接口就会被注册,所以指定的包中通常咱们只放 Mapper 接口,防止寄存一些不相干的类或者接口。
对于配置和源码
本次解说到的一些配置都是在 mybatis 全局配置文件中进行配置的,这些元素配置是有先后顺序的,具体元素是在上面的 dtd 文件中定义的:
http://mybatis.org/dtd/mybatis-3-config.dtd
倡议大家去看一下这个 dtd 配置文件。
总结
- 把握别名注册的 3 种形式,倡议大家尽量少应用自定义别名
- 把握属性配置 3 种形式
- 把握 mapper 注册的 3 种形式及须要留神的中央
最初
- 如果感觉看完有播种,心愿能关注一下,顺便给我点个赞,这将会是我更新的最大能源,感激各位的反对
- 欢送各位关注我的公众号【java 冢狐】,专一于 java 和计算机基础知识,保障让你看完有所播种,不信你打我
- 求一键三连:点赞、转发、在看。
- 如果看完有不同的意见或者倡议,欢送多多评论一起交换。感激各位的反对以及厚爱。
——我是冢狐,和你一样酷爱编程。
欢送关注公众号“Java 冢狐”,获取最新消息