0
点赞
收藏
分享

微信扫一扫

MyBatis批量修改(前后端)

虽然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();
            });
        }
    });

}

总结一下,虽然这个前后端一起写让人很苦恼,但是为了更长远的发展还是很有必要的,而且可以让你对前后端之间的关联有一种更好的体验,好处还是非常多的

举报

相关推荐

0 条评论