Mybatis 连接池&多表查询&延迟加载&缓存技术

mybatis 连接池

连接池就是用于存储连接的一个容器,减少我们获取数据库连接所消耗的时间,该集合必须是线程安全的,保证两个线程不会拿到同一个连接。
SqlMapConfig.xml文件中的配置:
在这里插入图片描述
dataSource type取值类型:

  1. POOLED:从池中获取连接,用完还给池
  2. UNPOOLED:每次都创建连接,用完关闭

mybatis 多表查询

一对一查询(建立实体类关系)

例子:一个员工有多个账户
	两个对象:Employee 和 Account
	两个表:einfo 和 account

Account对象中建立 对Employee对象的引用
在这里插入图片描述
AccountMapper.xml文件中定义,映射resultMap。

property:映射到对象中的变量名
columnsql语句查询得到的列名
因为两个表都有id 所以对其中一个起别名

<association>:colunm是account表中外键的名称,对应account对象中的 Employee对象的变量名。
javaType:设定返回的对象类型

在这里插入图片描述

一对多关系

Employee类中建立List<Account>链表来存储查询到的多个账户信息。
在这里插入图片描述
配置文件EmployeeMapper.xml中,一对多关联关系

使用<collection>标签
property:类对象中,链表的变量名
ofType:链表中的对象类型,全限定类名

在这里插入图片描述

mybatis 延迟加载

案例:

  • 在查询用户时,用户在账户信息应该是什么时候用,什么时候查询。

  • 在查询账户时,应该是账户所属用户信息随着账户查询时一起出现。

加载类型:

  • 延迟加载:真正在使用的时候才发起查询。一对多,多对多的情况,查出来是个集合一般延迟加载
  • 立即加载:不管用不用,调用时就发起查询。多对一,一对一一般查出来时单个信息,立即加载。

mybatis 缓存技术

一级缓存

同一个sqlsession对象下,使用同一个一级缓存。
在这里插入图片描述
连续调用两次查询方法,实际只查询一次,第二次调用缓存并且两次对象相同。
在这里插入图片描述
当调用SqlSession的修改,添加,删除,commit(),close()等方法时,就会清空一级缓存。

清除缓存的方法
sqlSession.clearCache();

在这里插入图片描述
可以看出两次查询结果不是同一个对象,没有调用缓存,并且使用了两次查询语句
在这里插入图片描述

二级缓存

这是指,mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFacotry对象创建的SqlSession共享缓存。
使用步骤:

  1. Mybatis框架配置SqlMapConfig.xml,默认已经打开为true
    在这里插入图片描述

  2. 当前映射文件支持二级缓存EmployeeMapper.xml
    在这里插入图片描述

  3. 当前操作支持二级缓存select操作中修改
    在这里插入图片描述

结果如下图:
在这里插入图片描述
可以看出第二次查询没有使用查询语句,直接从缓存提取。但是两次对象结果不同是因为:二级缓存中存储的不是对象,而是具体的数据,取出时生成不同的对象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值