package com.xqt.enums;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
public class EnumStatusHandler extends BaseTypeHandler {
private Class type;
private final EnumStatus[] enums;
/**
* 设置配置文件设置的转换类以及枚举类内容,供其他方法更便捷高效的实现
* @param type 配置文件中设置的转换类
*/
public EnumStatusHandler(Class type) {
if (type == null)
throw new IllegalArgumentException("Type argument cannot be null");
this.type = type;
this.enums = type.getEnumConstants();
if (this.enums == null)
throw new IllegalArgumentException(type.getSimpleName()
+ " does not represent an enum type.");
}
@Override
public EnumStatus getNullableResult(ResultSet rs, String columnName) throws SQLException {
// 根据数据库存储类型决定获取类型,本例子中数据库中存放INT类型
int i = rs.getInt(columnName);
if (rs.wasNull()) {
return null;
} else {
// 根据数据库中的code值,定位EnumStatus子类
return locateEnumStatus(i);
}
}
@Override
public EnumStatus getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
// 根据数据库存储类型决定获取类型,本例子中数据库中存放INT类型
int i = rs.getInt(columnIndex);
if (rs.wasNull()) {
return null;
} else {
// 根据数据库中的code值,定位EnumStatus子类
return locateEnumStatus(i);
}
}
@Override
public EnumStatus getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
// 根据数据库存储类型决定获取类型,本例子中数据库中存放INT类型
int i = cs.getInt(columnIndex);
if (cs.wasNull()) {
return null;
} else {
// 根据数据库中的code值,定位EnumStatus子类
return locateEnumStatus(i);
}
}
@Override
public void setNonNullParameter(PreparedStatement ps, int i, EnumStatus parameter, JdbcType jdbcType)
throws SQLException {
// baseTypeHandler已经帮我们做了parameter的null判断
ps.setInt(i, parameter.getCode());
}
/**
* 枚举类型转换,由于构造函数获取了枚举的子类enums,让遍历更加高效快捷
* @param code 数据库中存储的自定义code属性
* @return code对应的枚举类
*/
private EnumStatus locateEnumStatus(int code) {
for(EnumStatus status : enums) {
if(status.getCode().equals(Integer.valueOf(code))) {
return status;
}
}
throw new IllegalArgumentException("未知的枚举类型:" + code + ",请核对" + type.getSimpleName());
}
}
package com.xqt.enums;
public enum EnumStatus {
NORMAL(1, "正常"),
DELETE(0, "删除"),
CANCEL(2, "注销"),
ABORT(3, "废弃");
private EnumStatus(int code, String description) {
this.code = new Integer(code);
this.description = description;
}
private Integer code;
private String description;
public Integer getCode() {
return code;
}
public String getDescription() {
return description;
}
}
package com.xqt.pojo;
import com.xqt.enums.EnumStatus;
public class Order {
@Override
public String toString() {
return "Order [id=" + id + ", orderNo=" + orderNo + ", site=" + site
+ ", status=" + status + ", createTime=" + createTime
+ ", flightNum=" + flightNum + ", flightType=" + flightType
+ ", pnrCode=" + pnrCode + ", goTime=" + goTime
+ ", passengerName=" + passengerName + ", pnr=" + pnr
+ ", backgoTime=" + backgoTime + ", yesterdayStatue="
+ yesterdayStatue + ", godayStatue=" + godayStatue + "]";
}
private Integer id;
private String orderNo;
private String site;
private String status;
private String createTime;
private String flightNum;
private String flightType;
private String pnrCode;
private String goTime;
private String passengerName;
private String pnr;
private String backgoTime;
private String lowPrice;
public String getLowPrice() {
return lowPrice;
}
public void setLowPrice(String lowPrice) {
this.lowPrice = lowPrice;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public String getSite() {
return site;
}
public void setSite(String site) {
this.site = site;
}
public String getStatus() {
return status;
}
public void setStatus(EnumStatus status) {
this.status = status.getDescription();
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getFlightNum() {
return flightNum;
}
public void setFlightNum(String flightNum) {
this.flightNum = flightNum;
}
public String getFlightType() {
return flightType;
}
public void setFlightType(String flightType) {
this.flightType = flightType;
}
public String getPnrCode() {
return pnrCode;
}
public void setPnrCode(String pnrCode) {
this.pnrCode = pnrCode;
}
public String getGoTime() {
return goTime;
}
public void setGoTime(String goTime) {
this.goTime = goTime;
}
public String getPassengerName() {
return passengerName;
}
public void setPassengerName(String passengerName) {
this.passengerName = passengerName;
}
public String getPnr() {
return pnr;
}
public void setPnr(String pnr) {
this.pnr = pnr;
}
public String getBackgoTime() {
return backgoTime;
}
public void setBackgoTime(String backgoTime) {
//this.backgoTime = backgoTime;
this.backgoTime = backgoTime == null ? "" : backgoTime.trim();
}
}
select * from t_user where id = #{id}
insert into t_user(id,accountID,userName,statusDef,statusOrdinal,statusCustom)
values(
#{id}, #{accountID}, #{userName},
#{statusDef},
#{statusOrdinal, typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler},
#{statusCustom, typeHandler=com.sg.util.typehandler.EnumStatusHandler}
)
Mybatis处理枚举
最新推荐文章于 2025-06-04 14:58:35 发布