[Mybatis]6.动态SQL
环境搭建
1.新建表:
2.写实体类
3.初始化表:
的使用:
现在实现需求:查询一个记录,可以没有限定,也可以限定title或者author
- 接口中声明方法:
ListqueryBlogIF(Map map);
使用map放参数,方便放title或者author,或者全放,或者全不放。 - xml中添加:
where标签:自动在sql中添加where、去除无关的and,or等。
set标签:自动添加set、去除无关的逗号。
(trim标签可以自定义,暂时还不懂)
- 编写测试方法:
@Test
public void testIF(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
HashMap map = new HashMap();
map.put("title","Java");
List blogs = mapper.queryBlogIF(map);
for (Blog blog : blogs) {
System.out.println(blog);
}
sqlSession.close();
}
查询title为Java的记录:
map不放参数:
@Test
public void testIF(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
HashMap map = new HashMap();
List blogs = mapper.queryBlogIF(map);
for (Blog blog : blogs) {
System.out.println(blog);
}
sqlSession.close();
}
全部查出:
的使用:
choose相当于switch case,且有break。
- 语法:
- 测试:
@Test
public void testChoose(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
HashMap map = new HashMap();
map.put("title","Java");
map.put("author","k狂神说");
map.put("views",10000);
List blogs = mapper.queryBlogChoose(map);
for (Blog blog : blogs) {
System.out.println(blog);
}
sqlSession.close();
}
- 结果
可见,choose只执行了title=#{title}。也就是break掉了。
的使用:
foreach用来实现遍历
- 语法
collection:集合的变量名。 item:变量名称 open:开头 separator:分隔符 close:结尾
上面的语句相当于: select * from mybatis1.blog where title in (xx,xx,xx,....)