码迷,mamicode.com
首页 > 编程语言 > 详细

spring jpa之实体属性类型转换器AttributeConverter

时间:2015-11-01 12:47:56      阅读:381      评论:0      收藏:0      [点我收藏+]

标签:

1、介绍接口AttributeConverter<x, y>

此接口用于转化实体属性的,但id属性和关系属性不可用。它有两个方法:

1、y convertToDatabaseColumn(x)  作用:将实体属性x转化为y存储到数据库中,即插入和更新操作时执行;

2、x convertToEntityAttribute(y)  作用:将数据库中的字段y转化为实体属性x,即查询操作时执行

2、实现的demo

需求:某数据库表中的状态列,1表示“启用”,-1表示“禁用”,-2表示“已删除”。

步骤一:创建StatusEnum,仅列出部分关键代码

public enum StatusEnum {
    ENABLE(1, "启用"), DISABLE(-1, "禁用"), DELETED(-2, "已删除");

    StatusEnum(Integer value, String description) {
        this.value = value;
        this.description = description;
    }
}

步骤二:实现AttributeConverter<String, Integer>接口,将代表数字与描述进行转换,其中实体类中的status字段为String类型

public class StatusAttributeConverter implements AttributeConverter<String, Integer> {

    @Override
    public Integer convertToDatabaseColumn(String status) {
        try {
            return Integer.parseInt(status);    //如果是数字,则直接返回(这里可以遍历StatusEnum的value来进一步验证)
        } catch (NumberFormatException e) {
            for (StatusEnum type : StatusEnum.values()) {    //如果不是数字,则通过StatusEnum来找到描述对应的数字
                if (status.equals(type.getDescription())) {
                    return type.getValue();
                }
            }
        }
        throw new RuntimeException("Unknown StatusEnum: " + status);    //如果StatusEnum里不存在代表数字或描述,则抛出异常
    }

    @Override
    public String convertToEntityAttribute(Integer value) {
        for (StatusEnum type : StatusEnum.values()) {    //将数字转换为描述
            if (value.equals(type.getValue())) {
                return type.getDescription();
            }
        }
        throw new RuntimeException("Unknown database value: " + value);
    }
}

步骤三:看下实体类

@Entity
@Table(name = "t_demo")
public class DemoEntity {
    @Convert(converter = StatusAttributeConverter.class)
    private String status; //状态:1 启用,-1 禁用,-2 已删除
}

3、优点

客户端不必再硬编码后台的数字与描述的对应细节。

服务端提供获取StatusEnum的接口,获取到[{"value":1, "description":"启用"}, {"value":-1, "description":"禁用"}, {"value":-2, "description":"已删除"}],客户端直接组装成下拉列表即可。




copyright = {
    "作者": "墨衣夜行", 
    "本文链接": "http://my.oschina.net/letao/blog/524487"
}


spring jpa之实体属性类型转换器AttributeConverter

标签:

原文地址:http://my.oschina.net/letao/blog/524487

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!