VCM后端Java规范

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标准校验
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值