查询缓存
mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。
mybaits提供一级缓存,和二级缓存。
一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。
mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。
mybaits提供一级缓存,和二级缓存。
一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。
查询主表是:用户表
关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表:orders、orderdetail、items
1 | SELECT |
resultMap可以实现高级映射(使用association
、collection
实现一对一及一对多映射),association
、collection
具备延迟加载功能。
延迟加载:先从单表查询、需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。
需求:
如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息。把对用户信息的按需去查询就是延迟加载。
确定主查询表:订单表
确定关联查询表:订单明细表
在一对一查询基础上添加订单明细表关联即可。
1 | SELECT |
分模块对每张表记录的内容进行熟悉,相当于你学习系统需求(功能)的过程。
非空字段、外键字段
外键关系
在分析表与表之间的业务关系时一定要建立在某个业务意义基础上去分析。
MyBatis Mapper 配置 resultType 与 resultMap
输出映射有两种方式
resultType
resultMap
resultType
进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。使用两种方式(resultType和resultMap)实现一对一查询,查询订单信息,关联查询创建订单的用户信息
确定查询的主表:订单表
确定查询的关联表:用户表
关联查询使用内连接?还是外连接?
由于orders表中有一个外键(user_id),通过外键关联查询用户表只能查询出一条记录,可以使用内连接。
1 | SELECT |
MyBatis Mapper 动态 SQL 配置 if, sql 与 foreach
mybatis核心,对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。
1 | <!-- 用户信息综合查询 |
MyBatis Mapper 配置 parameterType
通过parameterType指定输入参数的类型,类型可以是
1 | package com.iot.mybatis.po; |
1 | <!-- 添加用户 |