MyBatis配置
三,配置属性文件
1.Mybatis可以将数据库配置单独放在一个properties文件中。如创建一个db.properties文件,内容如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=123
接下来再配置文件中,添加properties标签,使用属性resource引入属性文件。
在dataSourse标签中使用${}进行访问。
实体类定义别名
2.在编写SQL的时候常常需要使用到完成的JavaBean名称作
为SQL语句的数据类型,这时候可以使用typeAliases标签,
为实体类起别名,简化代码。
<typeAliases>
<typeAlias type=
"test3.Student" alias="_Student"/>
</typeAliases>
使用这个配置,_Student就能在任何地方替代
test3.Student使用,对于普通的Java类型,有许多内建的
类型别名。
四,使用LOG4J打印日志
3.想要明确的看到执行的SQL语句,可以添加log4j.jar,并且配置文件显示日志。
五,多表关联查询
1.一对一关联时,使用association标签
association元素用来处理“一对一”的关系。需要指定映射的Java实体类的属性,属性的javaType(通常MyBatis 自己会识别)。对应的数据库表的列名称。
2.一对多关联时,使用collection标签
collection元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList)、表中对象的类型ofType(Java实体类)、对应的数据库表的列名称。
六,Mybatis缓存
什么是查询缓存
Mybatis的一级缓存是指SqlSession。一级缓存的作用域是一个SqlSession。
Mybatis默认开启一级缓存。
在同一个SqlSession中,执行相同的查询SQL,第一次会去查询数据库,并写到
缓存中;第二次直接从缓存中取。当执行SQL时两次查询中间发生了增删改操作,
则SqlSession的缓存清空。
Mybatis的二级缓存是指mapper映射文件。二级缓存的作用域是同一个namespace
下的mapper映射文件内容,多个SqlSession共享。Mybatis需要手动设置启动二
级缓存。
在同一个namespace下的mapper文件中,执行相同的查询SQL,第一次会去查询数
据库,并写到缓存中;第二次直接从缓存中取。当执行SQL时两次查询中间发生
了增删改操作,则二级缓存清空。
区别:
一级缓存和二级缓存是MyBatis中用于提高查询性能的两种缓存机制。它们之间的区别主要在于作用范围、生命周期和失效机制。
### 一级缓存
- **作用范围:** 一级缓存是SqlSession级别的缓存,即在同一个SqlSession中执行的查询会共享同一个缓存。
- **生命周期:** 一级缓存生命周期与SqlSession相同,当SqlSession关闭或提交时,一级缓存被清空。
- **失效机制:** 任何对数据库的修改操作(插入、更新、删除)都会导致一级缓存失效,需要重新查询获取最新数据。
### 二级缓存
- **作用范围:** 二级缓存是Mapper级别的缓存,不同的SqlSession可以共享同一个Mapper的二级缓存。
- **生命周期:** 二级缓存的生命周期与应用程序的整个生命周期相关,当整个应用关闭时,二级缓存才会被清空。
- **失效机制:** 与一级缓存不同,二级缓存的失效机制更加灵活,可以通过配置缓存刷新策略或手动刷新来控制缓存的更新。
### 总结知识点:
- **一级缓存**是SqlSession级别的缓存,生命周期短,作用范围有限;**二级缓存**是Mapper级别的缓存,生命周期长,可以跨SqlSession共享数据。
- 一级缓存适用于短暂的局部性查询,可以提高查询效率;二级缓存适用于全局性共享查询数据,可以减少数据库访问压力。
- 一级缓存的控制相对简单,失效机制固定;二级缓存的失效机制更加灵活,但需要慎重处理缓存同步的问题。
一级缓存原理示意图:
一级缓存区域是根据SqlSession为单位划分的。
每次查询会先去缓存中找,如果找不到,再去数据库查询,然后把结果写
到缓存中。Mybatis的内部缓存使用一个HashMap,key为
hashcode+statementId+sql语句。Value为查询出来的结果集映射成的
java对象。
SqlSession执行insert、update、delete等操作commit后会清空该
SQLSession缓存。
二级缓存原理示意图:
二级缓存是mapper级别的。Mybatis默认是没有开启二级缓存。
第一次调用mapper下的SQL去查询用户信息。查询到的信息会存到该mapper
对应的二级缓存区域内。
第二次调用相同namespace下的mapper映射文件中相同的SQL去查询用户信
息。会去对应的二级缓存内取结果。
如果调用相同namespace下的mapper映射文件中的增删改SQL,并执行了
commit操作。此时会清空该namespace下的二级缓存。