详解Mybatis动态sql
作者:xiaoerduo123x 发布时间:2023-09-16 15:41:38
1.什么是mybatis动态sql
看到动态,我们就应该想到,这是一个可以变化的sql语句
MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑
2.mybatis动态sql使用前准备
a.数据库表
b.创建类
3.使用mybatis动态sql,得先知道一些属性值
一,插入
selectKey:在sql语句前后或后执行的sql语句
keyColumn:对应字段名或别名
keyProperty:对应实体类的属性名或map的key值
order:在执行语句前或后执行
resultType:返回结果的类型
第一种方式:最简单的动态sql 插入
insert into course values(seq_course.nextval,#{courseCode},#{courseName})
select max(id) currId from course
测试
测试结果
第二种方式:如果我不想插入这么多的字段,courseName这个字段我不想插入,那么第一种这种方式,肯定是不行的
insert into course(id,
courseCode,
courseName
)
values(seq_course.nextval,
#{courseCode},
#{courseName}
)
测试及结果
由此可见,这种方式,在我不想插入courseCode这个字段的时候,我们是可以实现的
现在为题又来了,如果我们想把最后一个字段变为空,或者两个字段都变为空的时候,会出现什么情况
最后一个字段变为空
控制台第一个问号后面好像多了一个逗号
两个字段都变为空试试
还是多了一个逗号
出现上面这种情况的原因是,在不想插入字段的时候,我们并没有把逗号去掉,所有现在介绍第三种方式
第三种方式,去掉多余的逗号
这种方式要引入trim
trim也有几种属性
prefix:添加前缀
prefixOverrides:覆盖前缀
suffix:添加后缀
suffixOverrides:覆盖后缀
id,
courseCode,
courseName
seq_course.nextval,
#{courseCode},
#{courseName}
看,问题解决了
在做项目的时候,我们经常对数据库进行插入数据,有时候我们会想同时插入多条,那么,在使用mybatis我们该怎么样插入多条数据呢
在这里,我们要解决几个问题
1.我们怎么样复制表结构
create table course02 as select * from COURSE
这个语句是不是很熟悉,对的,course02这个表不仅复制了course表的表结构,把course表的内容也复制进来了
2.我们怎么样只复制course的表结构,而不复制course表的内容呢
create table course03 as select * from COURSE where 1!=1;
3.那么进行插入的时候,是不是也是和这个一样呢
insert into course03 select * from course;
答案是一样的
4.怎么进行多条语句的插入
insert into course03
select '6', 'yc06', '数据结构06' from dual union
select '7', 'yc07', '数据结构07' from dual union
select '8', 'yc08', '数据结构08' from dual
现在sql语句有了,我们就可以在配置文件中进行插入操作了
insert into course
select #{courses.id},#{courses.courseCode},
#{courses.courseName} from dual
二,修改
1.使用trim,前面也已经介绍,使用trim可以去前缀,是因为有suffixOverrides这个属性
update course set
courseCode=#{courseCode},
courseName=#{courseName}
where id=#{id}
2.使用set,可以代替语句中的set,还可以去掉后缀
update course
courseCode=#{courseCode},
courseName=#{courseName}
where id=#{id}
3.在修改的时候我们也会有选择性的修改,有时候我们不想修改的值,让其和没有修改的值一致
choose相当于多重if
第一个when相当于if,第二个when相当于else if
otherwise相当于else
update course
courseCode=#{courseCode},
courseCode=courseCode,
courseName=#{courseName},
courseName=courseName,
where id=#{id}
以上所述是小编给大家介绍的Mybatis动态sql的全部内容,希望对大家有所帮助!
猜你喜欢
- 前言在上一篇学习SpringBoot中,整合了Mybatis、Druid和PageHelper并实现了多数据源的操作。本篇主要是介绍和使用目
- 本文实例讲述了C#实现DataTable映射成Model的方法。分享给大家供大家参考,具体如下:这是数据库开发中经常遇到的问题,当然,这可以
- 1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用 2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时
- @RequestBody部分属性丢失问题描述JavaBean实现public class VerifyNewFriendApplyReq i
- 在分布式系统中,我们会需要 ID 生成器的组件,这个组件可以实现帮助我们生成顺序的或者带业务含义的 ID。目前有很多经典的 ID 生成方式,
- java 方法签名,我想做java 开发的朋友也知道,方法签名的重要性,是方法重载的一个比较好的解释,尤其是在后续优化方面,这里记录下,有看
- 异常与错误:异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通
- 一、文件存储特点:openFileInput()和openFileOutput()读取设备上的文件。优点:适用于存储大量的数据,可以存储图片
- 常见Bean后处理器的作用:public static void main(String[] args) { &
- String类基本概念String类属于引用数据类型,不属于基本数据类型。在Java中只要是" "(双引号)中的,都是S
- 前言不积跬步无以至千里,不积小流,无以成江海在公司一般来说,都只会接触一些CRUD的业务,很多时候可能你想设计很多的代码结构,但是时间不允许
- 虽然说模块通信、路由协议在Android已经不新鲜了,但是如果脱离了那些优秀的开源库我们从零开始自己造一个库,有时候重复造轮子会让自己对所谓
- java加载properties文件的六种方法总结java加载properties文件的六中基本方式实现java加载properties文件
- 需求读200+的CSV/EXCEL文件,按文件名称存到不同数据库前期准备环境maven + jdk8 + mysql代码展示pom文件<
- 在实际工作中,重试重发请求处理是一个非常常见的场景,比如:1、发送消息失败。2、调用远程服务失败。3、争抢锁失败。这些错误可能是因为网络波动
- 限流器算法目前常用限流器算法为两种:令牌桶算法和漏桶算法,主要区别在于:漏桶算法能够强行限制请求速率,平滑突发请求,而令牌桶算法在限定平均速
- 前面我们完成了与商品类别相关的业务逻辑,接下来我们开始做具体商品部分。1. 数据库建表并映射Model首先我们在数据库中新建一张表,然后使用
- 如何将Object类型转换为int类型Object object = null;try{ Integer.pars
- 使用JAVA工程管理越来越多的jar包,担心导错了,多导了,漏导了怎么办?换一个IDE项目后项目会不会出一堆BUG,看的头皮发麻?自己写的代
- 在基于Mybatis-plus实现多租户架构中,介绍了在多租户项目中如果要开启一个子线程,那么需要手动进行RequestAttributes