VCM后端Java规范

    xiaoxiao2022-07-04  107

    Dao 编写规范


    查询(select)
    查询所有记录// 无参 public List<Map<String, Object>> selectAllXx(); // 多个参数 public List<Map<String, Object>> selectAllXx(Aa aa, Bb bb, Cc cc); // 对象参数 public List<Map<String, Object>> selectAllXx(Map<String, Object> xx); // 一个参数 public List<Map<String, Object>> selectAllXxByAa(Aa aa); 查询多条记录// 无参 public List<Map<String, Object>> selectXxs(); // 多个参数 public List<Map<String, Object>> selectXxs(Aa aa, Bb bb, Cc cc); // 对象参数 public List<Map<String, Object>> selectXxs(Map<String, Object> xx); // 一个参数 public List<Map<String, Object>> selectXxsByAa(Aa aa); 查询一条记录// 无参 public Map<String, Object> selectXx(); // 多个参数 public Map<String, Object> selectXx(Aa aa, Bb bb, Cc cc); // 对象参数 public Map<String, Object> selectXx(Map<String, Object> xx); // 一个参数 public Map<String, Object> selectXxByAa(Aa aa);

    新增(insert)

    新增一条记录// 多个参数 public void insertXx(Aa aa, Bb bb, Cc cc); // 对象参数 public void insertXx(Map<String, Object> xx);

    修改(update)

    修改一条记录// 多个参数 public void updateXx(Aa aa, Bb bb, Cc cc); // 对象参数 public void updateXx(Map<String, Object> xx);

    删除(delete)

    删除一条记录// 一个参数 public void deleteXxByAa(Aa aa); // 多个参数 public void deleteXx(Aa aa, Bb bb, Cc cc); // 对象参数 public void deleteXx(Map<String, Object> xx);

    文档注释(Java Doc Comments)

    需要有 : “方法简要说明” + “参数说明” + “返回值说明”, 对于返回值类型为Map的注释编写举例如下:

    返回一个对象 /** * 方法简要说明 * * @param param * param说明 * @return * * <pre> * { * "key1": "string", * "key2": "integer", * "key3": "boolean", * "key4": "double", * "key5": "date", * "key6": "byte[]", * "key7": "long", * "key8": "decimal", * ...... * } * </pre> */ 返回一个级联对象 /** * 方法简要说明 * * @param param * param说明 * @return * * <pre> * Aa * { * "bb": "object", * ...... * } * Bb * { * "cc": "object", * ...... * } * Cc * { * ...... * } * </pre> */ 返回对象数组 /** * 方法简要说明 * * @param param * param说明 * @return * * <pre> * [ * { * "bb": "object", * ...... * }, * ...... * ] * Bb * { * "cc": "object", * ...... * } * Cc * { * ...... * } * </pre> */

    Service 编写规范


    查询(get)
    查询多条记录// 无参 public List<Map<String, Object>> getXxs(); // 多个参数 public List<Map<String, Object>> getXxs(Aa aa, Bb bb, Cc cc); // 对象参数 public List<Map<String, Object>> getXxs(Map<String, Object> xx); // 分页 + 无参/多参/对象参数 public List<Map<String, Object>> getXxsPage(Page page, ...); 查询一条记录// 无参 public Map<String, Object> getXx(); // 多个参数 public Map<String, Object> getXx(Aa aa, Bb bb, Cc cc); // 对象参数 public Map<String, Object> getXx(Map<String, Object> xx); // 一个参数 public Map<String, Object> getXxByAa(Aa aa);

    新增(add)

    新增一条记录// 多个参数 public void addXx(Aa aa, Bb bb, Cc cc); // 对象参数 public void addXx(Map<String, Object> xx);

    修改(update)

    修改一条记录// 多个参数 public void updateXx(Aa aa, Bb bb, Cc cc); // 对象参数 public void updateXx(Map<String, Object> xx);

    删除(delete)

    删除一条记录// 一个参数 public void deleteXxByAa(Aa aa); // 多个参数 public void deleteXx(Aa aa, Bb bb, Cc cc); // 对象参数 public void deleteXx(Map<String, Object> xx);

    检查是否重复(no repeat)

    返回值: Boolean 方法名: 对象名+字段名+NoRepeat (驼峰命名)

    /** * 医院名称不重复 * * @param hospitalName * 医院名称 * @return */ public Boolean hospitalNameNoRepeat(String hospitalName) { Map<String, Object> hospital = hospitalDao.selectHospitalByName(hospitalName); if (hospital != null) { return Boolean.FALSE; } return Boolean.TRUE; }

    事务控制

    必须添加@Transaction注解声明事务

    Controller 编写规范


    获取资源(GET)

    获取多个资源(分页查询) URI中名词用复数形式, 例如 /articles返回值用ObjectHTTP动词使用Get请求,即@GetMapping注解, 例如: @GetMapping("/articles")方法参数用@RequestParam注解,例如:@RequestParam String aa:表示请求参数和实际参数名称一样且必需@RequestParam(“aa”) String bb:表示请求参数名称为 aa 但被映射到 bb 中@RequestParam(required = false) String aa:表示请求参数和实际参数名称一样且非必需, aa 可能为null@RequestParam(required = false, defaultValue = “”) String aa:表示请求参数和实际参数名称一样且非必需,如果请求中未传递该参数则 aa = “”@RequestParam(value = “bb”, required = false, defaultValue = “”) String aa:表示请求参数名称为bb但被映射到实际参数中,如果请求参数中未传 bb,则 aa = “”方法参数必须使用类类型,不要使用原始类型,如Integer不要用int代码风格: 每行代码中间空一行方法名: get + URI 参数,例如: URI参数为 /users ,则方法名为 getUsers @ApiOperation("分页查询用户") @GetMapping("/users") public Object getUsers(@RequestParam String username, Page page) { username = ParamUtils.escape(username); PageInfo<Map<String, String>> usersPage = userService.getUsersPage(page, username); return usersPage; }

    @PathVariable 注解,如果value值和参数名是相同的,不准加参数(例如:@PathVariable String username 不要@PathVariable(value = “username”) String username或者@PathVariable(“username”) String username)

    代码示例: @ApiOperation("分页查询用户") @GetMapping("/users") public Object getUsersPage(@RequestParam("username") String name, Page page) { username = ParamUtils.escape(username); PageInfo<Map<String, String>> usersPage = userService.getUsersPage(page, username); return usersPage; } 2. 添加 1. URI中名词用复数形式 2. 方法返回值用Object, Http动词使用POST请求,即@PostMapping注解。 * 不准使用GET、PUT、DELETE、PATCH等动词 * 不准使用@RequestMapping注解 3. 方法参数必须使用@RequestBody注解,不准使用@RequestParam注解 4. 返回值: 成功返回ResponseWrapper.buildSuccess(),失败无需处理 5. 方法名: add开头+URI单数形式 6. 对于添加多个采用多次调用添加一个的方式,对于特殊批量新增接口另行处理 代码示例: @ApiOperation("添加角色") @PostMapping("/roles") public Object addRole(@RequestBody JSONObject userJson) { return ResponseWrapper.buildSuccess(); } 3. 修改 1. URI中名词用复数形式+要修改的对象id 2. 方法返回值用Object, Http动词使用PUT请求,即@PutMapping注解。 * 不准使用GET、POST、DELETE、PATCH等动词 * 不准使用@RequestMapping注解 3. 方法参数必须使用@RequestBody注解,不准使用@RequestParam注解 4. 返回值: 成功返回ResponseWrapper.buildSuccess(),失败无需处理 5. 方法名: update开头+URI单数形式 6. 对于修改多个采用多次调用修改一个的方式,对于特殊批量修改接口另行处理 代码示例: @ApiOperation("修改用户") @PutMapping("/users/{id}") public Object updateRole(@RequestBody JSONObject userJson, @PathVariable("id") String userId) { return ResponseWrapper.buildSuccess(); } 4. 删除 1. URI中名词用复数形式+要修改的对象id 2. 方法返回值用Object, Http动词使用DELETE请求,即@DeleteMapping注解。 * 不准使用GET、POST、PUT、PATCH等动词 * 不准使用@RequestMapping注解 3. 方法参数必须使用@RequestBody注解,不准使用@RequestParam注解 4. 返回值: 成功返回ResponseWrapper.buildSuccess(),失败无需处理 5. 方法名: delete开头+URI单数形式 6. 对于删除多个采用多次调用删除一个的方式,对于特殊批量删除接口另行处理 代码示例: @ApiOperation("删除用户") @DeleteMapping("/users/{id}") public Object deleteUser(@PathVariable("id") String userId) { userService.deleteUser(userId); return ResponseWrapper.buildSuccess(); } 5. 字段不重复校验 1. URI中使用"/no-repeat/" + 要校验的对象和字段名(多个单词采用横线-连接)+ "/{name}" 2. 方法返回值用Boolean, Http动词使用GET请求,即@GetMapping注解。 * 不准使用DELETE、POST、PUT、PATCH等动词 * 不准使用@RequestMapping注解 3. 方法参数必须使用@PathVariable注解,不准使用@RequestParam注解或@RequestBody注解 4. 方法名: 字段名驼峰+NoRepeat 5. 强制:对于Service中用到的boolean类型全部提升为Boolean包装类(虽然jdk1.6提供自动装箱和拆箱工作) @ApiOperation("字典类型值不重复") @GetMapping("/no-repeat/dict-type-value/{name}") public Boolean dictTypeValueNoRepeat(@PathVariable("name") String name) { return dictService.dictTypeValueNoRepeat(name); } 6. 参数校验 1. 对于Controller入口必须进行参数校验 2. 对于校验出错的直接抛异常。例如throw new ParamException(key + "不能为空"); 3. PramUtils提供基础的参数处理工具 4. 对于@PathVariable参数必须使用正则校验 5. 对于@RequestParam、@RequestBody参数可以使用自定义方法校验,也可以使用JSR303标准校验
    最新回复(0)