动态SQL

动态SQL

什么是动态SQL

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c3lrKKj1-1591237217563)(随堂笔记.assets/1575768104086.png)]

mybatis提供的解决方案

逻辑标签:if foreach choose when otherwise

格式化标签:where set

if元素的使用:where和set的使用(重点)

if用于判断。有一个属性test,注意:test的取值是一个OGNL表达式(对象导航图语言,像使用EL表示一样来使用,它比EL表达式强大很多倍)。如果test的取值为true,则if标签主体内容执行。如果为false,标签主体内容不执行。

if标签用于查询条件

step0、拷贝User这个类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8jWCTprL-1591237217566)(随堂笔记.assets/1575769192742.png)]

step1、建立dao接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TjEm4PcS-1591237217567)(随堂笔记.assets/1575769238403.png)]

step2、编写映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-41g4DW45-1591237217570)(随堂笔记.assets/1575769780051.png)]

step3、测试即可和观察效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ALIVrs3W-1591237217573)(随堂笔记.assets/1575770001010.png)]

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G0y7BUlo-1591237217575)(随堂笔记.assets/1575770102919.png)]

配合where格式化sql语句

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AXGwumik-1591237217575)(随堂笔记.assets/1575770294694.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wr9jb7RY-1591237217576)(随堂笔记.assets/1575770335813.png)]

if标签用于更新

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0jYHB6r0-1591237217577)(随堂笔记.assets/1575770727254.png)]

step1、dao接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qftNI58z-1591237217578)(随堂笔记.assets/1575770781995.png)]

step2、映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uwc0LnWP-1591237217579)(随堂笔记.assets/1575771095309.png)]

step3、测试及效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W1A0szkU-1591237217580)(随堂笔记.assets/1575771132640.png)]
在这里插入图片描述

配合set格式化sql语句

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WW6x22nV-1591237217581)(随堂笔记.assets/1575771265583.png)]

foreach元素的使用(重点)

foreach作用:循环遍历输出主体内容

遍历的对象:数组、List或Set、Map

mybatis对于不同类型的参数有着默认的固定引用名称:

数组用array

List用list或collection

Set用collection

Map用_parameter

另外可以在接口中使用@Param指定引用名称

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GxnngOuZ-1591237217582)(随堂笔记.assets/1575771464055.png)]

step1、dao接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u5yc62bV-1591237217582)(随堂笔记.assets/1575771602725.png)]

step2、映射文件
在这里插入图片描述

在这里插入图片描述

step3、测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TNfeLShP-1591237217584)(随堂笔记.assets/1575772107445.png)]

choose when otherwise的使用(了解)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wm68hTHA-1591237217585)(随堂笔记.assets/1575773131074.png)]

step1、dao接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GgbH46Hu-1591237217586)(随堂笔记.assets/1575773168175.png)]

step2、映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7UnsNZPB-1591237217587)(随堂笔记.assets/1575773263676.png)]

step3、测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BR71BIlk-1591237217589)(随堂笔记.assets/1575773330657.png)]

多表查询:连接查询

多表的设计(很重要)

一对多的设计

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tfNjeNy5-1591237217590)(随堂笔记.assets/1575774125842.png)]

多对多的设计

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9QE8JQ0B-1591237217590)(随堂笔记.assets/1575774489510.png)]

连接查询的语句(复习)

use ee121;
truncate table t_user;
insert into t_user values(1,'user1','male');
insert into t_user values(2,'user2','female');
insert into t_user values(3,'user3','male');

create table t_account(
	aid int primary key auto_increment,
	number varchar(100),
	balance float(10,2),
	uid int,
	constraint uid_fk1 foreign key(uid) references t_user(uid)
);
insert into t_account values(1,'6666',10000,1);
insert into t_account values(2,'7777',20000,1);
insert into t_account values(3,'8888',10000,2);

create table t_role(
	rid int primary key auto_increment,
	name varchar(100),
	description varchar(255)
);
insert into t_role values(1,'出库员','out');
insert into t_role values(2,'入库员','in');

create table t_user_role(
	uid int,
	rid int,
	primary key(uid,rid),
	constraint uid_fk2 foreign key(uid) references t_user(uid),
	constraint rid_fk1 foreign key(rid) references t_role(rid)
);
insert into t_user_role values(1,1);
insert into t_user_role values(1,2);
insert into t_user_role values(2,1);
insert into t_user_role values(3,2);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
交叉连接(Cross Join):返回笛卡尔积

内连接(Inner Join):返回满足条件的记录

​ 显式内连接:使用INNER JOIN关键字,用ON指定连接条件

​ 隐式内连接:不使用INNER JOIN关键字,使用where指定条件即可

外连接(Outer Join):返回满足连接条件的记录,还返回左或右中剩余的其他记录

​ 左外连接:(Left Outer Join)返回满足连接条件的记录,还返回左表剩余的其他记录

​ 右外连接:(right Outer Join)返回满足连接条件的记录,还返回右表剩余的其他记录

根据多查少(重点)

查询账户时同时查询对应的用户

step0、建立实体类及关联关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2WoNMb8B-1591237217594)(随堂笔记.assets/1575787004692.png)]

step1、编写dao接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zc5ZL6dU-1591237217595)(随堂笔记.assets/1575787186621.png)]

step2、映射文件(重点、难点)

方式一:采用别名进行自动映射

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zjtIC8id-1591237217596)(随堂笔记.assets/1575787520340.png)]

方式二:采用手动映射

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8r6F12oa-1591237217597)(随堂笔记.assets/1575788164922.png)]

方式三:采用专用标签映射关联的对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jnq6FPMv-1591237217597)(随堂笔记.assets/1575788522614.png)]

step3、测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EzWte62e-1591237217598)(随堂笔记.assets/1575787541129.png)]

根据少查多(重点)

查询用户时同时查询账户的信息

step1、建立User和Account的关联关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E7KZxp03-1591237217599)(随堂笔记.assets/1575788908710.png)]

step2、dao接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OcSMpq7C-1591237217600)(随堂笔记.assets/1575788950853.png)]

step3、映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kzTRAiYf-1591237217600)(随堂笔记.assets/1575789281417.png)]

step4、测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GpfHM63f-1591237217603)(随堂笔记.assets/1575789382073.png)]

多对多查询(重点)

查询所有用户,同时查询对应的角色信息。(映射:和一对多差不多,但是SQL语句是不同的)

step1、建立用户和角色的关联关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MPGw17uk-1591237217604)(随堂笔记.assets/1575789615851.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kaF0HgNm-1591237217606)(随堂笔记.assets/1575789645460.png)]

step2、userdao接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EP5QlCmX-1591237217607)(随堂笔记.assets/1575790266752.png)]

step3、映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VW1Jk0NJ-1591237217608)(随堂笔记.assets/1575790239164.png)]

step4、测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6BztragV-1591237217609)(随堂笔记.assets/1575790251618.png)]

多表查询:嵌套查询

什么叫嵌套查询

嵌套查询又称为子查询,分步查询。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8UF1Uq2g-1591237217610)(随堂笔记.assets/1575791544665.png)]

根据多查少(重点)

查询所有账户同时查询对应的用户信息

step1、确定账户和用户存在关联关系

step2、账户的Dao

在这里插入图片描述

step3、账户的映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xrOT4oS6-1591237217611)(随堂笔记.assets/1575791878581.png)]

step4、用户的dao

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1XS5SAwZ-1591237217612)(随堂笔记.assets/1575791913287.png)]

step5、用户的映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g0bo12vz-1591237217613)(随堂笔记.assets/1575791963800.png)]

step6、测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yYI4QZNB-1591237217613)(随堂笔记.assets/1575792124891.png)]

根据少查多(重点)

查询所有用户同时查询对应的账户信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tJG7vWSz-1591237217614)(随堂笔记.assets/1575792372917.png)]

step1、确认用户和账户存在关联关系

step2、UserDao

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lg2dh252-1591237217615)(随堂笔记.assets/1575792327195.png)]

step3、UserDao.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cgt04WS5-1591237217615)(随堂笔记.assets/1575792485589.png)]

step4、AccountDao

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xH12YZ64-1591237217616)(随堂笔记.assets/1575793782026.png)]

step5、AccountDao.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h5ddojIY-1591237217616)(随堂笔记.assets/1575792545096.png)]

step6、测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oKFTRjFG-1591237217617)(随堂笔记.assets/1575792626345.png)]

多对多查询(重点)

查询所有的角色同时查询对应的用户信息(映射相同,SQL语句不同)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8fGOeKaD-1591237217617)(随堂笔记.assets/1575792881312.png)]

step1、确定角色和用户的关联关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pQjWuDVY-1591237217618)(随堂笔记.assets/1575792773072.png)]

step2、RoleDao

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4uPVS68B-1591237217618)(随堂笔记.assets/1575792999077.png)]

step3、RoleDao.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tzTJW0El-1591237217619)(随堂笔记.assets/1575793163719.png)]

step4、UserDao

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FEXhHwHl-1591237217620)(随堂笔记.assets/1575793187846.png)]

step5、UserDao.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LogP0u1m-1591237217621)(随堂笔记.assets/1575793218447.png)]

step6、测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q70naDP3-1591237217622)(随堂笔记.assets/1575793335029.png)]

嵌套查询加载策略

什么叫加载策略

查询用户的时候,关联的账户信息要不要查询出来呢?

​ 一并查询出来了,就是立即加载;用账户信息的时候才查,延迟加载。看需求。

立即加载:(饿汉子式)

延迟加载:(懒汉子式)

加载策略的配置与演示

step1、全局参数配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5cUTNqnZ-1591237217623)(随堂笔记.assets/1575794755803.png)]

step2、测试一下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EwfV0xfL-1591237217624)(随堂笔记.assets/1575794877964.png)]

注意:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XURlmxOl-1591237217624)(随堂笔记.assets/1575794988334.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JEbIYa9T-1591237217625)(随堂笔记.assets/1575795057904.png)]

step3、映射文件中配置加载策略

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iWzolfek-1591237217626)(随堂笔记.assets/1575795200670.png)]

mybatis的缓存:(理解)

缓存的作用

CPU----------内存-----瓶颈-----磁盘(数据库)

对于不怎么经常发生变化的数据,最好使用缓存。目的提高查询效率。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d5yjP0XO-1591237217627)(随堂笔记.assets/1575795626997.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HvDaWja7-1591237217627)(随堂笔记.assets/1575795971735.png)]

演示一级缓存

SqlSession是一级缓存。一般一个线程对应一个SqlSession。此缓存中的内容我们无法更改的。

如果执行了手动刷新、增删改操作,会自动清空一级缓存。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ozf02uYG-1591237217628)(随堂笔记.assets/1575796229863.png)]

演示二级缓存:应用级别

映射文件级别的缓存,二级缓存的生命周期和Sql’Sessionfactory一致的。

step1、全局开关
在这里插入图片描述

step2、需要在映射文件中开启

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A4QgLaAi-1591237217631)(随堂笔记.assets/1575796395952.png)]

注意:mybatis采用序列化(实体类要实现Serializable接口)实例的方式,将对象的数据保存到二级缓存中。

step3、验证二级缓存

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D5ffUYKT-1591237217632)(随堂笔记.assets/1575796730692.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YlVYIY3O-1591237217632)(随堂笔记.assets/1575796804368.png)]

基于注解的mybaits的配置

@Select

@Insert

@Update

@Delete

@Results

@Result

@Many

演示二级缓存:应用级别

映射文件级别的缓存,二级缓存的生命周期和Sql’Sessionfactory一致的。

step1、全局开关

[外链图片转存中…(img-PPQ4JnWN-1591237217630)]

step2、需要在映射文件中开启

[外链图片转存中…(img-A4QgLaAi-1591237217631)]

注意:mybatis采用序列化(实体类要实现Serializable接口)实例的方式,将对象的数据保存到二级缓存中。

step3、验证二级缓存

[外链图片转存中…(img-D5ffUYKT-1591237217632)]

[外链图片转存中…(img-YlVYIY3O-1591237217632)]

基于注解的mybaits的配置

@Select

@Insert

@Update

@Delete

@Results

@Result

@Many

@One

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值