springboot + mybatis 枚举类型处理器

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

猜你喜欢

转载自blog.csdn.net/weixin_43866295/article/details/86589695