mybatis(2)

本人笔记写着玩

分页查询插件

(1)添加依赖
在这里插入图片描述
(2)配置核心文件
在这里插入图片描述
(3)分页查询
@testpubli void test(){sqlsessionfactory.openSession()}

多表联查

:可以化简成一对多,企业中就是这么做得,没有必要写中间表的实体类以及把中间表的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


SELECT p.*,c.* FROM person p,card c WHERE p.id=c.per_fk AND p.name=#{name}

6、编写 mybatis-config.xml

<?xml version=”1.0” encoding=”UTF-8” ?><!DOCTYPE configuration

PUBLIC “-//mybatis.org//DTD Config 3.0//EN”
“http://mybatis.org/dtd/mybatis-3-config.dtd”>















7、编码测试
多对多

SELECT c.*,o.*,od.*,i.* FROM customer c,orders o,orderdetail od,items i WHERE c.cid=o.cus_fk and o.oid=od.orders_id AND od.items_id=i.itemid and c.cid=#{cid} **

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了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值