这是mybatis系列第4篇。没看前文的建议先去【Java冢狐】公众号中查看前文,方便理解和掌握 别名为什么需要使用别名?在xml文件中有很多需要类完整的类名的地方,十分的冗长,为了减轻我们的工作量和复杂度mybatis支持我们给某个类起一个别名,然后通过别名可以访问到指定的类型。 别名的用法使用别名之前需要先在mybatis中注册别名,而注册别名有3种方式。 方式1使用typeAlias元素进行注册如下:
typeAliases元素中可以包含多个typeAlias子元素,每个typeAlias可以给一个类型注册别名,有2个属性需要指定:
方式2通过packege元素批量注册上面我们通过typeAlias元素可以注册一个别名,如果我们有很多类需要注册,需要写很多typeAlias配置。 mybatis为我们提供了批量注册别名的方式,通过package元素,如下:
这个也是在typeAliases元素下面,不过这次使用的是package元素,package有个name属性,可以指定一个包名,mybatis会加载这个包以及子包中所有的类型,给这些类型都注册别名,别名名称默认会采用类名小写的方式,如UserModel的别名为usermodel 方式3package结合@Alias批量注册并指定别名方式2中通过package可以批量注册别名,但是容易出现多个类名相同的类。 所以在package方式批量注册别名的时候,我们可以给类中添加一个@Alias注解来给这个类指定别名:
当mybatis扫描类的时候,发现类上有Alias注解,会取这个注解的value作为别名,如果没有这个注解,会将类名小写作为别名,如同方式2。
别名的原理mybatis允许我们给某种类型注册一个别名,别名和类型之间会建立映射关系,这个映射关系存储在一个map对象中,key为别名的名称,value为具体的类型,当我们通过一个名称访问某种类型的时候,mybatis根据类型的名称,先在别名和类型映射的map中按照key进行查找,如果找到了直接返回对应的类型,如果没找到,会将这个名称当做完整的类名去解析成Class对象,如果这2步解析都无法识别这种类型,就会报错。 别名使用建议别名的方式可以简化类型的写法,原本很长一串的UserModel对象,现在只用写个user就行了,用起来十分的方便和简洁。但是从维护上面来讲,不是很方便。 所以建议自定义的类尽量别使用别名,而对mybatis中内置的一些别名我们需要知道。 属性配置文件详解连接数据库的配置,我们是直接写在mybatis全局配置文件中的,但是上线以后可能需要进行一些改动切换数据库,并不是十分的优化,所以我们通常将一些需要运维修改的配置信息(如:db配置、邮件配置、redis配置等等各种配置)放在一个properties配文件中,然后上线时,只需要运维去修改这个配置文件就可以了,根本不用他们去修改和代码相关的文件。 mybatis也支持我们通过外部properties文件来配置一些属性信息。 mybatis配置属性信息有3种方式。 方式1:property元素中定义属性属性定义mybatis全局配置文件中通过properties元素来定义属性信息,如下:
上面通过property元素的方式进行配置属性信息:
如:
使用${属性名称}引用属性的值属性已经定义好了,我们可以通过${属性名称}引用定义好的属性的值,如:
方式2:resource引入配置文件方式1中,我们的配置文件还是写在全局配置文件中,mybatis支持从外部引入配置文件,可以把配置文件写在其他外部文件中,然后进行引入。 引入classes路径中的配置文件
properties元素有个resource属性,值为配置文件相对于classes的路径,配置文件我们一般放在src/main/resource目录,这个目录的文件编译之后会放在classes路径中。 方式3:url的方式引入远程配置文件mybatis还提供了引入远程配置文件的方式,如下:
这次还是使用properties元素,不过使用的是url属性,如:
属性配置文件使用建议上面我们说了3中方式,第2中方式是比较常见的做法,建议大家可以使用第二种方式来引入外部资源配置文件。
mybatis中引入mapper的3种方式mapper xml文件是非常重要的,我们写的sql基本上都在里面,使用mybatis开发项目的时候,和mybatis相关的大部分代码就是写sql,基本上都是和mapper xml打交道。 编写好的mapper xml需要让mybatis知道,我们怎么让mybatis知道呢? 可以通过mybatis全局配置文件进行引入,主要有3种方式。 方式1:使用mapper resouce属性注册mapper xml文件目前我们所涉及到的各种例子都是采用的这种方式,使用下面的方法进行引入:
注意事项
方式2:使用mapper class属性注册Mapper接口引入Mapper接口mybatis全局配置文件中引入mapper接口,如下:
这种情况下,mybais会去加载class对应的接口,然后还会去加载和这个接口同一个目录的同名的xml文件。 如:
上面这种写法,mybatis会自动去注册UserMapper接口,还会去查找下面的文件:
大家以后开发项目的时候估计也会看到这种写法,Mapper接口和Mapper xml文件放在同一个包中。 方式3:使用package元素批量注册Mapper接口批量注册Mapper接口上面说2种方式都是一个个注册mapper的,如果我们写了很多mapper,是否能够批量注册呢? mybatis提供了扫描包批量注册的方式,需要在mybatis全局配置文件中加入下面配置:
mybatis会扫描package元素中name属性指定的包及子包中的所有接口,将其当做Mapper 接口进行注册,所以一般我们会创建一个mapper包,里面放Mapper接口和同名的Mapper xml文件。 使用注意方式3会扫描指定包中所有的接口,把这些接口作为Mapper接口进行注册,扫描到的类型只要是接口就会被注册,所以指定的包中通常我们只放Mapper接口,避免存放一些不相干的类或者接口。 关于配置和源码本次讲解到的一些配置都是在mybatis全局配置文件中进行配置的,这些元素配置是有先后顺序的,具体元素是在下面的dtd文件中定义的:
建议大家去看一下这个dtd配置文件。 总结
最后
——我是冢狐,和你一样热爱编程。
|
|