1. 程式人生 > 其它 >myBatis( sql片段,foreache)

myBatis( sql片段,foreache)

myBatis(sql片段)

//將片段提取出來,命名後,在引用的地方用<include refid=""></include>
    <sql id="if">
            <if test="title != null">
                and title =#{title}
            </if>
            <if test="author != null">
                and author=#{author}
            </if>
    </sql>

    <!--某列的if模糊查詢,全部if都會判斷-->
    <select id="QueryBlog" resultType="pojo.Blog" parameterType="map">
        select * from myBatis.blog
<where>
    <include refid="if"></include>
</where>
    </select>

注意

  1. 最好基於單表的操作
  2. 不要存在where標籤,where標籤會修改片段符號

foreache

blogMapper.xml

    <select id="QueryBogForeach" resultType="pojo.Blog" parameterType="map">
        /* select * from myBatis.blog where id in(1 ,2 ,3)*/
        select * from myBatis.blog
        <where>
        <foreach collection="ids" item="IID" open="id in (" close=")" separator=",">
          /*這裡內容是每一個IID,IID是ids集合的每一項元素,需要往ids集合填充元素*/
            #{IID}
        </foreach>
        </where>
    </select>

測試

 @org.junit.Test
    public void QueryBogForeach() {
        SqlSession sqlSession = myBatisUtils.getSqlSession();
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);

        Map<String, Object> map = new HashMap<>();

        //建立一個集合填充ids的集合
        ArrayList<Integer> IDs = new ArrayList<>();
        map.put("ids", IDs);
        IDs.add(1);

        List<Blog> blogs = mapper.QueryBogForeach(map);
        for (Blog blogg : blogs) {
            System.out.println(blogg);
        }
        sqlSession.close();
    }