jdbcUrl上添加allowMultiQueries属性来支持多条SQL批量操作(CRUD)

jdbcUrl如下

jdbcUrl=jdbc:mysql://localhost:8080/dbname?characterEncoding=UTF-8&allowMultiQueries=true

 

注:加上allowMultiQueries=true 才能支持多条的(以分号 ‘;’隔开)SQL执行。

 

业务示例拓展:

1、前端post请求参数

{
	"macList": [{
		"macid": 1,
		"age": 45,
		"number": 3
	}, {
		"macid": 3,
		"age": 24,
		"number": 56
	}]
}

2、Java VO

public class MacVO implements Serializable {

    //.....

	private List<Mac> macList;  //和前端传来的名称要对应,注意List中的元素是Mac对象

    //..... 省略set get
}

注:属性名macList是对应JSON的key名称,List中的元素是Mac对象

3、java Bean

public class Mac implements Serializable {

	//.....

    private Integer macid;
    private Integer age;
    private Integer number;
    
    private String name;
    private String hobby;

    //..... 省略set get
}

3、Controller中的方法

@RequestMapping(value = "/updateMacMsg",method = RequestMethod.POST,produces = "application/json;charset=UTF-8")
@ResponseBody
public Object updateMacMsg(@RequestBody MacVO macVO) {
	//...
	int rows = macService.updateMacMsg(macVO);
	//...	
	return obj;
}

4、Service层

public Integer updateMacMsg(MacVO macVO);

5、MyBatis的Mapper配置xml中写成如下代码,就有批量更新的操作;因此jdbcUrl中加上allowMultiQueries = true

<update id="updateMacMsg" parameterType="MacVO">
	<foreach collection="macList" item="obj" index="index" open="" close="" separator=";">
		update Table_Name
		<set>
			<if test="obj.age != null">
				MAC_AGE = #{obj.age,jdbcType=INTEGER},
			</if>
			<if test="obj.number != null">
				MAC_NUMBER = #{obj.number,jdbcType=INTEGER},
			</if>	
		</set>
		<where>
		    <if test="obj.macid != null">
				AND MAC_ID = #{obj.macid,jdbcType=INTEGER},
			</if>
			<if test="obj.age != null">
				AND MAC_AGE = #{obj.age,jdbcType=INTEGER},
			</if>
			<if test="obj.number != null">
				AND MAC_NUMBER = #{obj.number,jdbcType=INTEGER},
			</if>
		</where>
	</foreach>
</update>

注:

    collection="macList"中的macList是MacVO对象的macList属性。

   前端JOSN对象在VO用List集合来接收,所以SQL中要对List中每个元素对象进行更新操作,用<foreach>遍历整一块动态SQL。


版权声明:本文为mskymt原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。