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
- 返回值用Object
- HTTP动词使用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标准校验