欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 宝鼎售后问题提交 | 后台管理


新闻资讯

MENU

软件开发知识

close=) #{item} /foreach/ 图纸加密 select 上述 collection 的值为list

点击: 次  来源:宝鼎软件 时间:2017-06-01

原文出处: Zhisheng Tian

foreach 的主要用在构建in条件中,它可以在SQL语句中举办迭代一个荟萃。

foreach 元素的属性主要有 item,index,collection,open,软件开发,separator,close。

  • item 暗示荟萃中每一个元素举办迭代时的别名,
  • index 指 定一个名字,用于暗示在迭代进程中,劳务派遣管理系统,每次迭代到的位置,
  • open 暗示该语句以什么开始,
  • separator 暗示在每次举办迭代之间以什么标记作为脱离 符,
  • close 暗示以什么竣事。
  • 在利用 foreach 的时候最要害的也是最容易堕落的就是 collection 属性,该属性是必需指定的,可是在差异环境 下,该属性的值是纷歧样的,主要有一下3种环境:

    1. 假如传入的是单参数且参数范例是一个List的时候,软件开发,collection 属性值为 list
    2. 假如传入的是单参数且参数范例是一个 array 数组的时候,collection 的属性值为 array
    3. 假如传入的参数是多个的时候,我们就需要把它们封装成一个 Map 了,虽然单参数也可以封装成map,实际上假如你在传入参数的时候,在 breast 内里也是会把它封装成一个 Map 的,map 的 key 就是参数名,所以这个时候 collection 属性值就是传入的 List 或 array 工具在本身封装的 map 内里的 key 。

    下面别离来看看上述三种环境的示例代码:

    1.单参数 List 的范例:

    <select id="dynamicForeachTest" resultType="Blog">
            select * from t_blog where id in
            <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
    </select>

    上述 collection 的值为list,对应的 Mapper 是这样的

    public List<Blog> dynamicForeachTest(List<Integer> ids);

    测试代码:

    @Test
        public void dynamicForeachTest() {
            SqlSession session = Util.getSqlSessionFactory().openSession();
            BlogMapper blogMapper = session.getMapper(BlogMapper.class);
            List<Integer> ids = new ArrayList<Integer>();
            ids.add(1);
            ids.add(3);
            ids.add(6);
            List<Blog> blogs = blogMapper.dynamicForeachTest(ids);
            for (Blog blog : blogs)
                System.out.println(blog);
            session.close();
        }

    2.单参数array数组的范例:

    <select id="dynamicForeacpTest" resultType="Blog">
            select * from t_blog where id in
            <foreach collection="array" index="index" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
    </select>

    上述collection为array,对应的Mapper代码:

    public List<Blog> dynamicForeacpTest(int[] ids);

    对应的测试代码:

    @Test
        public void dynamicForeacpTest() {
            SqlSession session = Util.getSqlSessionFactory().openSession();
            BlogMapper blogMapper = session.getMapper(BlogMapper.class);
            int[] ids = new int[] {1,3,6,9};
            List<Blog> blogs = blogMapper.dynamicForeacpTest(ids);
            for (Blog blog : blogs)
                System.out.println(blog);
            session.close();
        }

    3.本身把参数封装成Map的范例

    <select id="dynamicForeacpTest" resultType="Blog">
            select * from t_blog where title like "%"#{title}"%" and id in
            <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
    </select>

    上述collection的值为ids,是传入的参数Map的key,对应的Mapper代码:

    public List<Blog> dynamicForeacpTest(Map<String, Object> params);

    对应测试代码:

    @Test
        public void dynamicForeacpTest() {
            SqlSession session = Util.getSqlSessionFactory().openSession();
            BlogMapper blogMapper = session.getMapper(BlogMapper.class);
            final List<Integer> ids = new ArrayList<Integer>();
            ids.add(1);
            ids.add(2);
            ids.add(3);
            ids.add(6);
            ids.add(7);
            ids.add(9);
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("ids", ids);
            params.put("title", "中国");
            List<Blog> blogs = blogMapper.dynamicForeacpTest(params);
            for (Blog blog : blogs)
                System.out.println(blog);
            session.close();
        }