(四)Mybatis从入门到入土——别名、配置文件以及引入mapper

这是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配置文件。

总结

  1. 掌握别名注册的3种方式,建议大家尽量少使用自定义别名
  2. 掌握属性配置3种方式
  3. 掌握mapper注册的3种方式及需要注意的地方

最后

  • 如果觉得看完有收获,希望能关注一下,顺便给我点个赞,这将会是我更新的最大动力,感谢各位的支持
  • 欢迎各位关注我的公众号【java冢狐】,专注于java和计算机基础知识,保证让你看完有所收获,不信你打我
  • 求一键三连:点赞、转发、在看。
  • 如果看完有不同的意见或者建议,欢迎多多评论一起交流。感谢各位的支持以及厚爱。

——我是冢狐,和你一样热爱编程。

欢迎关注公众号“Java冢狐”获取最新消息

(0)

相关推荐

  • Mybatis初始化过程简单总结

    前面连续多篇文章都是在数据mybatis的初始化过程,目前基本完成,是时候做一个总结了. 总览 首先回顾下最上层的测试代码,实际上目前分析的还在测试代码中与mybatis相关的第一步,具体如下图: 目 ...

  • (三)MyBatis从入门到入土——使用详解

    MyBatis使用详解 上篇我们手动开发了一个MyBatis项目,但是我们仅仅是编写了代码,对于整个项目是如何运行以及每个代码的意义都没有仔细的分析和说明,那么接下来我们就开始分析每个代码的意义以及如 ...

  • (二)MyBatis从入门到入土——开发一个Mybatis项目

    这是mybatis系列第2篇.没看前文的建议先去[Java冢狐]公众号中查看前文,方便理解和掌握这篇文章主要接着前文介绍了如何创建并使用Mybatis. 实战演练 上一篇文章中我们大体介绍了MyBat ...

  • (五)Mybatis从入门到入土——Mapper接口传参多种方式解析

    这是mybatis系列第5篇. 说到底Mybatis常见的传参形式无非是传递一个参数.Map.Java对象,亦或是多个参数.下面就分别对这些进行讲解和说明. 传递一个参数 传递一个参数相对来说较为简单 ...

  • (六) MyBatis从入门到入土——主键的获取

    这是mybatis系列第六篇.没看前文的建议先去[Java冢狐]公众号中查看前文,方便理解和掌握. 前面五篇把MyBatis的基本用法基本介绍完毕了,强烈推荐大家先把前面五篇看完实际操作完再来看接下来 ...

  • (八)MyBatis从入门到入土——自动映射的使用

    今天我们介绍一下我们一直在使用的但是没有来得及做过多介绍的自动映射. 什么是自动映射? 介绍自动映射之前先看一下手动映射,如下: <resultMap id="orderModelMa ...

  • 阳宅风水图解v:第四章理气入门

    第一节 九运衰旺论生死 一 九星生旺衰死 太阳东升西落,人有生老病死,一切皆是自然规律.而玄空学中星曜亦会有生旺衰死的表现.而玄空学内推断九星生旺衰死主要是用时间来作为标准来衡量,具体来讲就是代表天时 ...

  • 围棋定式:入门到入土(85)

    我再不更新,大家可能就已经忘了我并不喜欢打中单了.我只是个臭酱油,给AI包鸡包眼包大药那种. 有时候,你永远不知道自己坑会踩在何处.这个系列,想介绍一些从未体验过的定式大坑.本期开始将陆续介绍小目守角 ...

  • 围棋定式:入门到入土(86)

    我真不是忘了这个系列. 我就是懒. 有时候,你永远不知道自己坑会踩在何处.这个系列,想介绍一些从未体验过的定式大坑.本期开始将陆续介绍小目守角的各种变化,这应该是实战中非常实用的系列. 图1 对于黑1 ...

  • 从入门到入土:MySQL完整学习指南,包教包会!

    一 SQL 介绍 SQL(Structured Query Language),语义是结构化语言, 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统: 二 数据库介绍 2.1 数据库 我们 ...