代码规范 controller service mapper

  1. swagger为接口文档
     
  2. 接口参数必须带说明
     
  3. 接口命名参考http规范
  4. 根据id得到唯一信息建议不用path,用?
  5. 查询多个参数建议封装对象,使用post 放在body里面 ,requestBody
  6. 接口规则
    package ink.taigu.yingke.user.account.web.controller.account;
    
    import com.github.pagehelper.PageInfo;
    import ink.taigu.yingke.common.common.param.EnableParam;
    import ink.taigu.yingke.common.common.wrapper.Result;
    import ink.taigu.yingke.user.account.client.dto.account.AccountDTO;
    import ink.taigu.yingke.user.account.client.dto.account.UpdateAccountDTO;
    import ink.taigu.yingke.user.account.client.param.account.AccountGetParam;
    import ink.taigu.yingke.user.account.client.param.account.AccountPwdParam;
    import ink.taigu.yingke.user.account.client.param.account.AccountQueryParam;
    import ink.taigu.yingke.user.account.client.service.account.AccountFacadeService;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiImplicitParam;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import javax.validation.Valid;
    
    /**
     * 账号
     * @author dell
     */
    @Api(tags = "001001000_user_account|&账号", description = "账号")
    @RestController
    @RequestMapping("/user/account")
    public class AccountController {
    
        /**
     * 账号
     */
     @Autowired
     private AccountFacadeService accountFacadeService;
    
    
     @ApiOperation(value = "001001001_user_account_add|&添加账号", notes = "添加账号")
        @PostMapping("/add")
        public Result<Integer> addAccount(@Valid @RequestBody AccountDTO accountDTO) {
    
            return accountFacadeService.addAccount(accountDTO);
     }
    
        @ApiOperation(value = "001001002_user_account_update|&修改账号", notes = "修改账号")
        @PostMapping("/update")
        public Result<Integer> updateAccount(@Valid @RequestBody UpdateAccountDTO updateAccountDTO) {
    
            return accountFacadeService.updateAccount(updateAccountDTO);
     }
    
        @ApiOperation(value = "001001003_user_account_enable_set|&设置账号可用不可用", notes = "设置账号可用不可用")
        @PostMapping("/enable/set")
        public Result<Integer> setAccountEnable(@Valid @RequestBody EnableParam enableParam) {
            return accountFacadeService.setAccountEnable(enableParam);
     }
    
    
        @ApiOperation(value = "001001004_user_account_pwd_reset|&重置账号密码", notes = "重置账号密码")
        @PostMapping("/pwd/reset")
        public Result<Integer> resetPassword(@Valid @RequestBody AccountPwdParam accountPwdParam) {
    
            return accountFacadeService.resetPassword(accountPwdParam);
     }
    
        @ApiOperation(value = "001001005_user_account_get|&根据ID获取一个账号", notes = "根据ID获取一个账号")
        @ApiImplicitParam(name = "accountId", value = "账号ID", required = true, dataType = "Long")
        @GetMapping("/get")
        public Result<AccountDTO> getByAccountId(@RequestParam("accountId") Long accountId) {
    
            return accountFacadeService.getByAccountId(accountId);
     }
    
        @ApiOperation(value = "001001006_user_account_condition_get|&根据条件获取一个账号", notes = "根据条件获取一个账号")
        @PostMapping("/condition/get")
        public Result<AccountDTO> getByAccountParam(@RequestBody AccountGetParam accountGetParam) {
            return accountFacadeService.getByAccountParam(accountGetParam);
     }
    
        @ApiOperation(value = "001001007_user_account_query|&分页查询账号", notes = "分页查询账号")
        @PostMapping("/query")
        public Result<PageInfo<AccountDTO>> queryByAccountQueryParam(@RequestBody AccountQueryParam accountQueryParam) {
    
            return accountFacadeService.queryByAccountQueryParam(accountQueryParam);
     }
    
        @ApiOperation(value = "001001008_user_account_exist|&判断账号是否存在", notes = "判断账号是否存在")
        @PostMapping("/exist")
        public Result<Boolean> accountIfExist(@RequestBody AccountGetParam accountGetParam) {
            return accountFacadeService.ifExistAccount(accountGetParam);
     }
    
    }

     

     

     

     

  7. code说明

    swagger为接口文档

    接口参数必须带说明

    接口命名参考http规范 根据id得到唯一信息建议不用path,用? 查询多个参数建议封装对象,使用post 放在body里面 ,requestBody 接口规则
    package ink.taigu.yingke.user.account.web.controller.account;
    
    import com.github.pagehelper.PageInfo;
    import ink.taigu.yingke.common.common.param.EnableParam;
    import ink.taigu.yingke.common.common.wrapper.Result;
    import ink.taigu.yingke.user.account.client.dto.account.AccountDTO;
    import ink.taigu.yingke.user.account.client.dto.account.UpdateAccountDTO;
    import ink.taigu.yingke.user.account.client.param.account.AccountGetParam;
    import ink.taigu.yingke.user.account.client.param.account.AccountPwdParam;
    import ink.taigu.yingke.user.account.client.param.account.AccountQueryParam;
    import ink.taigu.yingke.user.account.client.service.account.AccountFacadeService;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiImplicitParam;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import javax.validation.Valid;
    
    /**
     * 账号
     * @author dell
     */
    @Api(tags = "001001000_user_account|&账号", description = "账号")
    @RestController
    @RequestMapping("/user/account")
    public class AccountController {
    
        /**
     * 账号
     */
     @Autowired
     private AccountFacadeService accountFacadeService;
    
    
     @ApiOperation(value = "001001001_user_account_add|&添加账号", notes = "添加账号")
        @PostMapping("/add")
        public Result<Integer> addAccount(@Valid @RequestBody AccountDTO accountDTO) {
    
            return accountFacadeService.addAccount(accountDTO);
     }
    
        @ApiOperation(value = "001001002_user_account_update|&修改账号", notes = "修改账号")
        @PostMapping("/update")
        public Result<Integer> updateAccount(@Valid @RequestBody UpdateAccountDTO updateAccountDTO) {
    
            return accountFacadeService.updateAccount(updateAccountDTO);
     }
    
        @ApiOperation(value = "001001003_user_account_enable_set|&设置账号可用不可用", notes = "设置账号可用不可用")
        @PostMapping("/enable/set")
        public Result<Integer> setAccountEnable(@Valid @RequestBody EnableParam enableParam) {
            return accountFacadeService.setAccountEnable(enableParam);
     }
    
    
        @ApiOperation(value = "001001004_user_account_pwd_reset|&重置账号密码", notes = "重置账号密码")
        @PostMapping("/pwd/reset")
        public Result<Integer> resetPassword(@Valid @RequestBody AccountPwdParam accountPwdParam) {
    
            return accountFacadeService.resetPassword(accountPwdParam);
     }
    
        @ApiOperation(value = "001001005_user_account_get|&根据ID获取一个账号", notes = "根据ID获取一个账号")
        @ApiImplicitParam(name = "accountId", value = "账号ID", required = true, dataType = "Long")
        @GetMapping("/get")
        public Result<AccountDTO> getByAccountId(@RequestParam("accountId") Long accountId) {
    
            return accountFacadeService.getByAccountId(accountId);
     }
    
        @ApiOperation(value = "001001006_user_account_condition_get|&根据条件获取一个账号", notes = "根据条件获取一个账号")
        @PostMapping("/condition/get")
        public Result<AccountDTO> getByAccountParam(@RequestBody AccountGetParam accountGetParam) {
            return accountFacadeService.getByAccountParam(accountGetParam);
     }
    
        @ApiOperation(value = "001001007_user_account_query|&分页查询账号", notes = "分页查询账号")
        @PostMapping("/query")
        public Result<PageInfo<AccountDTO>> queryByAccountQueryParam(@RequestBody AccountQueryParam accountQueryParam) {
    
            return accountFacadeService.queryByAccountQueryParam(accountQueryParam);
     }
    
        @ApiOperation(value = "001001008_user_account_exist|&判断账号是否存在", notes = "判断账号是否存在")
        @PostMapping("/exist")
        public Result<Boolean> accountIfExist(@RequestBody AccountGetParam accountGetParam) {
            return accountFacadeService.ifExistAccount(accountGetParam);
     }
    
    }

     

     

     

     

    code说明

     项目 地址code数字编码 子分类一地址code数字编码操作地址code数字编码最后接口地址最后接口Code
    1user-center用户/useruser_001账户accout/user/accoutuser_account_001添加/user/accout/addadd001/user/accout/add
     001001001_user_account_add
    2     公司company/user/companyuser_company_002     001002
    3     公司员工company/employ/user/company/employuser_company_employ_002     001002
    4gateway-center用户/useruser_001角色role/user/roleuser_role_003     001003
    5     角色资源resource/user/role/resourceuser_role_resource_003     
    001003
    6     角色菜单menu/user/role/menuuser_role_menu_003     001003
    7     角色模块module/user/role/moduleuser_role_module_003     001003
    8     微信wechat/user/wechatuser_wechat_004     001004

     

    函数排序。add,update,set操作等非幂等操作,然后是查询操作,先根据得到一个什么,后分页查询。

    状态,可用不可用,不要在update里修改,提供单独接口函数。update只修改基础信息。 feign和controller一起改。 controller和service函数名相同。 查询函数写法。
    111参数检查
    222分页设置
    333转型返回
    @Override
    public Result<PageInfo<CompanyDTO>> queryCompanyByQueryParam(CompanyQueryParam companyQueryParam) {
        if (ifAllFieldNull(companyQueryParam)) {
            log.info("companyQueryParam对象或者对象属性为null");
     return Result.createFailure(CommonMessage.PARAM_EMPTY);
     }
        PageHelper.startPage(companyQueryParam.getPageNum(), companyQueryParam.getPageSize());
     List<CompanyPO> companyPOList = companyMapper.selectByPage(companyQueryParam);
     PageInfo<CompanyPO> companyPOPageInfo = new PageInfo<>(companyPOList);
     return Result.createSuccess(MyBeanUtils.convertPageInfoList(companyPOPageInfo, CompanyDTO.class));
    }
    非幂等函数写法update,add。
    111参数检查
    222规则检查,唯一索引
    333能和add或者其他规则一起写的检查就一起写一份
    444赋值
    555返回
    666调用方传Code防止重复提交
    @Override
    @Transactional
    public Result<Integer> updateCompany(UpdateCompanyDTO updateCompanyDTO) {
        if (ifAllFieldNull(updateCompanyDTO)) {
            log.info("updateCompanyDTO对象或者对象属性为null");
     return Result.createFailure(CommonMessage.PARAM_EMPTY);
     }
        CompanyPO operateCompanyPO = MyBeanUtils.convert(updateCompanyDTO, CompanyPO.class);
     //ID不为空
     if (null == operateCompanyPO.getCompanyId()) {
            log.info(CommonMessage.ID_EMPTY.getMsg());
     return Result.createFailure(CommonMessage.ID_EMPTY);
     }
        if (operateCompanyPO.getCompanyId().longValue() <= 0) {
            log.info(CommonMessage.ID_ZERO.getMsg());
     return Result.createFailure(CommonMessage.ID_ZERO);
     }
        //检查
     Result<Integer> checkCompanyResult = this.checkCompany(operateCompanyPO);
     if (null != checkCompanyResult && !checkCompanyResult.ifSuccess()) {
            return checkCompanyResult;
     }
        //公司全称唯一
     CompanyGetParam companyGetParam = new CompanyGetParam();
     companyGetParam.setFullName(operateCompanyPO.getFullName());
     CompanyPO companyPO = companyMapper.selectByGetParam(companyGetParam);
     if (null != companyPO && companyPO.getCompanyId() != operateCompanyPO.getCompanyId()) {
            log.info(CompanyMessage.COMPANY_FULL_NAME_IS_EXIST.getMsg());
     return Result.createFailure(CompanyMessage.COMPANY_FULL_NAME_IS_EXIST);
     }
        //赋值
     //修改待审核
     operateCompanyPO.setAuditStatus(CompanyAuditStatus.TO_AUDIT.getCode());
     operateCompanyPO.setMaterialStatus(CompanyMaterialStatus.UPDATE_TO_AUDIT.getCode());
     //设置公司简称
     if (StringUtils.isEmpty(operateCompanyPO.getShotName())) {
            operateCompanyPO.setShotName(operateCompanyPO.getFullName());
     }
        return Result.createSuccess(companyMapper.updateByPrimaryKeySelective(operateCompanyPO));
    }

    接口分类

    类型说明备注例子
    add*添加参数*DTO
    addCompany(@Valid @RequestBody CompanyDTO companyDTO)
    update*修改参数Update*DTO 必须带Id
    updateCompany(@Valid @RequestBody UpdateCompanyDTO companyDTO)

     

    set*设置状态和可用不可用参数
    statusTypeParam
    enableParam
    setCompanyAudit(@Valid @RequestBody StatusTypeParam statusTypeParam)
    getById根据Id得到一个参数Id
     getCompanyById(@RequestParam("companyId") Long companyId) 
    @RequestParam要添加属性值
    get根据唯一条件得到一个参数
    companyGetParam

    其实对应数据库里的唯一索引

    getCompanyByParam(@RequestBody CompanyGetParam companyGetParam)
    query分页查询多个参数
    companyQueryParam

     

    queryCompanyByQueryParam(@RequestBody CompanyQueryParam companyQueryParam)
    其他特殊   

     

    mapper(组合查询获取唯一一个对象,获取一组对象,insert,update,selectById,其他操作)
    xml里面有*GetParam得到唯一一个对象,有*QueryParam构造组合查询,可以用<if test=判断是否为空>,可以用<where>去掉and。其他delete ,insert,select不建议使用 if test做成组合查询,不建议使用where,容易多操作数据。 

     

     
                    
                     
                     
                     
                     
                     
                     
                     

     

  8. 排序。add,update,set操作等非幂等操作,然后是查询操作,先根据得到一个什么,后分页查询。

  9. 状态,可用不肯用不要在update里修改,提供单独函数。update只修改基础信息。
  10. feign和controller一起改。
  11. controller和service函数名相同。
  12. 查询函数写法。
    111参数检查
    222分页设置
    333转型返回
    @Override
    public Result<PageInfo<CompanyDTO>> queryCompanyByQueryParam(CompanyQueryParam companyQueryParam) {
        if (ifAllFieldNull(companyQueryParam)) {
            log.info("companyQueryParam对象或者对象属性为null");
     return Result.createFailure(CommonMessage.PARAM_EMPTY);
     }
        PageHelper.startPage(companyQueryParam.getPageNum(), companyQueryParam.getPageSize());
     List<CompanyPO> companyPOList = companyMapper.selectByPage(companyQueryParam);
     PageInfo<CompanyPO> companyPOPageInfo = new PageInfo<>(companyPOList);
     return Result.createSuccess(MyBeanUtils.convertPageInfoList(companyPOPageInfo, CompanyDTO.class));
    }
  13. 非幂等函数写法update,add。
    111参数检查
    222规则检查,唯一索引
    333能和add或者其他规则一起写的检查就一起写一份
    444赋值
    555返回
    @Override
    @Transactional
    public Result<Integer> updateCompany(UpdateCompanyDTO updateCompanyDTO) {
        if (ifAllFieldNull(updateCompanyDTO)) {
            log.info("updateCompanyDTO对象或者对象属性为null");
     return Result.createFailure(CommonMessage.PARAM_EMPTY);
     }
        CompanyPO operateCompanyPO = MyBeanUtils.convert(updateCompanyDTO, CompanyPO.class);
     //ID不为空
     if (null == operateCompanyPO.getCompanyId()) {
            log.info(CommonMessage.ID_EMPTY.getMsg());
     return Result.createFailure(CommonMessage.ID_EMPTY);
     }
        if (operateCompanyPO.getCompanyId().longValue() <= 0) {
            log.info(CommonMessage.ID_ZERO.getMsg());
     return Result.createFailure(CommonMessage.ID_ZERO);
     }
        //检查
     Result<Integer> checkCompanyResult = this.checkCompany(operateCompanyPO);
     if (null != checkCompanyResult && !checkCompanyResult.ifSuccess()) {
            return checkCompanyResult;
     }
        //公司全称唯一
     CompanyGetParam companyGetParam = new CompanyGetParam();
     companyGetParam.setFullName(operateCompanyPO.getFullName());
     CompanyPO companyPO = companyMapper.selectByGetParam(companyGetParam);
     if (null != companyPO && companyPO.getCompanyId() != operateCompanyPO.getCompanyId()) {
            log.info(CompanyMessage.COMPANY_FULL_NAME_IS_EXIST.getMsg());
     return Result.createFailure(CompanyMessage.COMPANY_FULL_NAME_IS_EXIST);
     }
        //赋值
     //修改待审核
     operateCompanyPO.setAuditStatus(CompanyAuditStatus.TO_AUDIT.getCode());
     operateCompanyPO.setMaterialStatus(CompanyMaterialStatus.UPDATE_TO_AUDIT.getCode());
     //设置公司简称
     if (StringUtils.isEmpty(operateCompanyPO.getShotName())) {
            operateCompanyPO.setShotName(operateCompanyPO.getFullName());
     }
        return Result.createSuccess(companyMapper.updateByPrimaryKeySelective(operateCompanyPO));
    }
  14. 接口分类

    类型说明备注例子
    add*添加参数*DTO
    addCompany(@Valid @RequestBody CompanyDTO companyDTO)
    update*修改参数Update*DTO 必须带Id
    updateCompany(@Valid @RequestBody UpdateCompanyDTO companyDTO)

     

    set*设置状态和可用不可用参数
    statusTypeParam
    enableParam
    setCompanyAudit(@Valid @RequestBody StatusTypeParam statusTypeParam)
    getById根据Id得到一个参数Id
     getCompanyById(@RequestParam("companyId") Long companyId) 
    @RequestParam要添加属性值
    get根据唯一条件得到一个参数
    companyGetParam

    其实对应数据库里的唯一索引

    getCompanyByParam(@RequestBody CompanyGetParam companyGetParam)
    query分页查询多个参数
    companyQueryParam

     

    queryCompanyByQueryParam(@RequestBody CompanyQueryParam companyQueryParam)
    其他特殊   

     

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: POJO:简单Java对象,是一种普通的Java对象,没有任何限制和约束,可以用于任何Java应用程序中。 Service:服务层,通常用于业务逻辑的处理,是应用程序的核心部分。 Mapper:数据访问层,用于与数据库进行交互,提供数据的增删改查等操作。 Controller:控制层,用于接收用户请求,调用服务层处理业务逻辑,并返回响应结果给用户。 ### 回答2: POJO是一个简单的Java对象,它没有任何依赖关系和规范,可以通过getter和setter方法访问其属性。POJO通常用于表示系统中的业务实体。在MVC架构中,ServiceMapperController都是基于POJO的开发模式。 Service是业务逻辑层,负责业务逻辑的处理和调用Dao层完成数据库操作。Service层一般是接口和实现类结合使用的,是Controller与Dao层之间的中间层。Service层主要负责处理业务逻辑和事务控制,保证系统的稳定性和一致性。Service层中的方法应该尽量独立,可以在各种情况下调用和测试。 Mapper是数据访问层,负责对数据库的访问和操作。Mapper使用了MyBatis框架来实现数据访问层的编写,可以使用Mapper.xml进行配置和操作。Mapper层中的方法通常与数据库查询和更新操作相关。Mapper使用了ORM(Object Relational Mapping)来实现对象与数据之间的映射。 Controller是表现层,负责处理用户请求和响应。Controller层与Service层交互,负责将页面展示的数据交给Service层进行业务逻辑处理,并将处理结果返回给页面展示。Controller层的方法应该是请求链接的处理器,主要负责转向页面或者将DTO转换成POJO或VO,然后调用Service层的方法进行业务处理。 总之POJO、ServiceMapperControllerJava应用程序开发模式中不可或缺的一部分。POJO作为系统的核心实体,Service层负责处理业务逻辑和事务控制,Mapper层负责对数据库的访问和操作,Controller层负责处理用户请求和响应。它们之间的良好协作,是构建一个完整功能的应用程序必不可少的一部分。 ### 回答3: POJO、ServiceMapperController,它们是一种常见的软件架构中的四个概念。它们分别代表了持久层、业务层、数据访问层和控制层。 POJO代表的是Plain Old Java Object,即一个普通的Java对象。它并不依赖于任何特定平台或技术,一般用来承载一个实体类或模型类。POJO类通常是定义了成员属性和对应的getter和setter方法,与其他类并没有太大的差别,是整个架构的基础。 Service层(服务层)是指应用程序的一个重要组成部分,它主要实现业务逻辑功能,通常包含了对POJO组件的调用,处理业务逻辑,分离控制逻辑与视图逻辑,并将数据返回控制层。 Mapper层(持久层)的主要作用是将数据从数据库中读出并映射到内存中相应的POJO对象中。对于关系型数据库而言,一般会使用ORM框架来实现Mapper层的功能。 Controller层(控制层)是整个系统的入口,用来响应用户请求,起到用户界面与后台逻辑的桥梁作用。Controller层一般包含了业务逻辑、校验逻辑和业务数据翻译逻辑。当用户向系统提交请求时,Controller层会接收请求,解析请求参数,调用Service层的逻辑进行处理,并根据处理结果组装返回给用户的数据。 以上四个概念是软件框架中非常重要的四个关键点,不同的开发者根据自己的习惯和项目要求对这些概念进行不同的划分和组织。在大型项目中,通常会将各层的代码分开存放并通过一定方式进行交互,以达到通用性、可维护性、可扩展性等优秀的设计目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值