关于MyBatis的小结(第二阶段)

这里主要是承接上一篇文章https://blog.csdn.net/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对象)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值