Administrator
发布于 2020-07-22 / 1299 阅读 / 0 评论 / 0 点赞

Mybatis 相关语句 Sucha

Mybatis 相关语句 Sucha

1、mybatis中where in的用法->传入的值为List集合的时候

<select id="getMealListByIds" parameterType="arraylist" resultMap="getMealListByIds">
    select id,base_price,staff_price,patient_price
    FROM tb_food_meal_info
    where id in
    <foreach collection="list" open="(" close=")" separator="," item="id">
        #{id}
    </foreach>
</select>

co1lection值有几种情况:
1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2.如果传入的是单参数且参数类型是一个array数组的时候,co1lection的属性值为array
3.如果参数是对象的某个字段

  • 如果user有属性List ids,入参是user对象,那么这个collection="ids"
  • 如果User有属性Role role,其中Role是个对象,role有个属性Listids;如果入参是user对象,那么collection

2、在插入后直接获取到非自增主键用的

<insert id="insert" parameterType="cn.com.smart.common.dto.warehouse.stock.StockDto">		
<!-- 这个是为了在插入后直接获取到非自增主键用的 -->
        <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
            SELECT LOWER(REPLACE(MD5(UUID()),'-',''))
        </selectKey>
  <!-- 会将id赋值给StockDto即传进来的dto --> 
</insert>

3、Mybatis传入List实现批量更新

Dao层写法

/**
     * 批量更新新库存
     * @param list
     * @return
     */
    int updateNewStock(@Param(value = "list") List<GreenBeanMsg> list);

xml具体实现代码

<update id="updateNewStock" parameterType="java.util.List">
    <foreach collection="list" item="bean" index="index" open="" close="" separator=";">
        UPDATE green_beans
        <set>
            stock=#{bean.stock}
        </set>
        <where>
            beanUid = #{bean.beanUid}
        </where>
    </foreach>
</update>

注意的地方:传入的是一个集合,于是在dao层写的方法里加上@Param(value“list”),mybatis将传入的参数看做是一个集合list了。于是,在foreach中的collectio中就要写作“list”;parameterType也定义为"java.util.List"。

注意:这种方法必须在配置连接数据库url后面带一个参数 &allowMultiQueries=true,表示允许批量操作,例 jdbc:mysql://localhost:3306/mysqlTest?characterEncoding=utf-8&allowMultiQueries=true


评论