package dao.user;
import dao.BlogMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.Blog;
import utils.mybatis_utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class MyTest {
@Test
public void queryBlogIF() {
SqlSession sqlSession= mybatis_utils.getSqlSession();
BlogMapper mapper=sqlSession.getMapper(BlogMapper.class);
HashMap map=new HashMap();
ArrayList<Integer> ids=new ArrayList<>();
ids.add(1);
map.put("ids",ids);
List<Blog> blogList=mapper.queryforeach(map);
for (Blog blog : blogList) {
System.out.println(blog);
sqlSession.close();
将id=1,加入集合,最终输出,id等于1这条记录:
未将任何的id加入集合,最终所有数据均被输出:
动态SQL语句就是在拼接sql语句,我们只要保证SQL的正确性,按照SQL的格式,去排列组合就好了
方法即为:先在Mysql中写出完整的SQL,再对应的去修改成为我们动态SQL实现即可
它的功能非常强大,允许指定一个集合声明可以在元素体内使用的集合项(item)和索引(index)变量,它也允许指定开头与结尾的字符串以及集合项迭代之间的分隔符,这个元素也不会错误地添加多余的分隔符,看它多智能!
foreach:实例一
collection:需要遍历的集合或者数组名字,等会你传入的数字集合的名字
item:这个是下面你需要变量出来的东西的名字,随便起,只要下面#{}中对应就可以,相当于接受遍历出来的数据
open:前缀,如下面的语句应该要写where id in(x,x,x),所以前缀就是 id in(
separator:这应该算中间缀,就是中间要加的东西们这里要加逗号,也可以加and or这种
close:这就是后缀了,一般都是)这些后缀
#{id}:这个id就是item命名的,东西会接受到遍历
MyBatis 提供了动态 SQL 的功能,可以按照条件动态生成 SQL 语句。
动态 SQL 语句可以使用 XML 或注解的方式来编写。下面以 XML 的方式来演示如何使用动态 SQL。
MyBatis 的动态 SQL 语句主要有以下几种标签:
- if:判断条件是否成立,成立则执行 SQL 语句
- choose、when、otherwise:类似于 switch 语句,根据条件选择执行的 SQL 语句
- foreach:循环遍历集合或数组,生成多条 SQL 语句
- set:设置更新语句的属性值
- where:设置查询语句的条件
下面是一个使用 if 和 where 标签的动态 SQL 示例:
```xml
<select id="getUserList" resultType="User">
SELECT * FROM user
<where>
<if test="name != null">
AND name = #{name}
<if test="age != null">
AND age = #{age}
</where>
</select>
这个示例中,如果传入的参数 name 不为空,则在 SQL 语句中添加一个条件 name = #{name},如果传入的参数 age 不为空,则在 SQL 语句中添加一个条件 age = #{age}。最终生成的 SQL 语句类似于:
```sql
SELECT * FROM user WHERE name = '张三' AND age = 20
以上是 MyBatis 动态 SQL 的简单示例,更多的语法和标签请参考 MyBatis 官方文档。