c#自定义Attribute获取接口实现示例代码
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,但是根据分支等的跳转,在多个场景下也可以使用,例如:
当查询条件由于参数不同而无法确定具体是什么,可以使用
在此之外,动态SQL同时结局了,在原生 JDBC 中需要拼接SQL语句时由于书写问题,而导致报错
总结
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~