使用MVC实现CRUD

使用MVC实现CRUD

使用MVC实现CRUD时使用到的方法总结:

  1. 请求发送时的Restful风格

  2. MVC自动注入对象属性

  3. @modelAttribute提前运行,查询已保存数据

  4. 数据隐含模型BindingAwareModelMap使用,与表单提交对象交互

  5. @PathVariable获取URL参数,查询、删除指定id的对象

1-Restful风格

在表单提交时,传统页面只能够提交get与post两个请求,但有办法给表单加上PUT与DELETE请求,操作如下:

<form id="deleteForm" action="${cpt}/emp/${emp.id}" method="post">
	// 声明name属性,为_method,让值等于DELETE    
    <input type="hidden" name="_method" value="DELETE">
</form>

在RequestMapping中指定URL后,然后声明method属性

@RequestMapping(value = "/emp/{id}",method = RequestMethod.PUT)
public String updateEmp(@ModelAttribute("employee")Employee employee){
    System.out.println(employee);
    employeeDao.save(employee);
    return "redirect:/emps";
}

@RequestMapping(value = "/emp/{id}",method = RequestMethod.DELETE)
public String deleteEmp(@PathVariable("id")Integer id){
    employeeDao.delete(id);
    return "redirect:/emps";
}

2-MVC自动注入对象属性

这里的一个细节就是,MVC是如何实现对象属性的注入?

首先在dispatcher-servlet.xml中开启包扫描配置,声明@Repository与@Controller,然后使用@Autowired自动注入对象。

3-@modelAttribute属性

实际应用过程中,每一次修改对象并不是进行全字段修改,如果有些属性不修改,那么MVC会自动将它保存为null,所以这时候需要提前去数据库查询到这个对象,将这个对象的值设置进需要修改的对象,form表单中没有带的字段,就不会为空了,最后再进行保存。

@modelAttribute属性能够在目标方法执行之前运行,是一种面向切面编程的思想,例如这样

@ModelAttribute
public void selectEmp(@RequestParam(value = "id",required = false) Integer id, Model model) {
    if (id != null){
        Employee employee = employeeDao.get(id);
        // 将查询到的模型放入addAttribute中
        model.addAttribute("employee",employee);
    }
    System.out.println("查询到了...emp");
}

/**
 * 保存修改的员工,并展示
 * @param employee
 * @return
 */
@RequestMapping(value = "/emp/{id}",method = RequestMethod.PUT)
// @ModelAttribute注解从隐含模型中获取提前保存的employee对象
public String updateEmp(@ModelAttribute("employee")Employee employee){
    System.out.println(employee);
    employeeDao.save(employee);
    return "redirect:/emps";
}

4-数据隐含模型BindingAwareModelMap使用

SpringMVC除过在方法上传入原生的request和session外还可以使用隐含模型携带数据,用于前后端之间的交互。

这里有Map、Model、ModelMap,虽然他们的类型不同,但他们的底层都使用了BindingAwareModelMap保存数据。他们的关系是

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4XTscEzT-1623202288337)(https://gyazo.com/13ba40b7e14a117a684874ba26bd9dac.png)]

5-@PathVariable

@PathVariable属性能够拿到URL地址上的参数

// 使用大括号{}声明参数,使用方法中的@PathVariable捕捉参数并声明类型。
@RequestMapping(value = "/emp/{id}",method = RequestMethod.DELETE)
public String deleteEmp(@PathVariable("id")Integer id){
    employeeDao.delete(id);
    return "redirect:/emps";
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值