6、动态SQL

if标签

格式:
<if test=",语法 属性=xxx值">
            符合判断的内容
</if>



List<User> selectUser(User user);

<select id="selectUser" resultType="com.example.springdynamicsql.entity.User">
        select id ,name ,pwd from user where
        <if test="name!=null and name!='' ">
            name=#{
    
    name}
        </if>

        <if test="id>0" >
            and id>#{
    
    id}
        </if>
    </select>

where标签

用来包含多个的,当多个if有一个成立的,会自动增加一个where关键字,并去掉if中多余的and、or等

List<User> selectUserwhere(User user);

<select id="selectUserwhere" resultType="com.example.springdynamicsql.entity.User">
        select id ,name,pwd from User
        <where>
            <if test="name !=null and name !='' ">
                name=#{
    
    name}
            </if>
            <if test="id>0">
                or id>#{
    
    id}
            </if>
        </where>
    </select>

foreach标签

标签用于实现对于数组与集合的遍历,对其他使用,需要注意

  1. collection表示要遍历的集合类型List,array等;主要用于sql的in语句中。 学生id是1,2,3,的三个学生
  select * from user where id in (1,2,3);
    public List(User) selectFor(List<Integer> idList);
    List<Integer> list=new...;
    list.add(1);
      list.add(2);
        list.add(3);
  1. open、close、separator为对遍历内容的SQL拼接

foreach方法一

List<Integer> list=new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        userMapper.selectUserFor(list);
        //foreach使用一
    List<User> selectUserFor(List<Integer> list);
    
 <!--foreach使用一
    collection:表示接口中方法参数的类型
        如果是数组就使用array
        如果是list集合使用list
    item是自定义表示数组和集合成员的变量
    close是循环结束时的字符
    separator是集合成员之间的分隔符
    -->

    <select id="selectUserFor" resultType="com.example.springdynamicsql.entity.User">
        select * from user where id in
        <foreach collection="list" item="myid" open="(" close=")" separator=",">
            #{
    
    myid}
        </foreach>
    </select>

foreach方法二

	//foreach使用二
    List<User> selectUserFor02(List<User> userList);

	<select id="selectUserFor02" resultType="com.example.springdynamicsql.entity.User">
        select * from user where id in
        <foreach collection="list" item="user" open="(" close=")" separator=",">
            #{
    
    user.id}
        </foreach>
    </select>


//测试代码
	List<User> list=new ArrayList<User>();
        User user=new User();
        user.setId(1);
        list.add(user);

        user=new User();
        user.setId(2);
        list.add(user);
        userMapper.selectUserFor02(list);

代码片段
标签用于定义SQL片段,以便其它SQL标签的复用,而其他标签使用该SQL片段,需要使用子标签,该标签可以定义SQL语句中的任何部分,所以子标签可以放在动态SQL的任何位置。

	//sql标签中的代码可以通过include子标签调用
  <sql id="UserId">
        select * from user
    </sql>

    <select id="selectUserif" resultType="com.example.springdynamicsql.entity.User">
        <include refid="UserId"></include>	//调用sql代码片段
         where
        <if test="name!=null and name!='' ">
            name=#{
    
    name}
        </if>

        <if test="id>0" >
            and id>#{
    
    id}
        </if>
    </select>

猜你喜欢

转载自blog.csdn.net/m0_53294821/article/details/114576883