一、前提:关于使用的数据库与数据库管理软件
数据库:Mysql
数据库管理软件:Navicat
二、后端关于对Enum枚举类型值对象的使用
聚合类account:
@Entity
@Table(name = "accounts")
public class Account {
//嵌入式的ID
@EmbeddedId
private AccountId id;
private String type;
private String subdivide;
private String money;
private String time;
@Column(name = "create_id")
private String createId;
private String comment;
@Embedded
private CreateTime createTime;
//当前账单的状态
//@Embedded
@Column(name = "status")
@Enumerated(EnumType.STRING)
private Status status;
public Account(){};//此处解决的是下面构造函数参数注入的问题
//构造函数内封装的必须是需要的参数,必不可少的参数
public Account(String type, String money, String time, String createId, CreateTime createTime) {
this.id=new AccountId();
this.type = type;
this.money = money;
this.time = time;
this.createId = createId;
this.createTime = createTime;
this.status=Status.CREATED;
}
// 数据转换
public AccountDTO makeAccountDTO() {
AccountDTO dto = new AccountDTO();
dto.setId(id.value());
dto.setType(this.type);
dto.setMoney(this.money);
dto.setTime(this.time);
dto.setCreateId(this.createId);
dto.setCreateTime(createTime.value());
dto.setStatus(status.name());
return dto;
}
public AccountDTO2 makeAccountDTO2(){
AccountDTO2 dto=new AccountDTO2();
dto.setId(id.value());
dto.setType(this.type);
dto.setMoney(this.money);
dto.setTime(this.time);
dto.setCreateId(this.createId);
dto.setCreateTime(createTime.value());
dto.setComment(this.comment);
dto.setSubdivide(this.subdivide);
dto.setStatus(status.name());
return dto;
};
}
在值对象Staus添加注释:
@Enumerated(EnumType.STRING)
值对象Status:
public enum Status {
//被创建(不一定发布),被删除,被修改,被关闭(操作),被发布
CREATED,
REMOVED,
UPDATED,
CLOSED,
PUBLISHED;
Status(){};
public Status changeTo(Status newStatus){
//如果当前状态为REMOVED则,当前状态不可修改
if(this==Status.REMOVED){
if(newStatus!=Status.REMOVED){
throw new AccountStatusException("当前已处于删除状态状态不支持此操作!");
}
}
if(this!=Status.CREATED){
if(newStatus==Status.UPDATED){
throw new AccountStatusException("当前的账单状态未处于CREATED状态,不能修改");
}
}
return newStatus;
};
}
三、数据库中枚举类型数据的设置
1.直接通过数据库管理工具设置枚举类型
2.通过sql语句
alter table 表名 modify column 属性名 enum('value1','value2','value3','value3');