当前位置: 代码网 > 服务器>服务器>微服务 > JPA+Enum枚举实现步骤流程

JPA+Enum枚举实现步骤流程

2025年10月16日 微服务 我要评论
1.创建实体类(学生实体,sex枚举类)@data@table@entitypublic class student {@id@generatedvalue(generator = "uuid")@g

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.数据库表,测试

新增测试

查询测试

总结

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com