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的全部内容,希望对大家有所帮助!
本文向大家介绍Mybatis动态SQL实例详解,包括了Mybatis动态SQL实例详解的使用技巧和注意事项,需要的朋友参考一下 动态SQL 什么是动态SQL? MyBatis的官方文档中是这样介绍的? 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列
本文向大家介绍mybatis的动态sql详解(精),包括了mybatis的动态sql详解(精)的使用技巧和注意事项,需要的朋友参考一下 MyBatis 的一个强大的特性之一通常是它的动态 SQL 能力。如果你有使用 JDBC 或其他 相似框架的经验,你就明白条件地串联 SQL 字符串在一起是多么的痛苦,确保不能忘了空 格或在列表的最后省略逗号。动态 SQL 可以彻底处理这种痛苦。 通常使用动态SQ
本文向大家介绍MyBatis 执行动态 SQL语句详解,包括了MyBatis 执行动态 SQL语句详解的使用技巧和注意事项,需要的朋友参考一下 大家基本上都知道如何使用 MyBatis 执行任意 SQL,使用方法很简单,例如在一个 XXMapper.xml 中: 你可以如下调用: 或者你可以在 XXMapper.java 接口中定义如下方法: 然后使用接口调用方法: 上面这些内容可能都会,下面在此
本文向大家介绍MyBatis动态Sql之if标签的用法详解,包括了MyBatis动态Sql之if标签的用法详解的使用技巧和注意事项,需要的朋友参考一下 最近在读刘增辉老师所著的《MyBatis从入门到精通》一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解如何使用if标签生成动态的Sql,主要包含以下3个场景: 1.根据查询条件实现动态
本文向大家介绍详解Spring Boot + Mybatis 实现动态数据源,包括了详解Spring Boot + Mybatis 实现动态数据源的使用技巧和注意事项,需要的朋友参考一下 动态数据源 在很多具体应用场景的时候,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库。又比如业务A要访问A数据库,业务B要访问B数据库等,都可以使用动态数据源方案
动态 SQL 是 MyBatis 的强大特性之一。在 JDBC 或其它类似的框架中,开发人员通常需要手动拼接 SQL 语句。根据不同的条件拼接 SQL 语句是一件极其痛苦的工作。例如,拼接时要确保添加了必要的空格,还要注意去掉列表最后一个列名的逗号。而动态 SQL 恰好解决了这一问题,可以根据场景动态的构建查询。 动态 SQL 只有几个基本元素,与 JSTL 或 XML 文本处理器相似,十分简单明