本人笔记写着玩
分页查询插件
(1)添加依赖
(2)配置核心文件
(3)分页查询
多表联查
:可以化简成一对多,企业中就是这么做得,没有必要写中间表的实体类以及把中间表的list集合当作主表的属性。
多表联合查询
一对一
一对一操作:通过一方可以关联查询出另外一方的关系数据
案例中是通过 Person 可以查询当前 Person 关联的唯一的证件 Card 的数据 , 在 card 表中我们设定了
一个外键字段 per_fk 关联 Person 表中的主键 id 字段
1、创建数据库表
CREATE TABLE person
(
id
int(11) NOT NULL AUTO_INCREMENT,
name
varchar(32) DEFAULT NULL,
PRIMARY KEY (id
)
)
CREATE TABLE card
(
id
int(11) NOT NULL AUTO_INCREMENT,
name
varchar(32) DEFAULT NULL,
num
varchar(32) DEFAULT NULL,
per_fk
int(11) DEFAULT NULL,
PRIMARY KEY (id
)
)2、创建类 Person
public class Person implements Serializable {
private int id;
private String name;
private Card card ;
3、创建 Person 的关联类型 Card
public class Card implements Serializable {
private int id;
private String name;
private String num;
4、创建 PersonMapper 接口定义方法
public Person getInfoByName( @Param(“name”) String name);
5、创建文件 PersonMapper.xml
6、编写 mybatis-config.xml
<?xml version=”1.0” encoding=”UTF-8” ?><!DOCTYPE configurationPUBLIC “-//mybatis.org//DTD Config 3.0//EN”
“http://mybatis.org/dtd/mybatis-3-config.dtd”>
7、编码测试
多对多
mybatis嵌套查询
**
什么是嵌套查询
嵌套查询就是将原来多表查询中的联合查询语句拆成单个表的查询,再使用 MyBatis 的语法嵌套在一起。
(一)一对一的嵌套
需求:查询一个订单,与此同时查询出该订单所属的用户
OrderMapper.xml 映射
CustomerMapper.xml 映射
SELECT * FROM `customer` where cid = #{cid} SELECT * FROM orders一对多的嵌套
查询一个用户,与此同时查询出该用户具有的订单
CustomerMapper.xml
SELECT c.*FROM customer c WHERE c.name=#{name};
OrdersMapper.xml 的映射文件
select * from orders where cus_fk=#{cusid}
动态sql
由mybaits提供一系列的动态标签,实现根据不同的需求拼接或者解析成所需要的sql语句。
Mybaits中的动态标签:foreach,where if,choose when,set if,trim,bind
foreach标签
一般用来遍历输入参数中的集合或者数组,通常要拼接的sql语句中含有in限定条件时会用到该标签。
delete from user where id in(1,3,88) 1,3,88------集合或者数组【1,3,5】
select * from user where id in(1,33,66)
案例
1输入参数是id的集合
根据传递的id的集合或者数组 ,查询对应的用户信息。
2.输入参数是id的数组
3.输入参数是含有id集合或者数组属性的对象
where if标签
一般在后台实现对列表数据进行条件检索时会用到。
choose when标签
用法可以参考where if,多个判断条件时最多只有一个条件会被执行。其他条件不会执行了。
set if标签
根据不同的条件判断,确定要更新的字段。
例如更新用户的姓名和性别,当前姓名不为空更新姓名,性别不为空更新性别
trim标签 不常用
用来通过四个属性整理sql语句
prefix:设置前缀,在执行trim里面的内容之前拼接的字符串
suffix:设置后缀,在执行trim里面的内容之后拼接的字符串
prefixOverrides:忽略前缀
suffixOverrides:忽略后缀
bind标签
根据输入的参数来拼接一个新的字符
延迟加载
延迟加载:在采用分步的关系映射中,先加载主信息表的内容,在需要关联信息的时候,再加载关联信息的内容,即为延迟加载。
延迟加载的设置
1.在全局配置文件中启用延迟加载如下即可
Mybatis的缓存机制
缓存概述
缓存即存储数据到内存中。在一般开发过程中,会将一些频繁用来查询的数据放在缓存中,可以降低数据库的压力,同时可以提高程序的响应速度,所以使用缓存也是一种相对优化的手段。
一级缓存介绍
是一种SqlSession级别的缓存。即每个SqlSession(会话对象)对一个一级缓存区域,一级缓存是不可以跨SqlSession访问的。
一级缓存数据的存放:
1.默认每次查询时都会从对应会话对应的一级缓存区域取数据
2.但是第一次查询需要的数据时,对应的一级缓存区域是没有数据的,所以第一次从数据库查到数据,然后写入到一级缓存;
3.当再进行访问相同的数据时,就可以从一级缓存区域获取到数据。
一级缓存的测试
一级缓存默认是Mybatis框架提供,且一直开启,所以一级缓存是无需做任何配置的。
一级缓存的清除
1.执行增删改或者直接提交事务后,一级缓存会被清除掉;
2.调用SqlSession中的clearCache方法也会清除对应的一级缓存
Mybatis的二级缓存
二级缓存介绍
二级缓存是namespace级别的,即一个namespace对应一个二级缓存区域。二级缓存是可以跨SqlSession访问的。
二级缓存区域数据存放
1.在对应的mapper中填写如下标签
注意 缓存的对象要实例化
二级缓存的清除
在执行增删改提交数据后,二级缓存同样会被清除掉。
测试结果
映射文件标签中和缓存相关的属性
1.在映射文件中增删改的标签的默认flushCache=”true”,所以在执行了增删改以后一级二级缓存都会被清除掉。反之如果flushCache=”false”, 在执行了增删改以后一级二级缓存都不会被清除掉。查询标签中默认flushCache=”false”
2.在映射文件中查询标签中默认useCache=”true”,若要指定某一条sql语句的结果不被缓存,useCache=”false”。
Mybatis全局配置文件
1.全局配置文件中,所有的标签都是有序的。
2. properties标签
可以用来引入外部的properties文件
3typeAliases标签
mappers标签
Mybatis逆向工程 就是一种会创建就ok了