Mybatis超级强大的动态SQL语句大全(mybatis动态sql语句有哪些及使用)

网友投稿 277 2022-07-28


目录1. If 语句2. Where语句2.1 和 where 元素等价的自定义 trim 元素3. Set语句3.1 与 set 元素等价的自定义 trim 元素4. Choose语句5. Foreach语句6. SQL片段7. Bind元素附:MyBatis配置动态SQL语句总结

1. If 语句

select * from blog where

title = #{title}

and author = #{author}

这样写我们可以看到,如果 author 等于 null,那么查询语句为 select * from user where title=#{title},但是如果title为空呢?那么查询语句为 select * from user where and author=#{author},这是错误的SQL 语句,如何解决呢?请看下面的 where 语句!

2. Where语句

修改上面的SQL语句:

select * from blog

title = #{title}

and author = #{author}

where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。

如果 where 元素与你期望的不太一样,你也可以通过自定义 trim 元素来定制 where 元素的功能。

2.1 和 where 元素等价的自定义 trim 元素

http://...

3. Set语句

同理,上面的对于查询 SQL 语句包含 where 关键字,如果在进行更新操作的时候,含有 set 关键词,我们怎么处理呢?

update blog

title = #{title},

author = #{author}

where id = #{id};

这个例子中,set 元素会动态地在行首插入 SET 关键字,并会删掉额外的逗号(这些逗号是在使用条件语句给列赋值时引入的)

3.1 与 set 元素等价的自定义 trim 元素

...

4. Choose语句

有时候,我们不想用到所有的查询条件,只想选择其中的一个,查询条件有一个满足即可,使用 choose标签可以解决此类问题,类似于 java 的 switch 语句

select * from blog

title = #{title}

and author = #{author}

http://

and views = #{views}

5. Foreach语句

将数据库中前三个数据的id修改为1,2,3;

需求:我们需要查询 blog 表中 id 分别为1,2,3的博客信息

select * from blog

separator="or">

id=#{id}

separator="or">

id=#{id}

6. SQL片段

有时候可能某个 sql 语句我们用的特别多,为了增加代码的重用性,简化代码,我们需要将这些代码抽取出来,然后使用时直接调用。

提取SQL片段:

title = #{title}

and author = #{author}

引用SQL片段:

select * from blog

注意:

①、最好基于 单表来定义 sql 片段,提高片段的可重用性

②、在 sql 片段中不要包括 where

7. Bind元素

bind 元素允许你在 OGNL 表达式以外创建一个变量,并将其绑定到当前的上下文。比如:

SELECT * FROM BLOG

WHERE title LIKE #{pattern}

附:MyBatis配置动态SQL语句

CREATE DATABASE `mybatis_study`;

USE `mybatis_study`;

CREATE TABLE `user`(

`user_id` INT(20) NOT NULL PRIMARY KEY,

`user_name` VARCHAR(30) DEFAULT NULL,

`password` VARCHAR(30) DEFAULT NULL

)ENGINE = INNODB DEFAULT CHARSET = utf8;

INSERT INTO `user` (`user_id`,`user_name`,`password`) VALUES

(1, '张三', '123456'),

(2, 'admin', 'admin'),

(3, 'root', 'root');

在 MyBatis 的 SQL映射文件中,有时候需要根据一些查询条件,来选择不同的SQL语句,如果每一个场景都重写SQL,很显然效率没有很高,而 MyBatis 的动态SQL很好的解决了这种问题,根据条件动态的处理 SQL, 特别简单的说就是,写一次SQL,但是根据分支等的跳转,在多个场景下也可以使用,例如:

当查询条件由于参数不同而无法确定具体是什么,可以使用标签包含在 可以使用 分条件进行处理,实现动态遍历标签,在用户中查询寻多个id,例如(12,16,17)

在此之外,动态SQL同时结局了,在原生 JDBC 中需要拼接SQL语句时由于书写问题,而导致报错

总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot vue测试前端项目管理列表分页功能实现
下一篇:java实现简单银行ATM系统(用Java实现简单银行系统)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~