目录
一.环境搭建
前言什么是动态SQL
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。
二.动态查询--if语句
五.动态语句---sql标签
六.动态查询---foreach标签
一.环境搭建
创表-->插入数据-->配置mapper--->配置mybatis-config.xml
1.创建blog表并插入相关数据如下图:
| id | title | name | view |
| 1 | 小王子 | 冰岛 | 4 |
| 2 | 线性代数 | 美国 | 5 |
| 3 | 数据结构 | 中国 | 6 |
| 4 | 概率论 | 中国 | 7 |
2.创建实体类blog,配置Blogmapper
BlogMapper(接口)
public interface BlogMapper{
public List queryBlogIf(Map map);
public List queryBlogChoose(Map map);
public List queryBlogForeach(Map map);
public int updateBlog(Map map);
}
Blog.java
@Data
public class Blog {
private String id;
private String title;
private String name;
private int view;
}
3.注册BlogMapper
前言什么是动态SQL
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。
二.动态查询--if语句
- 创建方法接口
- 实现接口
- 创建方法接口
- 实现接口
sql源语句select *from blog where id=xx and title=xx and view=xx and id=xx
where标签
如果条件全部不满足,就会按select *from blog 查询结果展示
如果第一个条件满足,那么第一个条件的and就会被删除
三.动态查询--choose语句---->相当于java中switch语句,第一个命中了,后面的就不会实现,
- 创建方法接口
- 实现接口
id-->方法名字;parametertype--->参数类型; resulttypoe--->返回类型
choose
select *from mybatis.blog and id=#{id} and title=#{title} and view=#{view} and name=#{name}
3.测试
public void queryBlogChoose(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
HashMap map = new HashMap();
map.put("id",1);
map.put("title","小王子");
List blogs = mapper.queryBlogChoose(map);
for (Blog blog : blogs) {
System.out.println(blog);
}
sqlSession.close();
}
当你第一个给的是id,他只会读取到id,即使你后面给了title,它同样不会运行
五.动态语句---sql标签
sql的标签的作用:sql片段抽取公共部分语句重复使用
用法:想要重复利用的代码
在需要使用的位置加上
注意:最好基于单表来定义sql片段,sql中不要存在where标签-->
六.动态查询---foreach标签
foreach 元素的功能非常强大,它允许你指定一个集合,声明可以在元素体内使用的集合项(item)和索引(index)变量
废话不多说开干!
1.创建接口方法
2.在BlogMapper.XML中实现
我们现在传递一个万能的map,这个map里面可以存在集合
我只想查where 1=1( and(id=1,or id=2,or id=3)的数据。
collection="自定义一个id",什么不重要,;从集合里面遍历出来的每一项->item是元素名字
open是开始的位置and( 如果是第一个元素,and会省略
close是关闭的符号)
separator=“or” 分隔符
3.测试
1.新建一个集合ArrayList 名字和上面的id对应
2.给ids集合加值
ids.add(1);ids.add(20=);
3.新建一个hash表
4.map.put("ids",ids);
@Test
public void queryBlogForeache(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
HashMap map = new HashMap();
ArrayList ids = new ArrayList<>();
ids.add(4);
ids.add(1);
map.put("ids",ids);
List blogs = mapper.queryBlogForeach(map);
for (Blog blog : blogs) {
System.out.println(blog);
}
sqlSession.close();
}



