这里主要是承接上一篇文章https://blog.youkuaiyun.com/kunfd/article/details/103214106
主要是从下面几个方面进行讲述 1. 是针对于多表查询(1对1,1对多,多对多) 2.查询缓存的理解
1.多表查询
1.1.一对一映射
a.在实体类上,需要在实体类A中嵌入实体类B
b.在配置文件中使用<association>
相关文件配置如下
SQL语句
SELECT
orders.`id`,
orders.`user_id`,
orders.`number`,
user.`username`,
user.`sex`
FROM
orders,
USER
WHERE orders.`user_id` = user.`id`
从截图来看,大家主要记住的就是,其实配置文件和对应的实体类本质上是1,1对应的关系的。
1.2.一对多映射
在“一”po类中添加“多”的po类
注意,这里的extends继承的是 1对1中的部分关系
下面是SQL语句
SELECT
orders.`id`,
orders.`user_id`,
orders.`number`,
user.`username`,
user.`sex`,
orderdetail.`id` detailId,
orderdetail.`items_id`,
orderdetail.`items_num`
FROM
orders,
USER,
orderdetail
WHERE orders.`user_id` = user.`id`
AND orders.`id` = orderdetail.`orders_id`
1.3.多对多
例子中举的是传递以后形成的多对多关系
二.缓存知识
1.一级缓存:指的就是sqlsession,在sqlsession中有一个数据区域,是map结构,这个区域就是一级缓存区域。一级缓存中的key是由sql语句、条件、statement等信息组成一个唯一值。一级缓存中的value,就是查询出的结果对象。默认开启
2.二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。需要手工开启
对于上图,如果没有红框里面的代码的话,第一次查询会去数据库查询,第二次查询的话只会从缓存中获取已经查询过的数据。不过加了红框中的内容以后,第二次查询也需要进入到数据库查询,因为数据库的数据发生了变化。(这里要区别于一级缓存,这用的是不同的Mapper对象,而一级缓存使用的是同一个Mapper对象)