mybatis学习7之动态sql
动态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相关推荐
- MyBatis:学习笔记(4)——动态SQL
MyBatis:学习笔记(4)--动态SQL 转载于:https://www.cnblogs.com/MrSaver/p/7453949.html
- Mybatis学习笔记之---动态sql中标签的使用
动态Sql语句中标签的使用 (一)常用标签 1.<if> if标签通常用于WHERE语句中,通过判断参数值来决定是否使用某个查询条件, 他也经常用于UPDATE语句中判断是否更新某一个字段 ...
- Mybatis学习笔记13 - 动态sql之set标签
示例代码: 接口定义: package com.mybatis.dao;import com.mybatis.bean.Employee;public interface EmployeeMapper ...
- 【Java从0到架构师】MyBatis - 增删改、动态 SQL
MyBatis - 增删改.动态 SQL 动态 SQL if 标签 where 标签 sql 标签 foreach 标签 添加 主键设置 批量添加 - 利用 foreach 标签 更新 删除 批量删除 ...
- JavaWeb学习笔记(动态SQL)
JavaWeb学习笔记(动态SQL) 动态SQL中的元素 < if>元素 < choose>.< when>.< otherwise>元素 < w ...
- Java神鬼莫测之MyBatis注解开发之动态SQL语句(六)
1.Mybatis注解开发之动态SQL语句 背景:使用mybatis的注解开发动态Sql会比较麻烦, 很不方便, 所以不太推荐使用,该文章以查询作为案例,演示动态sql语句. 注意:Mybatis的动 ...
- SSM框架开发web项目系列(四) MyBatis之快速掌握动态SQL
前言 通过前面的MyBatis部分学习,已经可以使用MyBatis独立构建一个数据库程序,基本的增删查改/关联查询等等都可以实现了.简单的单表操作和关联查询在实际开的业务流程中一定会有,但是可能只会占 ...
- Mybatis框架(复杂动态SQL),一对一,一对多,多对多
复合条件查询(动态SQL) MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记 ...
- Mybatis系列全解(八):Mybatis的9大动态SQL标签你知道几个?提前致女神!
封面:洛小汐 作者:潘潘 2021年,仰望天空,脚踏实地. 这算是春节后首篇 Mybatis 文了~ 跨了个年感觉写了有半个世纪 - 借着女神节 ヾ(◍°∇°◍)ノ゙ 提前祝男神女神们越靓越富越嗨森! ...
最新文章
- 【pytorch】torch.nn.functional.pad的使用
- 112. Leetcode 673. 最长递增子序列的个数 (动态规划-子序列问题)
- NOI 2015 滞后赛解题报告
- CRMEB开发文档及目录结构
- 【Java文件下载】如何让浏览器直接下载后端返回的图片,而不是直接打开
- 为什么我那么努力,模电还是学不懂?
- 为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 API
- 某外企招聘程序员部分面试题,求作答!!!
- oracle9i的erp数据库无法正常关闭的解决方法。
- ASP与數据庫,文本文件鏈接精髓
- ARM指令集的最新版本包括针对JavaScript的优化
- scala 函数中嵌套函数_Scala中的VarArgs函数和@varargs批注
- 每日算法系列【LeetCode 719】找出第 k 小的距离对
- Spring Cloud云架构-Restful 基础架构
- 安装KETTLE教程,并配置执行定时任务
- conda python源配置
- win7共享20人限制 清除_中控智慧考勤门禁_机器直连软件及清除管理员
- 下周递交上市申请,腾讯持股的微医投资价值几何?
- 大数据商业化应用的价值和应用场景是什么?
- 几个Python小案例, 爱上Python编程!