动态sql有什么作用什么时候需要使用到动态sql_039-MyBatis类型定义别名、事务管理、接口绑定、动态SQL、缓存机制...

1. typeAliases标签配置别名

(1) typeAliases标签有什么作用? 如何使用?

给类型起别名

(2) 如何在MyBatis中为类型定义别名?

43878828db42c41c9df5d3bbf8a4223b.png

2db5f4179099cc476a405ec527ed6fbd.png

0e9cb9c1cced35941cdd0283080bde68.png

2. 配置parameterType属性进行参数的传递

配置parameterType属性进行参数的传递

c3fe876f933c403cb0c09a3a235a959e.png

9af66bdbeb0bf56912c9bc5a275621a2.png

ff2bbe2ebc8c278f5bf043035706deb6.png

d74767ca03154e5a14bcf4a40a384b0f.png

048a38071d4ff9983a046f35fa049b61.png

3. MyBatis事务管理_工具类提取_实现新增操作

(1) MyBatis中如何管理事务?

①事务是数据库操作的最小单元, 有 ACID 的特性. 应该证一个事务的的 SQL 语句要么同时成功, 要么都不成功.

②MyBatis 中配置了事务管理器, type 属性设置为 JDBC. 表示 MyBatis 采用和原生 JDBC 相同的事务管理机制.

③在 MyBatis 执行的开始时,将自动提交功能关闭了.所以, 在执行 DML 操作时, 需要手动提交事务.

(2) 为什么增删改标签没有resultType属性?

由于DML 操作的返回值都是 int 类型, 所以, 不需要定义resultType 属性.

4. MyBatis接口绑定方案

(1) 什么是接口绑定?

MyBatis 中, 提供了一套接口绑定方案. 程序员可以提供一个 接 口 , 然 后 提 供 对 应 接 口 的 一 个 mapper.xml 文 件 .MyBatis 会自动将接口和 xml 文件进行绑定. 实际上就是MyBatis 会根据接口和对应的 xml 文件创建接口的实现类.换言之, 就是可以得到接口类型的对象, 方便方法的调用.

(2) 接口绑定的实现需要满足那些条件?

①xml 文件名要和接口名一致

②namespace 属性必须为接口的全限定路径

③id 属性必须和接口对应的方法名一致

定义接口

fe16417b24eb7e431ff2185f401bbafa.png

编写对应接口的映射文件

7057dd8ecba767962c27ab7cf3d0b357.png

在核心配置文件中扫描接口

a) 扫描单个接口, 可以使用 mapper 标签的 class 属

6080929b531c9d2a11cf4f9ddb634e7e.png

b) 当扫描多个接口时,为简化配置,可以使用 package 标签表示扫描对应包下的所有接口.

7d0e75baa7c590cc71360711fe7fb71b.png

在使用时, 可以通过 SqlSession 对象的 getMapper 方法, 得到接口的代理对象, 从而可以调用定义好的方法

3c059b0952f1717a0d26e38293f2e001.png

5. 接口绑定解决多参数传递问题_@Param注解的使用

(1) MyBatis中#{}和${}的区别是什么?

#{} 和 ${} 在预编译中的处理是不一样的。#{} 在预处理时,会把参数部分用一个占位符 ? 代替,而${}直接已字符串代替;${}方式会引发SQL注入的问题、同时也会影响SQL语句的预编译

(2) @Param注解有什么作用?

给参数命名

6. MyBatis的动态SQL概述

(1) 什么是动态SQL? 有什么作用?

条件不同,生成的SQL语句也会不同。可以简化代码

(2) 动态SQL常用的标签有哪些?

<if>/<choose(when,otherwise)>/<trim(where,set)>/<foreach>

7. 动态SQL_if_where

(1) if标签的作用是什么? 怎么使用?

用于进行条件判断, test 属性用于指定判断条件. 为了拼接条件, 在 SQL 语句后强行添加 1=1 的恒成立条件.

47abeda8e663c70de7c6b51abd02d5d9.png

(2) where标签的作用是什么? 怎么使用?

用于管理 where 子句. 有如下功能:

①如果没有条件, 不会生成 where 关键字

②如果有条件, 会自动添加 where 关键字

③如果第一个条件中有 and, 去除之

f5344e4d47a1f83d408b3283a8b52afa.png

8. 动态SQL_choose_when_otherwise_set

(1) choose/when/otherwise什么时候使用?

这是一套标签, 功能类似于 switch...case..

47c46c24c18a3065eb90cdad84c07e70.png

(2) set标签有什么作用?

用于维护 update 语句中的 set 子句. 功能如下:

①满足条件时, 会自动添加 set 关键字

②会去除 set 子句中多余的逗号

③不满足条件时, 不会生成 set 关键字

1b21531155a3c0c9fa7488e3071cef9e.png

9. 动态SQL_trim_bind

(1) trim标签的作用是什么? 如何使用?

用于在前后添加或删除一些内容

①prefix, 在前面添加内容

②prefixOverrides, 从前面去除内c)suffix, 向后面添加内容

③suffixOverrides, 从后面去除内容

0a34beb1c84190a22e52f1c2927fa19a.png

9c5d1c56823a3733e9975340bd72e6e3.png

(2) bind标签怎么使用? 有什么作用?

用于对数据进行再加工, 用于模糊查询

bd8ede5bea383978a46bbaa9cbfb4055.png

5d79e22f8650583ded9f18c0c43cda70.png

10. 动态SQL_foreach_sql_include

(1) foreach标签的作用是什么? 如何使用?

用于在 SQL 语句中遍历集合参数, 在 in 查询中使用

①collection: 待遍历的集合

②open: 设置开始符号

③item: 迭代变量

④separator: 项目分隔符

⑤close: 设置结束符号

338bcca03f0ab0da36191129ca08ee73.png

87bec1ecaf169d63b6a4cdf10fffd2ae.png

(2) sql/include标签的作用是什么?

<sql>用于提取 SQL 语句, <include>用于引用 SQL 语句

eb7f923c1b88460ee6896fe5fe9f9d66.png

f59620067260f78a8f2e255976dc8252.png

11. MyBatis的缓存机制

(1) 什么是缓存? 有什么好处?

①缓存用于提高查询的效率.

②MyBatis的缓存是使用SQL标签的ID作为缓存的唯一标的. 执行相同的标签可以使用缓存. 不同的标签不能使用缓存.

③MyBatis 中有两种缓存机制.

(2) MyBatis的缓存有哪些分类? 分别怎么实现?

①一级缓存

a)默认开启. 线程级别的缓存, SqlSession 的缓存

b)在一个 SqlSession 生命周期中有效. SqlSession 关闭,缓存清空.

②二级缓存

a)进程级别的缓存, SqlSessionFactory 的缓存

b)在一个 SqlSessionFactory 生命周期中有效.可以在多个SqlSession 生命中期中共享.

c)默认关闭, 需要使用的时候, 要为某个命名空间开启二级缓存(在 mapper.xml 中配置<cache>).

d6d95cd0b3e833ee24532adc400b4302.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值