(1)动态sql语句 —— if
(2)动态sql语句 —— where
(3)动态sql语句 —— foreach
示例:假如要用很多个用户的id(封装到List集合中),来查询处多个用户的信息
1)给出 User.java
2)给出 QueryVo.java
import java.util.List;
public class QueryVo {
private User user;
private List<Integer> ids;
public List<Integer> getIds() {
return ids;
}
public void setIds(List<Integer> ids) {
this.ids = ids;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
3)给出接口 IUserDao
package dao;
import java.util.List;
import domain.QueryVo;
import domain.User;
public interface IUserDao {
/**
* 根据QueryVo中提供的id集合,查询User信息
* @param vo
* @return
*/
List<User> findUserInIds(QueryVo vo);
}
4)IUserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.IUserDao">
<select id="findUserInIds" parameterType="domain.QueryVo" resultType="domain.User">
select * from user
<where>
<if test="ids!=null and ids.size()>0">
<foreach collection="ids" open="and id in (" close=")" item="id" separator=",">
#{id}
</foreach>
</if>
</where>
</select>
</mapper>
5)Test.java
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import dao.IUserDao;
import domain.QueryVo;
import domain.User;
public class findUserInIds {
public static void main(String[] args) throws IOException {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("conf.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
QueryVo vo = new QueryVo();
List<Integer> list = new ArrayList<Integer>();
list.add(41);
list.add(42);
list.add(46);
vo.setIds(list);
List<User> users = userDao.findUserInIds(vo);
for(User user: users) {
System.out.println(user);
}
//提交事务
session.commit();
session.close();
in.close();
}
}