java处理枚举类型查询和插⼊SpringBoot整合Mybatis注解式开发*
在配置⽂件l中添加 处理枚举的所在包:
type-handlers-package: ums.handle
1、枚举类
public enum SexEnum implements BaseEnum {
MAN(1, "男"),
WOMAN(2, "⼥");
private int key;
private String value;
private SexEnum(int key, String value) {
this.key = key;
this.value = value;
}
public int getKey() {
return key;
}
public void setKey(int key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
2、实体类resultset 遍历
@Data
public class User {
private SexEnum sexEnum;
}
3、定义⼀个实现enum 接⼝
public interface BaseEnum {
int getKey();
void setKey(int key);
String getValue();
void setValue(String value);
}
4、
public class EnumKeyTypeHandler extends BaseTypeHandler<**BaseEnum** > {
public class EnumKeyTypeHandler extends BaseTypeHandler<**BaseEnum** > {
private Class<BaseEnum> type;
private final BaseEnum[] enums;
/**
* 设置配置⽂件设置的转换类以及枚举类内容,供其他⽅法更便捷⾼效的实现
*
* @param type 配置⽂件中设置的转换类
*/
public EnumKeyTypeHandler(Class<BaseEnum> type) {
if (type == null)
throw new IllegalArgumentException("Type argument cannot be null");
if (ums == null)
throw new SimpleName()
+ " does not represent an enum type.");
}
@Override
public BaseEnum getNullableResult(ResultSet rs, String columnName) throws SQLException {
// 根据数据库存储类型决定获取类型,本例⼦中数据库中存放INT类型
int i = rs.getInt(columnName);
if (rs.wasNull()) {
return null;
} else {
// 根据数据库中的code值,定位BaseEnum⼦类
return locateBaseEnum(i);
}
}
@Override
public BaseEnum getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
// 根据数据库存储类型决定获取类型,本例⼦中数据库中存放INT类型
int i = rs.getInt(columnIndex);
if (rs.wasNull()) {
return null;
} else {
// 根据数据库中的code值,定位BaseEnum⼦类
return locateBaseEnum(i);
}
}
public BaseEnum getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
// 根据数据库存储类型决定获取类型,本例⼦中数据库中存放INT类型
int i = cs.getInt(columnIndex);
if (cs.wasNull()) {
return null;
} else {
// 根据数据库中的code值,定位BaseEnum⼦类
return locateBaseEnum(i);
}
}
public void setNonNullParameter(PreparedStatement ps, int i, BaseEnum parameter, JdbcType jdbcType)            throws SQLException {
// baseTypeHandler已经帮我们做了parameter的null判断
ps.setInt(i, Key());
}
/**
* 枚举类型转换,由于构造函数获取了枚举的⼦类enums,让遍历更加⾼效快捷
*
*
* @param key 数据库中存储的⾃定义code属性
* @return code对应的枚举类
*/
private BaseEnum locateBaseEnum(int key) {
for (BaseEnum status : enums) {
if (Key() == key) {
return status;
}
}
throw new IllegalArgumentException("未知的枚举类型:" + key + ",请核对" + SimpleName());
}
}
数据库⾥⾯数据
5、Dao 层实现数据的数字类型转换成我们想要的类型给前台
//根据UserID查询User信息
@Select("SELECT * FROM testuser WHERE userid=#{id}")
@Results({
@Result(property = "id", column = "userid"),
@Result(property = "name", column = "username"),
@Result(property = "birthday", column = "userbirth"),
@Result(property = "description", column = "descript"),
**@Result(property = "sexEnum",column =  "sex_enum",  ums.handle.EnumKeyTypeHandler.class)}**)    List<User> selectByID(String i
d);
结果返回:
[
{
"sexEnum": "MAN"
}
]
6、POST请求插⼊⼀条记录
body:
{
“sexEnum”: “MAN”
}
执⾏后数据库结果:
参考链接:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。