MyBatis-plus对枚举接收、保存、返回前端处理

SpringCloud Alibaba 总结(一)

1.MybatisPlus 对枚举处理

MyBatisPlus version: 3.5.1

1.2 定义枚举和使用注解和重新toString

import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Objects;
import java.util.stream.Stream;

/**
 * <h1>性别状态枚举类</h1>
 *
 * @author zx
 * @date 2022年06月13日 9:22
 */
@Getter
@AllArgsConstructor
public enum SexStatusConstant {

    /**
     * 0-女  ,下标为 0
     */
    WOMAN(0, "女"),

    /**
     * 1-男---- 下标为 1  【前端传入对应的值
     * 比如:接收实体属性为枚举对象: SexStatusConstant SexStatusConstant
     * 前端传递值的时候这样传递: "sexStatusConstant": "1"】
     */
    MAN(1, "男"),

    ;
    /**
     * 性别 表示的key值
     * 需要存储数据库的属性上添加@EnumValue注解
     */
    @EnumValue
    private final Integer key;

    /**
     * 具体展示的值
     * 需要前端展示的属性上添加@JsonValue注解
     */
    //@JsonValue
    private final String sex;

    /**
     * <h2>重写toString 用于返回给前端</h2>
     * @return
     */
    public String toString() {
        return sex;
    }

    /**
     * <h2>根据key找出 对应的 SexStatusConstant 对象</h2>
     */
    public static SexStatusConstant of(Integer key) {
        Objects.requireNonNull(key);
        return Stream.of(values()).filter(bean -> bean.getKey().equals(key))
                .findFirst()
                .orElseThrow(() -> new RuntimeException("no search bean by key=" + key));
    }

}

1.3 配置MyBatisPlus 枚举转换器

#配置枚举 支持通配符 * 或者 ; 分割
mybatis-plus:
  type-enums-package: com.imooc.ecommerce.constant
  configuration:
    default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

1.4 配置jackJson类

/**
 * <h1>jackjson 配置类信息</h1>
 *
 * @author zx
 * @date 2022年06月13日 11:07
 */
@Configuration
public class JackJsonConfig {

    /**
     * <h2>使用枚举时在用来显示正确内容</h2>
     *
     * @return Jackson2ObjectMapperBuilderCustomizer
     */
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer customizer() {
        return builder -> builder.featuresToEnable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
    }
}

1.5 用户实体

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.imooc.ecommerce.constant.SexStatusConstant;
import lombok.Data;

import java.io.Serializable;

/**
 * 
 * @TableName user
 */
@TableName(value ="user")
@Data
public class User implements Serializable {
    /**
     * 
     */
    @TableId(type = IdType.AUTO)
    private Integer id;

    /**
     * 
     */
    private String name;

    /**
     * 
     */
    private Integer age;

    /**
     * 0 表示女;1表示男
     */
    @TableField("sex")
    private SexStatusConstant sexStatusConstant;


    @TableField(exist = false)
    private static final long serialVersionUID = 1L;


}
import com.imooc.ecommerce.entity.User;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * <h1>用户响应实体 </h1>
 *
 * @author zx
 * @date 2022年06月13日 10:46
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserInfoResp {
    /**
     * 姓名
     */
    private String name;

    /**
     * 年龄
     */
    private Integer age;


    private String sex;

    /**
     * <h2> user 转换成 UserInfoResp 对象</h2>
     *
     * @param user 从数据库查询的用户对象
     * @return 返回给前端用户信息
     */
    public static UserInfoResp converto(User user) {
        UserInfoResp userInfoResp = new UserInfoResp();
        userInfoResp.setAge(user.getAge());
        userInfoResp.setName(user.getName());
        userInfoResp.setSex(user.getSexStatusConstant().getSex());
        return userInfoResp;
    }

}
import com.imooc.ecommerce.constant.SexStatusConstant;
import com.imooc.ecommerce.entity.User;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * <h1>保存用户实体对象</h1>
 *
 * @author zx
 * @date 2022年06月13日 10:32
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserSaveReq {
    /**
     * 姓名
     */
    private String name;

    /**
     * 年龄
     */
    private Integer age;

    /**
     * 0 表示女;1表示男
     */
    private SexStatusConstant sexStatusConstant;

    /**
     * <h2>usersaveReq  转换成user 对象</h2>
     *
     * @param userSaveReq 请求保存对象
     * @return user对象
     */
    public User converto(UserSaveReq userSaveReq) {
        User user = new User();
        user.setName(this.name);
        user.setAge(this.age);
        user.setSexStatusConstant(sexStatusConstant);
        return user;
    }

}

1.6 sql语句

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `sex` int(1) NOT NULL DEFAULT '0' COMMENT '0 表示女;1表示男',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT='用户实体对象'

1.7 controller控制类

import com.imooc.ecommerce.entity.User;
import com.imooc.ecommerce.req.UserSaveReq;
import com.imooc.ecommerce.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * <h1> 用户控制类</h1>
 * @author zx
 * @date 2022年06月13日 10:11
 */
@Slf4j
@RequestMapping("/user")
@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/save-user")
    public boolean saveUser(@RequestBody UserSaveReq userSaveReq){
        User user = userSaveReq.converto(userSaveReq);
        return userService.save(user);
    }
}

1.8 测试

import com.imooc.ecommerce.constant.SexStatusConstant;
import com.imooc.ecommerce.entity.User;
import com.imooc.ecommerce.resp.UserInfoResp;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;
import java.util.stream.Collectors;

/**
 * <h1>测试枚举类在保存和展示使用测试案例</h1>
 *
 * @author zx
 * @date 2022年06月13日 9:36
 */
@SpringBootTest
@RunWith(SpringRunner.class)
@Slf4j
public class SexEnumTest {
    @Autowired
    private UserService userService;


    @Test
    public void testSexEnumSaveToDb() {
        User user = new User();
        user.setName("TOM4");
        user.setAge(34);
        user.setSexStatusConstant(SexStatusConstant.MAN);

        log.info("save user to db result :[{}]", userService.save(user));
        log.info("save userinfo: [{}]",user);

    }

    @Test
    public void testGetUserInfo(){

        List<User> userList = userService.list();
        log.info("get User from db : [{}]",userList);
        List<UserInfoResp> userInfoResps = userList.stream()
                .map(UserInfoResp::converto).collect(Collectors.toList());

        log.info("convert user to userinforesp :[{}]",userInfoResps);



    }

    @Test
    public void testEnumReturnValue(){
        List<User> userList = userService.list();
        log.info("get User from db : [{}]",userList);
    }
}

Http请求:

POST http://localhost:9001/ecommerce-summary-service/user/save-user
Content-Type: application/json

{

  "name": "kevin-dd",
  "age": 34,
  "sexStatusConstant": 1
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值