4.2.3 搭建用户微服务,剩余代码

写在前面:如果您不是从第4章 服务治理与负载均衡传送门跳转过来的,那么此篇文章对您将毫无意义

用户微服务

1. 先看下整体的项目结构

4.2.3 搭建用户微服务,剩余代码_第1张图片

2. 我们按common->util->beans->dto->param->service-controller的顺序来贴

由于model和mapper中有大部分是逆向生成的,因此mapper只贴新添加的部分

common

JsonData

@Getter
@Setter
public class JsonData {

    private boolean ret;

    private String msg;

    private Object data;

    public JsonData(boolean ret){
        this.ret = ret;
    }

    public static JsonData success(Object object, String msg){
        JsonData jsonData = new JsonData(true);
        jsonData.msg = msg;
        jsonData.data = object;
        return jsonData;
    }

    public static JsonData success(Object object){
        JsonData jsonData = new JsonData(true);
        jsonData.data = object;
        return jsonData;
    }

    public static JsonData success(){
        return new JsonData(true);
    }

    public static JsonData fail(String msg){
        JsonData jsonData = new JsonData(false);
        jsonData.msg = msg;
        return jsonData;
    }

    public Map<String, Object> toMap(){
        HashMap<String, Object> result = new HashMap<>();
        result.put("ret", ret);
        result.put("msg", msg);
        result.put("data", data);
        return result;
    }

    public String toJsonString() throws JsonProcessingException {
        return new ObjectMapper().writeValueAsString(this.toMap());
    }
}

util包

BeanValidator

/**
 * @author:
 * 本工具类主要用作参数的验证.一些必传参数的非空之类的验证
 * 借用Validator 这个工具做的拓展
 * @date:2019/7/31,23:19
 * @what I say:just look,do not be be
 */
public class BeanValidator {

    private static ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();

    public static <T>Map<String, String> validate(T t, Class... groups){
        Validator validator = validatorFactory.getValidator();
        Set validateResult = validator.validate(t, groups);
        if (validateResult.isEmpty()){
            return Collections.emptyMap();
        }
        LinkedHashMap errors = Maps.newLinkedHashMap();
        Iterator iterator = validateResult.iterator();
        while (iterator.hasNext()){
            ConstraintViolation violation = (ConstraintViolation) iterator.next();
            errors.put(violation.getPropertyPath().toString(), violation.getMessage());
        }
        return errors;
    }

    public static Map<String, String> validateList(Collection<?> collection){
        Preconditions.checkNotNull(collection);
        Iterator iterator = collection.iterator();
        Map errors;

        do {
            if (!iterator.hasNext()){
                return Collections.emptyMap();
            }
            Object object = iterator.next();
            errors = validate(object, new Class[0]);
        }while (errors.isEmpty());
        return errors;
    }

    public static Map<String, String> check(Object first, Object... objects){
        if (objects != null && objects.length > 0){
           return validateList(Lists.asList(first, objects));
        }else {
            return validate(first, new Class[0]);
        }
    }
}

JsonMapper(没用到)

@Slf4j
public class JsonMapper {

    private static ObjectMapper objectMapper = new ObjectMapper();

    static {
        //config
        objectMapper.disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);
        objectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
        objectMapper.setFilters(new SimpleFilterProvider().setFailOnUnknownId(false));
        objectMapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_EMPTY);
    }

    public static <T> String obj2String(T src){
        if (src == null){
            return null;
        }
        try {
            return src instanceof String ? (String) src : objectMapper.writeValueAsString(src);
        }catch (Exception e){
            log.warn("parse object to string exception, error:{}", e);
            return null;
        }
    }

    public static <T> T string2Obj(String src, TypeReference typeReference){
        if (src == null || typeReference == null){
            return null;
        }
        try {
            return (T) (typeReference.getType().equals(String.class) ? src : objectMapper.readValue(src, typeReference));
        }catch (Exception e){
            log.warn("parse String to Object exception, String:{}, TypeReference:{}, error:{}",
                    src, typeReference, e);
            return null;
        }
    }
}

beans

PageQuery 和 PageResult

@Setter
@Getter
public class PageQuery {
    @Min(value = 1, message = "当前页面不合法")
    private Integer pageNo = 1;

    @Min(value = 1, message = "每页展示数量不合法")
    private Integer pageSize = 10;

    private Integer offset;
}

@Data
@Builder
public class PageResult<T> {
    private List<T> data = Lists.newArrayList();
    private int total = 0;
}

dto

UserDto

/**DTO data transfer object 数据传输对象
 * @author:徐凯
 * @date:2019/10/11,10:14
 * @what I say:just look,do not be be
 */
@Data
public class UserDto {
    private static final long serialVersionUID = 1L;

    private Integer id;
    private String nickname;
    private String avatar;

    public static UserDto adapt(SysUsers sysUsers){
        UserDto userDto = new UserDto();
        BeanUtils.copyProperties(sysUsers,userDto);
        return userDto;
    }
}

param

UserParam

@Data
public class UserParam {
    private Integer id;
    @NotBlank
    @Length(max = 100,min = 1,message = "部门名称长度限制在1~100个字符")
    private String nickname;
    private String avatar;
}

mapper(部分代码和sql)

SysUsersMapper

@Mapper
public interface SysUsersMapper {
	int countByUserDto(@Param("dto") UserDto dto);
    List<SysUsers> getPageListByUserDto(@Param("dto") UserDto dto,@Param("pq") PageQuery pq);
}

SysUsersMapper.xml

 
    <select id="countByUserDto" resultType="int" parameterType="map">
        SELECT COUNT(1)
        FROM `sys_users`
        <include refid="queryConditions"/>
    select>
    <select id="getPageListByUserDto" resultMap="BaseResultMap" parameterType="map">
        select id, nickname, avatar
        from `sys_users`
        <include refid="queryConditions"/>
        ORDER BY id DESC
        LIMIT #{pq.pageNo},#{pq.pageSize}
    select>

    <sql id="queryConditions">
        <where>
            <if test="dto.id != null">
                AND id = #{dto.id}
            if>
            <if test="dto.nickname != null and dto.nickname !=''">
                AND nickname LIKE #{dto.nickname}
            if>
            <if test="dto.avatar != null and dto.avatar != ''">
                AND avatar = #{dto.avatar}
            if>
        where>
    sql>

service

UserService(interface)

public interface UserService {

    /**
     * 增加
     */
    public void saveUser(UserParam param);

    /**
     * 加载指定
     */
    public UserDto load(Integer id);

    /**
     * 删除
     */
    public void delete(Integer userId);

    /**
     * 分页查询
     * @param pq
     * @param param
     * @return
     */
    public PageResult<SysUsers> searchUserPageList(PageQuery pq, UserParam param);
}

UserServiceImpl

@Service
@Slf4j
public class UserServiceImpl implements UserService {

    @Resource
    private SysUsersMapper sysUsersMapper;

    @Override
    public void saveUser(UserParam param) {
        BeanValidator.check(param);
        SysUsers user = new SysUsers();
        user.setNickname(param.getNickname());
        if (StringUtils.isNotEmpty(param.getAvatar())){
            user.setAvatar(param.getAvatar());
        }
        sysUsersMapper.insert(user);
    }

    @Override
    public UserDto load(Integer id) {
        if (null == id){
            throw new RuntimeException("参数有误");
        }
        SysUsers user = sysUsersMapper.selectByPrimaryKey(id);
        return UserDto.adapt(user);
    }

    @Override
    public void delete(Integer userId) {
        if (null == userId){
            throw new RuntimeException("参数有误");
        }
        sysUsersMapper.deleteByPrimaryKey(userId);
    }

    @Override
    public PageResult<SysUsers> searchUserPageList(PageQuery pq, UserParam param) {
        BeanValidator.check(param);
        UserDto userDto = new UserDto();
        if (null != param.getId()){
            userDto.setId(param.getId());
        }
        if (StringUtils.isNotEmpty(param.getAvatar())){
            userDto.setAvatar(param.getAvatar());
        }
        userDto.setNickname("%"+param.getNickname()+"%");
        //查询个数
        int count = sysUsersMapper.countByUserDto(userDto);
        if (count > 0){
            List<SysUsers> sysUsersList = sysUsersMapper.getPageListByUserDto(userDto, pq);
            return PageResult.<SysUsers>builder().total(count).data(sysUsersList).build();
        }
        return PageResult.<SysUsers>builder().build();
    }
}

controller

UserController

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

    /**
     * 加载指定用户信息
     */
    @RequestMapping(value = "/{id}",method = RequestMethod.GET)
    public UserDto loadOne(@PathVariable Integer id){
        return userService.load(id);
    }

    /**
     * 分页查询
     * @param param
     * @param pq
     * @return
     */
    @RequestMapping("/page")
    public JsonData page(UserParam param, PageQuery pq){
        return JsonData.success(userService.searchUserPageList(pq,param));
    }
}

你可能感兴趣的:(SpringCloud)