(春云一步步实现广告系统)6。服务实现,Zuul配置及测试

   DAO层设计实现   

这里我们使用<代码>春数据JPA> Mybatis>   

 <=坝镅詊ava代码类>/* *
  * AdUserRepository用户数据库操作接口
  *继承自JpaRepository第一个参数AdUser代表当前要操作的实体类的类定义,第二个参数长表示该类的主键类型
  *
  * @author & lt; a href=" mailto: magicianisaac@gmail.com”祝辞Isaac.Zhang
  */公共接口AdUserRepository延伸JpaRepository{/* *
  *根据用户名称获取用户
  *
  * @param用户名名称
  * @return用户对象
  */AdUser findByUserName(字符串的用户名);
  
  ListfindAllByUserName(字符串的用户名);
  } 
  
      <李>   

    JPARepository的默认实现方法,如果我们只是继承了<代码> JPARepository> CRUD 操作的,如下:

      

    [春云一步步实现广告系统)6。服务实现,Zuul配置,测试

      李   
  功能服务实现   

创建服务包,依然以用户操作为例,创建<代码> com.sxzhongf.ad.service.IUserService 和<代码> com.sxzhongf.ad.service.impl.UserServiceImpl ,<代码> UserServiceImpl 实现了<代码> IUserService>   

      <李>创建<代码> IUserService 接口   
  
 <=坝镅詊ava代码类>/* *
  * IUserService用户服务
  *
  * @author & lt; a href=" mailto: magicianisaac@gmail.com”祝辞Isaac.Zhang |若初& lt;/a>
  */公共接口IUserService {/* *
  *创建用户接口
  *
  * @param userRequestVO {@link userRequestVO}
  * @return {@link UserResponseVO}
  * @throws AdException错误
  */UserResponseVO createUser (UserRequestVO UserRequestVO)抛出AdException;
  
  ListfindAllByUserName(字符串的用户名);
  } 
     <李>使用<代码> IUserService 接口      
 <=坝镅詊ava代码类>/* *
  * UserServiceImpl用户服务
  *
  * @author & lt; a href=" mailto: magicianisaac@gmail.com”祝辞Isaac.Zhang |若初& lt;/a>
  */@Slf4j
  @ service
  公共类UserServiceImpl实现IUserService {
  
  私人最终AdUserRepository userRepository;
  
  @ autowired
  公共UserServiceImpl (AdUserRepository userRepository) {
  这一点。userRepository=userRepository;
  }/* *
  *创建用户
  *
  * @param userRequestVO {@link userRequestVO}
  * @return结果{@link UserResponseVO}
  */@Override
  @ transactional
  公共UserResponseVO createUser (UserRequestVO UserRequestVO)抛出AdException {
  如果(! userRequestVO.validate ()) {
  日志。错误(“请求参数错误:{}”,userRequestVO);
  把新AdException (Constants.ErrorMessage.REQUEST_PARAM_ERROR);
  }//查重
  AdUser existUser=userRepository.findByUserName (userRequestVO.getUserName ());
  如果(existUser !=null) {
  日志。错误(“{}用户是不存在的。”userRequestVO.getUserName ());
  把新AdException (Constants.ErrorMessage.USER_EXIST);
  }
  AdUser用户=userRepository。保存(新AdUser (userRequestVO.getUserName (), CommonUtils.md5 (userRequestVO.getUserName ())));
  log.info(“当前用户是:{}”,用户);
  返回新UserResponseVO (user.getUserId (), user.getUserName (), user.getToken (),
  user.getCreateTime (), user.getUpdateTime ());
  }
  
  @Override
  公共ListfindAllByUserName(字符串的用户名){
  返回userRepository.findAllByUserName(用户名);
  }
  } 
     <李>   

创建数据传输对象(dto/vo)

  

其实好多人在这里都会特别郁闷,搞不清楚这些命名有什么区别,个人建议是大家不用纠结,dto(数据传输对象),就是表示我们在各个层传递的对象,签证官在展示层操作的对象。但是这个只是个命名,它的本质就是一个对象,你传递到DAO层可以吗?当然可以,你传单独字段都是可以的,所以,没必要过分纠结这种信息,咬文嚼字有时候反而会适得其反。

  李      
 <=坝镅詊ava代码类>/* *
  * UserRequestVO创建用户请求对象签证官
  *
  * @author & lt; a href=" mailto: magicianisaac@gmail.com”祝辞Isaac.Zhang |若初& lt;/a>
  */@ data
  @AllArgsConstructor
  @NoArgsConstructor
  公开课UserRequestVO {
  私人字符串的用户名;
  公共布尔validate () {
  回报! StringUtils.isEmpty(用户名);
  }
  }
  
  ---/* *
  * UserResponseVO用户响应签证官
  *
  * @author & lt; a href=" mailto: magicianisaac@gmail.com”祝辞Isaac.Zhang |若初& lt;/a>
  */@ data
  @AllArgsConstructor
  @NoArgsConstructor
  公开课UserResponseVO {
  私人长标识;
  私人字符串的用户名;
  私人字符串标记;
  私人createTime日期;
  私人updateTime日期;
  }

(春云一步步实现广告系统)6。服务实现,Zuul配置及测试