详解Mybatis动态sql

作者:xiaoerduo123x 时间:2023-09-16 15:41:38 

1.什么是mybatis动态sql

看到动态,我们就应该想到,这是一个可以变化的sql语句

MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑

2.mybatis动态sql使用前准备

a.数据库表

详解Mybatis动态sql

b.创建类

详解Mybatis动态sql

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

详解Mybatis动态sql

测试

测试结果

详解Mybatis动态sql

第二种方式:如果我不想插入这么多的字段,courseName这个字段我不想插入,那么第一种这种方式,肯定是不行的


insert into course(id,
courseCode,
courseName
)
values(seq_course.nextval,
#{courseCode},
#{courseName}
)

测试及结果

详解Mybatis动态sql

由此可见,这种方式,在我不想插入courseCode这个字段的时候,我们是可以实现的

现在为题又来了,如果我们想把最后一个字段变为空,或者两个字段都变为空的时候,会出现什么情况

最后一个字段变为空

详解Mybatis动态sql

控制台第一个问号后面好像多了一个逗号

两个字段都变为空试试

详解Mybatis动态sql

还是多了一个逗号

出现上面这种情况的原因是,在不想插入字段的时候,我们并没有把逗号去掉,所有现在介绍第三种方式

第三种方式,去掉多余的逗号

这种方式要引入trim

trim也有几种属性

prefix:添加前缀

prefixOverrides:覆盖前缀

suffix:添加后缀

suffixOverrides:覆盖后缀


id,
courseCode,
courseName
seq_course.nextval,
#{courseCode},
#{courseName}

详解Mybatis动态sql

看,问题解决了

在做项目的时候,我们经常对数据库进行插入数据,有时候我们会想同时插入多条,那么,在使用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

详解Mybatis动态sql

二,修改

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的全部内容,希望对大家有所帮助!

标签:mybatis,动态,sql
0
投稿

猜你喜欢

  • android studio xml文件实现添加注释

    2022-10-11 14:24:26
  • Java身份证号码校验工具类详解

    2022-09-03 18:06:27
  • Kotlin Navigation可视化开发详解

    2022-10-18 10:55:56
  • Java8 Instant时间戳使用小记

    2023-05-31 10:33:59
  • java实现ArrayList根据存储对象排序功能示例

    2022-01-24 01:06:05
  • SpringMVC实现表单验证功能详解

    2023-09-24 09:07:28
  • 详解MyBatis逆向工程

    2021-12-12 02:38:04
  • Spring中RedisTemplate的基本使用浅析

    2023-03-08 05:46:50
  • 基于java集合中的一些易混淆的知识点(详解)

    2023-08-29 03:06:26
  • Java定时任务的三种实现方法

    2022-01-13 06:59:01
  • Java 动态代理的多种实现方式

    2023-11-20 05:23:14
  • 一文总结Java获取文件后缀名的所有方法

    2022-10-18 16:06:40
  • 不规范使用ThreadLocal导致bug分析解决

    2023-11-24 20:03:59
  • Java设计模式之备忘录模式(Memento模式)介绍

    2023-08-23 14:26:42
  • Android模拟器实现手机添加文件到sd卡的方法

    2022-01-18 08:38:27
  • Java实现单例模式的五种方法介绍

    2022-10-20 17:32:56
  • SpringBoot实现异步事件驱动的方法

    2023-11-01 07:48:54
  • java后端进行跨域的几种方式小结

    2021-09-03 14:53:31
  • java中抽象类和接口的相同和不同点介绍

    2021-05-30 04:53:31
  • 基于Spring中的线程池和定时任务功能解析

    2022-08-20 03:49:45
  • asp之家 软件编程 m.aspxhome.com