mybatis字段映射枚举类型
在底层使⽤mybatis的时候,我们可能会需要把表⾥的字段映射到Java⾥⾯的枚举类,现总结下⼯作中的⽤法:sku表⾥⼀个status_type字段为int类型。(这⾥是postgresql的脚本)
status_type int4 NULL
Java⾥⾯对应⽣成的枚举类为:
public enum SkuStatusType implements DbEnum, LocalString {
PRODUCT(0, fal, "masterdata.skuStatus.product"),
pick什么意思
BUYING(1, fal, "masterdata.skuStatus.buying"),
SALE(2, fal, "masterdata.skuStatus.sale");
private int dbConstant;
private String messageKey;
private OrderState(int dbConstant, boolean hasBeenDispatched, String messageKey) {
this.dbConstant = dbConstant;
this.hasBeenDispatched = hasBeenDispatched;
}
@Override
public Integer getConstant() {
return this.dbConstant;fineday
}
@Override
public String messageKey() {
ssageKey;
}
}
在配置xml⽂件之前我们需要为⾃⼰的项⽬建⼀个⼯具类:
package com.lcc.util;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.pe.BaTypeHandler;genre
import org.pe.JdbcType;
import com.lcc.api.domain.DbEnum;
public class DbEnumTypeHandler extends BaTypeHandler<DbEnum> {
private Class<DbEnum> type;
public DbEnumTypeHandler(Class<DbEnum> type){
}
@Override
@Override
public void tNonNullParameter(PreparedStatement ps, int i,
DbEnum parameter, JdbcType jdbcType) throws SQLException {
ps.tInt(i, Constant());
}
@Override
public DbEnum getNullableResult(ResultSet rs, String columnName)
throws SQLException {
int constant = rs.getInt(columnName);
if(rs.wasNull()){
return null;
}
el{
return convert(constant);
}
}
@Override
public DbEnum getNullableResult(ResultSet rs, int columnIndex)
throws SQLException {
int constant = rs.getInt(columnIndex);
if(rs.wasNull()){
汉堡包英文怎么说return null;
}
el{
全国大学英语四六级考试官网
return convert(constant);
}
include是什么意思}
@Override
public DbEnum getNullableResult(CallableStatement cs, int columnIndex)
throws SQLException {
int constant = cs.getInt(columnIndex);
if(cs.wasNull()){
return null;
}
el{
return convert(constant);
}
}
private DbEnum convert(int constant) {agitation
what have i doneDbEnum[] dbEnums = EnumConstants();
for (DbEnum dbEnum : dbEnums) {
Constant().equals(constant)){
return dbEnum;
}北京地区成人本科学士学位英语统一考试
}
return null;
}
}
util class⾥⾯的DbEnum domain 和 Localisable domain:(⼀般项⽬⾥的枚举实现这两个domain interface)
package com.lcc.api.domain;
import java.io.Serializable;
public interface DbEnum extends Serializable {
public Integer getConstant();
}
package com.lcc.api.domain;
public interface Localisable {
String messageKey();
}
看下mybatis的xml⽂件配置:
<result column="status_type" property="statusType"
disney动画typeHandler="com.lcc.util.StringEnumTypeHandler"/>
此时表字段映射枚举类就⼤功告成了,看完之后你可以⾃⼰上⼿试⼀下。
这只是其中的⼀种⽅法,还有其他的⽅法可以在度娘和⾕哥上⾯搜索⼀下。