晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签

1. properties标签

  1. mybatis 可以使用properties标签来引入外部properties配置文件的内容。properties标签下有两个属性,一个属性是“url”,用来引入网络路径或者磁盘路径下的资源;另一个属性是“resource”,用来引入类路径下的资源。
  举例说明,将第(一)篇文章中的项目“ctrl+c”,“ctrl+v”后,弹出如下窗口。将project name改为Mybatis-config。
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第1张图片
  在conf目录下新建dbconfig.properties文件,文件写入如下内容:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useSSL=false
jdbc.username=root
jdbc.password=root

注意:在properties配置文件中,jdbc.url参数中多个参数的连接符不再像配全局配置文件中那样用&代替&,而是直接用&,如下所示
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第2张图片
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第3张图片
即把原来全局配置文件中的数据库连接池中的参数改写到properties文件中,原先mybatis全局配置文件中内容如下:




	
		
			
			
				
				
				
				
			
		
	
	
	
		
	

通过在配置文件中使用properties标签,并将数据库连接池的参数写到properties文件中后,其中的代码变成了下述这样,即在properties标签的resource属性设置为properties的文件名(前提是该文件在该项目的路径下,如果不在就要写绝对路径…/…/…):
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第4张图片

2. typeAliases标签

  typeAliases(别名处理器)是为了给Java类型起一个别名,以避免每次都要写很长的类名。在mybatis的全局配置文件中,为JavaBean类型起别名,如下所示:




	
	
	
		
	
	
	
		
			
			
				
				
				
				
			
		
	
	 
	
		
	

晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第5张图片
  typeAliases下的typeAlias标签有两个属性,一个type,一个alias,如果只给type赋值,这种方式默认给com.mybatis.beans.Employee起的别名为类名的小写employee,这时需要在EmployeeMapper.xml文件中将resultType的值改为employee,如下所示:




	

晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第6张图片
  当然如果加上alias,就是自己随意命名了。如下:
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第7张图片
  此时EmployeeMapper.xml文件中resultType也要作相应的改动,如下:
在这里插入图片描述
  上述方式只能为一个JavaBean类取别名,如果这个包下面有很多JavaBean,就要用到typeAliases下的package标签为包下的JavaBean类批量取别名,package下的name属性值为包名。如下所示:




	
	
	
		
	
	
	
		
			
			
				
				
				
				
			
		
	
	 
	
		
	

晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第8张图片
  将com.mybatis.beans包下的所有JavaBean类,全部起别名为默认别名,即类名的小写。这时需要更改EmployeeMapper.xml中的resultType值为employee,如下所示,由于本项目com.mybatis.beans包下只有一个JavaBean类–Employee,所以相当于只给一个JavaBean起了别名employee。
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第9张图片
  package批量取别名中如果想要为某个JavaBean单独取别名,可以采用注解的方式,即在某个Javabean类的签名上写@Alias(“别名名称”),如下所示
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第10张图片
  这样使用时以注解中取的别名为准,而不再使用批量取别名中的命名。所以在EmployeeMapper.xml文件中resultType值应该改为“emp”,如果再mybatis全局配置文件中给某个类单独取了别名,则以该别名为准,而不再使用注解中的别名(即如果采用了typeAlias给某个类单独取了别名,而该类上又用了注解取了另外一个别名,则以前者为准,注解名不再生效)。mybatis已经为常见的Java类型内建了相应的别名,这些已经建好的别名是不区分大小写的,所以需要注意的是不要再用内建好的别名(大小写都不行)作为JavaBean的别名,否则必报错。如下表格:

别名 Java的常见类型
_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
bigdecimal BigDecimal
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
colletion Collection
iterator Iterator

3. environments标签

  mybatis全局配置文件可以配置多种环境,即在environments标签下配置多个environment,但environment下必须有transactionManager和dataSource两个标签。
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第11张图片
  environment中的id代表当前环境的唯一标识,比如如果有测试环境的数据库和正式环境的数据库,则可以通过设置environments中的default属性来决定和哪个数据库进行交互,如下图:
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第12张图片
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第13张图片
这样就可以实现快速切换。
  transactionManager为事务管理器,而其中的type属性为事务管理器的类型,可以有两个取值,JDBC和MANAGED,也可以自定义事物管理器类型。
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第14张图片
  dataSource为数据源,数据源中的type属性有UNPOOLED、POOLED、JNDI三种类型,也可以自定义。UNPOOLED为不使用连接池,每一次CRUD操作,都会从数据库中拿一下新的连接,而不使用连接池。POOLED则使用了连接池。
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第15张图片

4. databaseIdProvider标签

  databaseIdProvider标签用来支持多数据库厂商,下述是固定写法,作用是得到数据库厂商标识,mybatis就能根据不同的数据库厂商标识执行不同的sql,比如常见的标识MySQL,Oracle,SQL Server等
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第16张图片
  我们可以在databaseIdProvider标签里给不同的数据库厂商起别名,如下所示:
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第17张图片
  这个时候需要转到SQL映射文件中,比如本项目中的EmployeeMapper.xml,如下所示:
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第18张图片
  select标签下有databaseId属性,将其赋值为“mysql”,则是告诉这条sql语句只在MySQL数据库中使用。使用多个数据库厂商的情况下,Mybatis-config.xml、dbconfig.properties、EmployeeMapper.xml代码如下,使用这个标签后可提高mybatis数据库的移植性。在全局配置文件中配置两个环境,一个是MySQL的环境,一个是oracle的环境,在sql映射文件中写不同数据库下的操作语句,当全局配置文件中选择MySQL时(即在environments中的default属性选择),就会在sql映射文件中找MySQL的语句。





	
	
	
		
	
	
	
	
		
			
			
				
				
				
				
			
		
		
			
			
				
				
				
				
			
		
	
	
	
	
		
		
		
		
	
	 
	
		
	

dbconfig.properties内容(使用时删掉这句)
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useSSL=false
jdbc.username=root
jdbc.password=root

orcl.driver=oracle.jdbc.OracleDriver
orcl.url=jdbc:oracle:thin:@localhost:1521:orcl
orcl.username=scott
orcl.password=123456




	
	

5. mappers标签

  把sql的映射文件使用mapper标签注册到全局配置文件中,mapper有resource、url、class三种属性。resource用来引用类路径下的sql映射文件,url用来引用网络路径下或者磁盘下的映射文件。上述两种方式都是用来注册配置文件的。class用来引用注册接口,如果使用注册接口方式,则sql映射文件必须和接口同名,并且放在与接口同一目录下,举例说明,原先使用注册配置文件方式目录如下,全局配置文件中mapper标签配置如下:
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第19张图片
在这里插入图片描述
  使用注册接口方式后目录如下,mapper标签中的内容变成了下面这样,其中class属性值为接口的全类名。
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第20张图片
在这里插入图片描述
  mybatis还允许以没有sql映射文件,采用注解的方式,将所有的sql语句写在注解里。如下例子,在com.mybatis.Dao包下新建EmployeeMapperAnnotation.java接口,内容如下;
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第21张图片
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第22张图片
  将select标签写在该接口的注解里,而不使用sql映射文件,修改MybatisTest.java中的类变为EmployeeMapperAnnotation,如下所示:
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第23张图片
  全局配置文件中的mapper标签配置成EmployeeMapperAnnotation接口的全类名,如下所示:
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第24张图片
  运行之后发现也没问题。这种方式是不推荐的,因为sql语句和代码分离也是mybatis的一个初衷,直接把sql语句写在接口方法的签名上面,是违背这个初衷的,还是建议大家写在sql映射文件里。
  运行之后发现也没问题。这种方式是不推荐的,因为sql语句和代码分离也是mybatis的一个初衷,直接把sql语句写在接口方法的签名上面,是违背这个初衷的,还是建议大家写在sql映射文件里。当然也可以采用混合的方式(有的接口配映射文件,有的接口写注解)。
  mappers(复数)标签下面还有一个package标签,用来批量注册。package的name属性需要写接口的包名,如果接口采用了注解的方式自然可以找到,如果采用的是配置文件,则必须把配置文件和接口名写为一致并放在同一个目录下,这样才能找得到,如下所示:
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第25张图片
  全局配置文件mappers标签下的内容如下图:
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第26张图片
  直接先测试注解方式的接口发现没问题,紧接着测试采用配置文件的接口,只需把测试类中的类名改为EmployeeMapper即可,发现也没问题。可以在conf目录下建com.mybatis.Dao包,专门用来放sql的配置文件,防止接口和映射文件过多导致混乱,这样既保障了接口和配置文件在一个包中(事实上确实在一个包内),在文件分类上又显得很简洁,视觉效果在两个位置,其实在一个包内,如下图,运行起来没问题
晋南讲堂之持久层框架Mybatis—(三)全局配置文件常用标签_第27张图片

6. 常用标签的顺序问题

  常用的标签有如下顺序:
(properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,
objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)
全局配置文件必须严格按照这样的顺序进行配置,某些标签可以没有,但必须保障先后顺序是否正确,否则报错。

你可能感兴趣的:(ORM框架---Mybatis)