如何写最基础的CRUD

本文基于Java,SpringMVC框架。MVC即Model+View+Controller。即使不太确切,我喜欢将其理解为:浏览器与数据库建立联系的方式。(Browser是浏览器,DB是数据库)

Controller 层

  • 掰收序列化信息(JSON)
  • 通过注解进行转换
  • @RequestParam(可默认不写)
    @DeleteMapping
    @ApiOperation("删除分类")
    public Result<String> deleteById(Long id){}
    查询字符串传递id参数:/admin/category?id=1
  • @PathVariable:
    @DeleteMapping("/{id}")//嵌入点
    @ApiOperation("删除分类")
    public Result<String> deleteById(@PathVariable Long id){}
    仅在URL后嵌入参数:/admin/category/1
  • @RequestBody:反序列化为实体类
    @PostMapping
    @ApiOperation("新增分类")
    public Result<String> addCategory(@RequestBody Category category) { // 业务逻辑 }

Service 层

一般来说,Service看有没有接口,有的话直接看Impl实现类会比较具体。

  • 新增(Insert): 需要将业务中的对象封装为程序中的完整实体类,再对应添加完整实体类中应该添加但业务对象缺失的部分(通过拷贝+set方法),好处是可以通过一次Mapper层编写实现不同新增对象的数据操作。(数据完整性/业务隔离/易维护) 说人话:把不健全的变得健全,这样方便数据操作时只用处理健全的一种情况。
  • 删除(Delete): 检查删除业务是否影响其余业务(调用其他Mapper),再进行删除处理
  • 更新(Update): 处理逻辑上与新增相同,封装+填充;但Mapper层有所不同,一般通过if判断需要更新哪些条件(实际上思想也是一致的,将所有情况假设好再使用if与where排除,只需写一次)
  • 查询(Select): Select的业务逻辑并不难,明确好输入参数,以及输出的是参数/对象/列表即可。

Mapper 层

  • 新增:
  Insert into 表名(字段名1,字段名2......) VALUES (#{对应对应参数1},#{对应对应参数2}...)
  • 删除
  Delete from 表名 where id = #{id}

注:若是删除某个属性,其实是通过update的更新逻辑去实现的

  • 更新
  Update 表名 
  SET column_name1 = new_value1,
      column_name2 = new_value2
  WHERE condition;

大部分会在xml进行操作,更加解耦与易管理,因为只需写一次

  • 查询
  Select * from 表名

一般是在xml中操作,需要明确parameterType和resultType会好一些。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注