1.创建实体类(学生实体,sex枚举类)
@data
@table
@entity
public class student {
@id
@generatedvalue(generator = "uuid")
@genericgenerator(name = "uuid",strategy = "org.hibernate.id.uuidgenerator")
private string id;
private string name; // 姓名
private sex sex; // 性别
}
使用@jsonvalue来标记枚举想要返回的序列化值
注意:建议枚举的编码不要使用数字
public enum sex { // 性别
girl("fm","女"),boy("m","男");
private string code;
private string sname;
sex(string code,string sname) {
this.code = code;
this.sname = sname;
}
public string getcode() {
return code;
}
/**
* 将数据库查询到编码自动转为文字返回给前端
*/
@jsonvalue
public string getsname() {
return sname;
}
}
2.创建converter(属性转换器)
@converter注解的作用是告诉jpa这是一个属性转换器autoapply =true的作用是表示这是一个全局的属性转换器,也就是说这个转换器对所有的实体类都起作用attributeconverter<需要被转换的enum,与数据库表字段对应的java类型>
@converter(autoapply = true)
public class sexconverter implements attributeconverter<sex, string> {
/**
* 此方法告诉jpa,数据库里存的值,即插入和更新操作时执行;
*/
@override
public string converttodatabasecolumn(sex sex) {
if(sex == null){
return null;
}
return sex.getcode(); // 此处存储的是编码
}
/**
* 此方法告诉java从数据库里取出的值对应的是哪个enum值,即查询操作时执行。
*/
@override
public sex converttoentityattribute(string code) {
if(code == null){
return null;
}
for (sex sex : sex.values()) {
if(sex.getcode().equals(code)){
return sex; // 获取到当前sex信息
}
}
throw new illegalargumentexception(); // 或者给个默认的enum eg: return category.unknown
}
}
3.创建controller层
@restcontroller
@requestmapping("/student")
public class studentcontroller {
@autowired private studentrepo repo;
@postmapping(path = "/save")
public student save(@requestbody student student) {
repo.save(student);
return student;
}
@getmapping(path = "/list")
public list<student> list() {
return repo.findall();
}
}
当需要在后端使用时,用此方法–>sex.girl/sex.boy
4.数据库表,测试

新增测试

查询测试

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论