表达式中的 List 使用 list 表示,其大小使用 list.size 表示。
需求:查询学生 id 是 1002,1005,1006
接口方法:
List<Student> selectStudentForList(List<Integer> idList);
mapper文件:
<select id="selectStudentForList" resultType="com.bjpowernode.domain.Student"> select id,name,email,age from student <if test="list !=null and list.size > 0 "> where id in <foreach collection="list" open="(" close=")" item="stuid" separator=","> #{stuid} </foreach> </if> </select>
测试方法:
@Test public void testSelectForList() { List<Integer> list = new ArrayList<>(); list.add(1002); list.add(1005); list.add(1006); List<Student> studentList = studentDao.selectStudentForList(list); studentList.forEach( stu -> System.out.println(stu)); }
2、遍历List<对象类型>
接口方法:
List<Student> selectStudentForList2(List<Student> stuList);
mapper文件:
<select id="selectStudentForList2" resultType="com.bjpowernode.domain.Student"> select id,name,email,age from student <if test="list !=null and list.size > 0 "> where id in <foreach collection="list" open="(" close=")" item="stuobject" separator=","> #{stuobject.id} </foreach> </if> </select>
测试方法:
@Test public void testSelectForList2() { List<Student> list = new ArrayList<>(); Student s1 = new Student(); s1.setId(1002); list.add(s1); s1 = new Student(); s1.setId(1005); list.add(s1); List<Student> studentList = studentDao.selectStudentForList2(list); studentList.forEach( stu -> System.out.println(stu)); }
动态 SQL 之代码片段
<sql/>标签用于定义 SQL 片断,以便其它 SQL 标签复用。而其它标签使 用该 SQL 片断,需要使用<include/>子标签。该<sql/>标签可以定义 SQL 语句中的任何部分,所以<include/>子标签可以放在动态 SQL 的任何位置。
接口方法:
List<Student> selectStudentSqlFragment(List<Student> stuList);
mapper文件:
<!--创建 sql 片段 id:片段的自定义名称--> <sql id="studentSql"> select id,name,email,age from student </sql> <select id="selectStudentSqlFragment" resultType="com.bjpowernode.domain.Student"> <!-- 引用 sql 片段 --> <include refid="studentSql"/> <if test="list !=null and list.size > 0 "> where id in <foreach collection="list" open="(" close=")" item="stuobject" separator=","> #{stuobject.id} </foreach> </if> </select>
测试方法:
@Test public void testSelectSqlFragment() { List<Student> list = new ArrayList<>(); Student s1 = new Student(); s1.setId(1002); list.add(s1); s1 = new Student(); s1.setId(1005); list.add(s1); List<Student> studentList = studentDao.selectStudentSqlFragment(list); studentList.forEach( stu -> System.out.println(stu)); }
到此这篇关于MyBatis 详细讲解动态 SQL的使用的文章就介绍到这了,更多相关MyBatis 动态 SQL内容请搜索