这里我们使用<代码>春数据JPA> 代码来实现数据库操作,当然大家也可以使用<代码> Mybatis> 代码,都是一样的,我们依然以用户表操作为例:
<=坝镅詊ava代码类>/* * * AdUserRepository用户数据库操作接口 *继承自JpaRepository第一个参数AdUser代表当前要操作的实体类的类定义,第二个参数长表示该类的主键类型 * * @author & lt; a href=" mailto: magicianisaac@gmail.com”祝辞Isaac.Zhang */公共接口AdUserRepository延伸JpaRepository {/* * *根据用户名称获取用户 * * @param用户名名称 * @return用户对象 */AdUser findByUserName(字符串的用户名); List findAllByUserName(字符串的用户名); }代码>
-
<李>
JPARepository的默认实现方法,如果我们只是继承了<代码> JPARepository> 代码而没有实现具体的操作方法,我们也是可以通过使用它的默认方法来做<代码> CRUD 代码>操作的,如下:
李>
创建服务包,依然以用户操作为例,创建<代码> 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配置及测试