springboot + mybatis 枚举类型处理器

时间:2019-01-22
本文章向大家介绍springboot + mybatis 枚举类型处理器,主要包括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

注意 column为gender的result 指定 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