Mybatis的第三章动态sql总结

我们来讲一下为什么要使用Mybatis的动态sql ?

*因为动态sql之所以是Mybatis 的强大特性是因为我们在使用JDBC操作数据库的时候如果查询特别的多,将条件串联成sql字符串是一件很痛苦的事,而且也并不能省略逗号,而Mybatis的动态sql就为我们解决了这些麻烦,这个动态sql是基于OGNL的表达式,也可以方便我们在sql语句中实现某些逻辑。
*用于实现动态sql的核心标签如下几种:
1. if(属性:“test”用来判断条件)
利用if我们可以实现简单的条件选择可以和where标签配合使用
具体mapper.xml配置文件中的代码实现如下:

在这里插入图片描述
当然也可以配合if+trim使用:
在这里插入图片描述
我用的是List集合的dao接口查询
在这里插入图片描述
然后简单的在main方法里进行实现:
在这里插入图片描述

  1. set(没有属性 ,一般用在更新语句update上,解决动态更新语句,也可以和trim+if搭配使用)
    直接上mapper.xml配置文件代码帮助理解:
    在这里插入图片描述
    在dao接口这里要注意你使用的update更新语句,所以接口的返回类型一定得是int类型的返回值用来判断数据库中受影响的行数,参考如下:
    在这里插入图片描述
    用main方法的简单实现:
    在这里插入图片描述

  2. foreach
    基本属性:
    在mapper.xml配置文件中
    item(表示集合的每个元素进行迭代时的别名)自我理解也就是说dao接口方法里的参数,
    index(指定一个名称,用于表示在迭代过程中,每次迭代到的位置),
    open(表示该语句以什么时候开始)既然是in条件语句,所以必然是"(“开始,
    separator(表示在每次进行迭代之间以什么符号作为分隔符)既然是in条件语句必然是是以”,"逗号作为分隔符
    close(表示该语句以什么结束)所以必然是以“)”结束。
    collection(他是最容易出错的属性,需格外注意该属性必须指定,不同情况下该属性的值是不一样的,总有三种情况)
    1)如入参为单参数且参数类型是一个List集合的时候,collection的属性值为list。
    2)如若入参为单参数且参数类型是一个数组的时候,collection的属性值为array(此处传入参数Integer[] rolelds 为数组类型,故此处collection的属性设置为“array”)
    3)如若入参为多参数,就需要把他们封装为一个Map进行处理
    select中返回的是一个resultMap(id=“userMapRole”),该resultMap也进行了相应的字段映射。
    如下图提供了单参数为list,array多参数为Map的示例
    在这里插入图片描述
    也使用了但参数Map和多参数Map的示例如下图
    在这里插入图片描述
    在这里插入图片描述
    下面是dao接口提供的一些示例
    在这里插入图片描述

  3. choose
    基本属性:
    when(when也是用test属性来进行条件判断的)
    otherwise(这个属性自我理解成else的意思)
    通常搭配 when,otherwise使用,也就是说choose相当于之前我们学习的if-esle…if-else…
    (ps:这个choose标签通常可以和switch进行联想学习,但是switch一般都是等值判断,我们的choose标签就比较厉害了他可以在when属性里进行判断)
    示例如下:
    在这里插入图片描述

  4. if+trim
    基本属性(在上面我们都介绍过,他可以搭配多种标签进行使用 )
    prefix:前缀(作用是通过自动识别是否有返回值后,在trim包含的内容上加上前缀)
    sufix:后缀(作用是在trim包含内容上加上后缀)
    prefixOverrides:对于trim标签的内容的 首部进行指定内容(如and|or)的忽略或者剔除
    sufifxOverrides:对于trim包含的内容的尾部进行指定的内容的忽略
    以上标签属性运行出来以后会自动为sql语句进行拼接这是trim标签的强大之处
    如下图的示例观察:
    在这里插入图片描述
    我们可以观察一下我们运行出来的结果便一目了然:

9.最后我上一个 mybatis插件来实现分页的功能·
用mybatis框架实现分页功能

打开Mybatis官网http://www.mybatis.org/mybatis-3/zh/configuration.html#plugins

1)找到plugins的插件的官方说明档

2)在项目的configuration.xml的核心文件中配置plugins属性配置(如果不知道核心文件的配置顺序点击一下操作查看源码)

<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">  点击这行找到
        
       < !ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>

3)plugins属性配置

<plugins>
    <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor">
        <property name="dialectType" value="mysql"/>
    </plugin>
</plugins>

4)不知道plugins的属性interceptor的包怎么写 双击两下Shift输入Interceptor的ibatis包下的类点开

在这里插入图片描述

然后在main方法里创建IPage对象 然后获取getTotal()方法
在这里插入图片描述
6)

打开Configuration类里的newExecutor方法 然后点进去interceptorChain的类

点开pluginAll的方法你会发现 用在list集合放的是Interceptor拦截器 然后用froeach循环遍历了这个list集合调用了咱们的plugin插件。

在这里插入图片描述

因此
在这里插入图片描述

Executor就是插件拦截之一

  1. 事务**未完待续…

猜你喜欢

转载自blog.csdn.net/qq_42864299/article/details/84922514
今日推荐