• 动态SQL第一部分(重点)


    什么是动态sql:

    1. 动态sql就是根据不同的条件生成不同的sql语句。
    2. 如果你之前用过 JSTL 或任何基于类 XML 语言的文本处理器,你对动态 SQL 元素可能会感觉似曾相识。
    3. 在 MyBatis 之前的版本中,需要花时间了解大量的元素。
    4. 借助功能强大的基于 OGNL 的表达式,MyBatis 3 替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要少。

    包括以下4个模块:

    • if

    • choose (when, otherwise)

    • trim (where, set)

    • foreach

    搭建环境

    1. CREATE TABLE `blog`
    2. (
    3. `id` VARCHAR(50) NOT NULL COMMENT '博客id',
    4. `title` VARCHAR(100) NOT NULL COMMENT '博客标题',
    5. `author` VARCHAR(30) NOT NULL COMMENT '博客作者',
    6. `create_time` DATETIME NOT NULL COMMENT '创建时间',
    7. `views` INT(30) NOT NULL COMMENT '浏览量'
    8. ) ENGINE = INNODB
    9. DEFAULT CHARSET = utf8;

    创建一个基础工程

    (1)导包

    (2)编写配置文件

    (3)编写实体类

    1. package com.gt.pojo;
    2. import lombok.Data;
    3. import java.util.Date;
    4. @Data
    5. public class Blog {
    6. private String id;
    7. private String title;
    8. private String author;
    9. private Date createTime;
    10. private int views;
    11. }

    (4)编写实体类对应Mapper接口和Mapper.xml文件

    if

    1. <select id="getBlogList" parameterType="map" resultType="com.gt.pojo.Blog">
    2. select id,title,author,create_time createTime,views from blog
    3. where 1=1
    4. <if test="title != null">
    5. and title like #{title}
    6. if>
    7. <if test="author != null">
    8. and author = #{author}
    9. if>
    10. select>

    ​​​​​​​

     

    choose (when, otherwise)

    1. <select id="getBlogList" parameterType="map" resultType="com.gt.pojo.Blog">
    2. select id,title,author,create_time createTime,views from blog
    3. <where>
    4. <choose>
    5. <when test="title != null">
    6. title like #{title}
    7. when>
    8. <when test="author != null">
    9. and author = #{author}
    10. when>
    11. <otherwise>
    12. and views=#{views}
    13. otherwise>
    14. choose>
    15. where>
    16. select>

    trim (where, set)

    where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。

    1. <select id="getBlogList" parameterType="map" resultType="com.gt.pojo.Blog">
    2. select id,title,author,create_time createTime,views from blog
    3. <where>
    4. <if test="title != null">
    5. title like #{title}
    6. if>
    7. <if test="author != null">
    8. and author = #{author}
    9. if>
    10. where>
    11. select>
    1. <update id="updateBlog" parameterType="map">
    2. update blog
    3. <set>
    4. <if test="title != null">
    5. title=#{title},
    6. if>
    7. <if test="author != null">
    8. author=#{author}
    9. if>
    10. set>
    11. where id=#{id}
    12. update>

    输出结果:

    • 如果 where 元素与你期望的不太一样,你也可以通过自定义 trim 元素来定制 where 元素的功能。
    • 比如,和 where 元素等价的自定义 trim 元素为:
    1. <trim prefix="WHERE" prefixOverrides="AND |OR ">
    2. ...
    3. trim>
    1. <trim prefix="SET" suffixOverrides=",">
    2. ...
    3. trim>

            所谓的动态sql。本质还是sql语句,只是我们可以在sql层面,去执行一个逻辑代码

  • 相关阅读:
    org.activiti.bpmn
    阿里云 linux tomcat 无法访问方法
    服务器防御100G是什么意思?够用吗?
    一个基于SpringBoot+Vue前后端分离学生宿舍管理系统详细设计实现
    SPC 统计过程控制
    Java 的 String、StringBuffer 和 StringBuilder(一文讲透)
    什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的 IE?
    面试总结之并发编程
    tns-12545 tns-12560 tns00515 linux error 99
    【C++】匿名对象 ① ( 匿名对象引入 | 匿名对象简介 | 匿名对象概念 | 匿名对象作用域 - 对象创建与销毁 )
  • 原文地址:https://blog.csdn.net/qq_46423017/article/details/126556538