虽然Mybatis-plus也提供了不错的批量修改的方法,但是我第一次使用的就是Mybatis的,用起来比较顺手一点
直接上代码
Mapper
int updateGtwolist(List<GovernmentOverseasTable2> gtwolist);
Mapper.xml
<update id="updateGtwolist" parameterType="java.util.List">
update government_overseas_table2
<trim prefix="set" suffixOverrides=",">
<trim prefix="is_on_time=case" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.isOnTime !=null and item.isOnTime != ''">
when id=#{item.id} then #{item.isOnTime}
</if>
</foreach>
</trim>
<trim prefix="remarks=case" suffix="end">
<foreach collection="list" item="item" index="index">
<if test="item.remarks !=null and item.remarks != ''">
when id=#{item.id} then #{item.remarks}
</if>
</foreach>
</trim>
</trim>
where id in
<foreach collection="list" item="item" index="index" separator="," open="(" close=")">
#{item.id}
</foreach>
</update>
Service没什么好看的就自动略过了
ServiceImpl
@Override
public Map<String, Object> updateListgtwo(List<GovernmentOverseasTable2> gtlist) {
Map<String,Object> data = new HashMap<String,Object>();
int result = governmentOverseasMapper2.updateGtwolist(gtlist);
if(result == 0){
data.put("code",0);
data.put("msg","更新失败!");
logger.error("用户[更新],结果=更新失败!");
return data;
}
data.put("code",1);
data.put("msg","更新成功!");
logger.info("用户[更新],结果=更新成功!");
return data;
}
Controller(这是个重点)
@Controller
@RequestMapping("goc2")
public class GovernmentOverseasController2 {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private GovernmentOverseasService2 governmentOverseasService2;
/**
* 功能描述: 跳到党员基本情况页面
*/
@RequestMapping("/goc2html")
public String partyManage() {
return "partyStatistics/tableTwo";
}
@RequestMapping("/getGtwo")
@ResponseBody
public List<GovernmentOverseasTable2> getPartyMember() {
logger.info("获取党员基本信息数据数据");
List<GovernmentOverseasTable2> list = governmentOverseasService2.getGtwo();
return list;
}
@RequestMapping("/updatelistGtwos")
@ResponseBody
public Map<String, Object> setGov4(@RequestBody List<GovernmentOverseasTable2> governmentOverseasTable2) {
logger.info("设置其他专项调查情况表[更新]!GovernmentOverseasTable2:" + governmentOverseasTable2);
Map<String, Object> data = new HashMap<String, Object>(1);
//update
data = governmentOverseasService2.updateListgtwo(governmentOverseasTable2);
return data;
}
}
心细的人已经发现了在controller上加的注解是@Controller而不是 @RestController
二者都可以在前端调通接口,但是二者的区别在于,当用前者的时候在方法上必须添加注解@ResponseBody,如果不添加@ResponseBody,就会报上面错误,因为当使用@Controller 注解时,spring默认方法返回的是view对象(页面)。而加上@ResponseBody,则方法返回的就是具体对象了。@RestController的作用就相当于@Controller+@ResponseBody的结合体
不然会报一个这样的错误
Exception processing template "goc2/updatelistGtwos": Error resolving template [goc2/updatelistGtwos], template might no
重中之重就是前端了,对于一个后端开发的小白来说,前端的js真的让人很头大
之前他是这样的,可以说是没有啥任何意义
//提交表单
function formSubmit(){
for (let i = 1; i <= list.length; i++) {
list[i-1].remarks = $("#remarks"+i).val();
list[i-1].isOnTime = $("#isOnTime"+i).val();
}
$.ajax({
type: "POST",
data: list,
async:false,
url: "/goc2/updatelistGtwos",
success: function (data) {
if (data.code == 1) {
layer.alert(data.msg,function(){
layer.closeAll();
});
} else {
layer.alert(data.msg);
layer.closeAll();
}
},
error: function () {
layer.alert("操作请求错误,请您稍后再试",function(){
layer.closeAll();
});
}
});
}
在我咨询了大佬之后,是这样的,是不是感觉高级了很多,还是因为传输的格式的问题,通过这些,前端传输的和后端接收的才是同一种格式(json)
//提交表单
function formSubmit(){
for (let i = 1; i <= list.length; i++) {
list[i-1].remarks = $("#remarks"+i).val();
list[i-1].isOnTime = $("#isOnTime"+i).val();
}
$.ajax({
type: "POST",
data: JSON.stringify(list),
dataType:"json",
contentType:"application/json",
async:false,
url: "/goc2/updatelistGtwos",
success: function (data) {
if (data.code == 1) {
layer.alert(data.msg,function(){
layer.closeAll();
});
} else {
layer.alert(data.msg);
layer.closeAll();
}
},
error: function () {
layer.alert("操作请求错误,请您稍后再试",function(){
layer.closeAll();
});
}
});
}
总结一下,虽然这个前后端一起写让人很苦恼,但是为了更长远的发展还是很有必要的,而且可以让你对前后端之间的关联有一种更好的体验,好处还是非常多的