Mybatis 标签 [ trim / foreach]

1、trim(可以用来代替 where

可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀,与之对应的属性是prefix和suffix;

可以把包含内容的首部某些内容忽略,也可以把尾部的某些内容忽略,对应的属性是prefixOverrides和suffixOverrides;

案例:

<trim  prefix="where " ,prefixOverrrides =" and  |or" ,  suffix=" set" , suffixOverrides=", " ></trim>

prefixOverrides 属性会忽略通过管道分隔的文本序列(注意此例中的空格也是必要的)

select * from user 
  <trim prefix="WHERE" prefixOverrides="AND |OR">
    <if test="name != null and name.length()>0"> AND name=#{name}</if>
    <if test="gender != null and gender.length()>0"> AND gender=#{gender}</if>
  </trim>



update user
  <trim prefix="set" suffixOverrides="," suffix=" where id = #{id} ">
    <if test="name != null and name.length()>0"> name=#{name} , </if>
    <if test="gender != null and gender.length()>0"> AND gender=#{gender} ,  </if>
  </trim>



<insert id="save" parameterType="NoticeEntity">
        INSERT INTO S_NOTICE 
        <trim prefix="(" suffix=")" suffixOverrides=",">
            ID,
            <if test="title != null">TITLE,</if>
            <if test="content != null">CONTENT,</if>
            <if test="noticeStatus != null">NOTICE_STATUS,</if>
            <if test="createdBy != null">CREATED_BY,</if>
            CREATED_TS,
            <if test="lastUpdBy != null">LAST_UPD_BY,</if>
            LAST_UPD_TS,
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            SYS_GUID(),
            <if test="title != null">#{title,jdbcType=VARCHAR},</if>
            <if test="content != null">#{content,jdbcType=VARCHAR},</if>
            <if test="noticeStatus != null">#{noticeStatus,jdbcType=VARCHAR},</if>
            <if test="createdBy != null">#{createdBy,jdbcType=VARCHAR},</if>
            systimestamp,
            <if test="lastUpdBy != null">#{lastUpdBy,jdbcType=VARCHAR},</if>
            systimestamp,
        </trim>
    </insert>

2、foreach(查询in,批量插入)

<foreach  参数如下.......></foreach>

collection:参数名称,根据Mapper接口的参数名确定,也可以使用@Param注解指定参数名

item:参数调用名称,通过此属性来获取集合单项的值

open:相当于prefix,即在循环前添加前缀

close:相当于suffix,即在循环后添加后缀

index:索引、下标

separator:分隔符,每次循环完成后添加此分隔符

 

in查询

mapper接口:
	  List<Employees> getEmployeesListParams(@Param("singleList") List<String> employeeIds);

          List<Employees> getEmployeesArrayParams(@Param("singleArry") String[] employeeIds);

          List<Employees> getEmployeesMapParams(Map<String,Object> params);


XML实现:
    	<select id="getEmployeesListParams" resultType="Employees">
            select *
            from EMPLOYEES e
            where e.EMPLOYEE_ID in
            <foreach collection="singleList" item="employeeId" index="index"
                open="(" close=")" separator=",">
                #{employeeId}
            </foreach>
        </select>



 <select id="getEmployeesArrayParams" resultType="Employees">
        select *
        from EMPLOYEES e
        where e.EMPLOYEE_ID in
        <foreach collection="singleArry" item="employeeId" index="index"
            open="(" close=")" separator=",">
            #{employeeId}
        </foreach>
    </select>



<select id="getEmployeesMapParams" resultType="Employees">
        select *
        from EMPLOYEES e
        <where>
            <if test="departmentId!=null and departmentId!=''">
                e.DEPARTMENT_ID=#{departmentId}
            </if>
            <if test="employeeIdsArray!=null and employeeIdsArray.length!=0">
                AND e.EMPLOYEE_ID in
                <foreach collection="employeeIdsArray" item="employeeId"
                    index="index" open="(" close=")" separator=",">
                    #{employeeId}
                </foreach>
            </if>
        </where>
    </select>

tips:此处没有 @Param("singleLIst") 注解时,XML里只能是 collection="list"

         此处没有 @Param("singleArry") 注解时,XML里只能是 collection="array"

        此处Map:不单单forech中的collection属性是map.key, 其它所有属性都是map.key,比如下面的departmentId

如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key.

 

批量插入

mapper接口
         int insertMultiUsers(@Param("users") List<User> users);

XML实现:
    	<insert id="insertMultiUsers">
    		insert into user(user_name,gender,email,address,dept_id)
    		values
    		<foreach collection="users" item="user" separator=",">
    			(#{user.userName},#{user.gender},#{user.email},#{user.address},#{user.deptId})
    		</foreach>
    	</insert>

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatis是一种Java的持久层框架,提供了多种功能强大的SQL语句拼接方式,trimforeach是其中两种常用的拼接方式。 trim元素可以在 SQL 语句拼接时,将多余的 SQL 片段去除,从而保证 SQL 语句的正确性。trim元素常用的属性有prefix、suffix、prefixOverrides和suffixOverrides。 而foreach元素则可以对一个集合进行遍历,并将集合中的元素作为参数传入到SQL语句中,从而实现批量操作。foreach元素常用的属性有collection、item、index、separator等。 下面以一个例子来介绍trimforeach的用法: 假设有一个需求是查询某个部门中员工的信息,但是查询条件可能有多个,比如姓名、年龄、性别等。我们可以使用trim元素对SQL语句进行拼接,如下所示: ``` <select id="queryEmployees" parameterType="map" resultType="Employee"> SELECT * FROM employee <trim prefix="WHERE" prefixOverrides="AND | OR "> <if test="name != null and name != ''"> AND name = #{name} </if> <if test="age != null and age != ''"> AND age = #{age} </if> <if test="gender != null and gender != ''"> AND gender = #{gender} </if> </trim> </select> ``` 上述代码中,我们使用了trim元素来拼接SQL语句中的WHERE关键字和多余的AND或OR关键字,从而保证SQL语句的正确性。 而如果我们需要查询多个员工信息,可以使用foreach元素对员工id集合进行遍历,如下所示: ``` <select id="queryEmployeesByIds" parameterType="list" resultType="Employee"> SELECT * FROM employee WHERE id IN <foreach item="id" collection="ids" open="(" separator="," close=")"> #{id} </foreach> </select> ``` 上述代码中,我们使用了foreach元素来遍历员工id集合,并将集合中的每个元素作为参数传入到SQL语句中的IN条件中,从而实现批量操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值