文章目录
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
}