动态sql环境搭建和数据准备

工具类,获取UUID

package com.shan.utils;import org.junit.Test;import java.util.UUID;public class IDUtils {public static String getId(){return UUID.randomUUID().toString().replace("-","");}@Testpublic void idTest(){System.out.println(IDUtils.getId());System.out.println(IDUtils.getId());System.out.println(IDUtils.getId());}
}

创建一个博客表

CREATE TABLE `blog`(
`id` VARCHAR(50) NOT NULL COMMENT '博客id',
`title` VARCHAR(100) NOT NULL COMMENT '博客标题',
`author` VARCHAR(30) NOT NULL COMMENT '博客作者',
`create_time` DATETIME NOT NULL COMMENT '创建时间',
`views` INT(30) NOT NULL COMMENT '浏览量'
)ENGINE=INNODB DEFAULT CHARSET=utf8

以Java的方面给数据库插入数据

public void addBlogTest(){SqlSession sqlSession = MybatisUtils.getSqlSession();BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);Blog blog = new Blog();blog.setId(IDutils.getId());blog.setTitle("Mybatis如此简单!");blog.setAuthor("小黑神");blog.setCreateTime(new Date());blog.setViews(9999);mapper.addBook(blog);blog.setId(IDutils.getId());blog.setTitle("Java如此简单!");mapper.addBook(blog);blog.setId(IDutils.getId());blog.setTitle("Spring如此简单!");mapper.addBook(blog);blog.setId(IDutils.getId());blog.setTitle("微服务如此简单!");mapper.addBook(blog);sqlSession.close();

实体类

package com.shan.pojo;import lombok.Data;
import java.util.Date;@Data
public class Blog {private String id;private String title;private String author;private Date createTime;private int views;}

一、动态sql是什么?

动态sql可以这样理解:就是根据不同的条件生成不同的sql语句!

二、动态sql的使用

1.动态sql之if语句

    <!--动态sql语句之If:满足什么条件就用那些条件--><!--sql片段:使用sql标签抽取功能重复的代码,方便复用,在需要使用的地方使用include标签引用即可--><sql id="if-title-author"><if test="title != null">title = #{title}</if><if test="author != null">and author = #{author}</if></sql><select id="queryBlogIf" parameterType="map" resultType="blog">select * from mybatis.blog<where><include refid="if-title-author"></include></where></select>

2.动态sql之choose语句

    <!--动态sql语句之Choose:当这个条件满足时就用这个条件--><select id="queryBlogChoose" parameterType="map" resultType="blog">select * from mybatis.blog<where><choose><when test="title != null">title = #{title}</when><when test="author != null">and author = #{author}</when><otherwise>and views = #{views}</otherwise></choose></where></select>

3.动态sql之set语句

    <!--动态sql语句之Set--><update id="updateBlog" parameterType="map">update mybatis.blog<set><if test="title != null">title = #{title},</if><if test="author != null">author = #{author},</if><if test="views != null">views = #{views}</if></set>where id = #{id}</update>

4.动态sql之Foreach语句

    <!--动态sql语句之Foreach--><!--我想查询2,3,5,6号记录的博客select * from mybatis.blog where (id=2 or id=3 or id=5 or id=6)我们可以传入一个map,这个map里面可以是一个集合--><select id="queryBlogForeach" parameterType="map" resultType="blog">select * from mybatis.blog<where><foreach collection="ids" item="id" open="(" close=")" separator="or">id = #{id}</foreach></where></select>

总结

动态sql的出现,打破以往原生态的sql拼接,让sql语句更加简单!
动态sql本质就是在拼接sql语句,我们只要保证sql的正确性,按照sql的格式,去排列组合即可!

作者有话说

博客创作不易,希望看到这里的读者动动你的小手点个赞,如果喜欢的小伙伴可以一键三连,作者大大在这里给大家谢谢了。

mybatis学习7之动态sql相关推荐

  1. MyBatis:学习笔记(4)——动态SQL

    MyBatis:学习笔记(4)--动态SQL 转载于:https://www.cnblogs.com/MrSaver/p/7453949.html

  2. Mybatis学习笔记之---动态sql中标签的使用

    动态Sql语句中标签的使用 (一)常用标签 1.<if> if标签通常用于WHERE语句中,通过判断参数值来决定是否使用某个查询条件, 他也经常用于UPDATE语句中判断是否更新某一个字段 ...

  3. Mybatis学习笔记13 - 动态sql之set标签

    示例代码: 接口定义: package com.mybatis.dao;import com.mybatis.bean.Employee;public interface EmployeeMapper ...

  4. 【Java从0到架构师】MyBatis - 增删改、动态 SQL

    MyBatis - 增删改.动态 SQL 动态 SQL if 标签 where 标签 sql 标签 foreach 标签 添加 主键设置 批量添加 - 利用 foreach 标签 更新 删除 批量删除 ...

  5. JavaWeb学习笔记(动态SQL)

    JavaWeb学习笔记(动态SQL) 动态SQL中的元素 < if>元素 < choose>.< when>.< otherwise>元素 < w ...

  6. Java神鬼莫测之MyBatis注解开发之动态SQL语句(六)

    1.Mybatis注解开发之动态SQL语句 背景:使用mybatis的注解开发动态Sql会比较麻烦, 很不方便, 所以不太推荐使用,该文章以查询作为案例,演示动态sql语句. 注意:Mybatis的动 ...

  7. SSM框架开发web项目系列(四) MyBatis之快速掌握动态SQL

    前言 通过前面的MyBatis部分学习,已经可以使用MyBatis独立构建一个数据库程序,基本的增删查改/关联查询等等都可以实现了.简单的单表操作和关联查询在实际开的业务流程中一定会有,但是可能只会占 ...

  8. Mybatis框架(复杂动态SQL),一对一,一对多,多对多

    复合条件查询(动态SQL) MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记 ...

  9. Mybatis系列全解(八):Mybatis的9大动态SQL标签你知道几个?提前致女神!

    封面:洛小汐 作者:潘潘 2021年,仰望天空,脚踏实地. 这算是春节后首篇 Mybatis 文了~ 跨了个年感觉写了有半个世纪 - 借着女神节 ヾ(◍°∇°◍)ノ゙ 提前祝男神女神们越靓越富越嗨森! ...

最新文章

  1. 【pytorch】torch.nn.functional.pad的使用
  2. 112. Leetcode 673. 最长递增子序列的个数 (动态规划-子序列问题)
  3. NOI 2015 滞后赛解题报告
  4. CRMEB开发文档及目录结构
  5. 【Java文件下载】如何让浏览器直接下载后端返回的图片,而不是直接打开
  6. 为什么我那么努力,模电还是学不懂?
  7. 为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 API
  8. 某外企招聘程序员部分面试题,求作答!!!
  9. oracle9i的erp数据库无法正常关闭的解决方法。
  10. ASP与數据庫,文本文件鏈接精髓
  11. ARM指令集的最新版本包括针对JavaScript的优化
  12. scala 函数中嵌套函数_Scala中的VarArgs函数和@varargs批注
  13. 每日算法系列【LeetCode 719】找出第 k 小的距离对
  14. Spring Cloud云架构-Restful 基础架构
  15. 安装KETTLE教程,并配置执行定时任务
  16. conda python源配置
  17. win7共享20人限制 清除_中控智慧考勤门禁_机器直连软件及清除管理员
  18. 下周递交上市申请,腾讯持股的微医投资价值几何?
  19. 大数据商业化应用的价值和应用场景是什么?
  20. 几个Python小案例, 爱上Python编程!

热门文章

  1. 深度学习100例 | 第33天:迁移学习-实战案例教程
  2. 实战项目五:抓取简书文章信息
  3. anaconda2-keras安装;keras后端修改
  4. 【机器学习算法-python实现】K-means无监督学习实现分类
  5. kafka源码分析之二客户端分析
  6. Linux下history命令详解---转载
  7. Understanding transient variables in Java and how they are practically used in HashMap---reference
  8. android 标准 action
  9. 金融风控实战——有监督分箱
  10. 【大数据-Hadoop】Spark