springboot + mybatis 枚举类型处理器
1.数据库
2.枚举类
public enum Gender {
MALE(1,"男"),
FEMALE(2,"女"),
UNKNOW(3,"未知");
private Integer dbValue;
private String value;
Gender(Integer dbValue, String value){
this.dbValue = dbValue;
this.value = value;
}
public static Gender dbValueOf(Integer dbValue){
for (Gender gender : Gender.values()){
if(gender.getDbValue().equals(dbValue)){
return gender;
}
}
return null;
}
}
get set ......
3.entity
public class User implements Serializable {
private Integer id;
private String name;
private Gender gender;
get set......
}
4.mapper接口
@Repository
public interface UserMapper {
List<User> findAll();
void insertUser2(List<User> userList);
}
5.mapper.xml
注意 ResultMap中column为gender的result 指定 typeHandler,
insert 时 #{} 中指定typeHandler
typeHandler在第6部分
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.mapper.UserMapper">
<resultMap
id="userMap"
type="user">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="gender" property="gender" typeHandler="com.demo.typehandler.EnumTypeHandler"/>
</resultMap>
<insert id="insertUser2" parameterType="List" keyColumn="id" keyProperty="id" useGeneratedKeys="true">
insert into mk_user (name,gender) values
<foreach
collection="list" index="index" item="user" separator=",">
(#{user.name},#{user.gender,typeHandler = com.demo.typehandler.EnumTypeHandler})
</foreach>
</insert>
<select id="findAll" resultMap="userMap" >
select * from mk_user;
</select>
</mapper>
6.实现typehandler的类
public class EnumTypeHandler implements TypeHandler<Gender> {
//请求时转换
@Override
public void setParameter(PreparedStatement ps, int i, Gender parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i,String.valueOf(parameter.getValue()));
}
//返回时转换
@Override
public Gender getResult(ResultSet rs, String columnName) throws SQLException {
String value = rs.getString(columnName);
return Gender.dbValueOf(Integer.parseInt(value));
}
@Override
public Gender getResult(ResultSet rs, int columnIndex) throws SQLException {
System.out.print("getResult2");
return null;
}
@Override
public Gender getResult(CallableStatement cs, int columnIndex) throws SQLException {
System.out.print("getResult3");
return null;
}
}
7.properties 文件
mybatis.type-handlers-package=com.demo.typehandler