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