Mybatis TypeHandler

来源:互联网 发布:未来软件园mac下载 编辑:程序博客网 时间:2024/05/22 14:33

学习mybatis过程中,TypeHandler是非常重要的一个知识点。

1.现在User对象需要一个Enum变量,代表一个用户是否已经注销的状态。定义UserState的enum类型。

public enum UserState {    NORMAL(0, "正常"), DELETE(1, "注销");    private int code;    private String des;    private UserState(int code, String des) {        this.code = new Integer(code);        this.des = des;    }    public int getCode() {        return code;    }    public void setCode(int code) {        this.code = code;    }    public String getDes() {        return des;    }    public void setDes(String des) {        this.des = des;    }    public static UserState codeOf(int code) {        for (UserState status : values()) {            if (status.code == code) {                return status;            }        }        throw new IllegalArgumentException("Invalid delete code: " + code);    }}

2. 定义用户类:

public class User {    Integer id;         //id    String username;    //外网登录用户名,系统中唯一    UserState state; //记录状态(0:正常,1:注销)}

Mybatis配置文件中配置TypeHandler:

   <typeHandlers>        <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" jdbcType="TINYINT" javaType="com.qunar.qfound.enum.UserState"/>    </typeHandlers>

3. 数据库中,state为TINYINT类型。

4. 因此在user.xml中要进行行管配置:

对于insert,在values相关字段部分进行javaType和jdbcType的配置说明。

<insert id="insert"            parameterType="com.qunar.qfound.model.User"            useGeneratedKeys="true"            keyProperty="id">        <![CDATA[        insert into user(            username,            password,            state,            address,        )        values(            #{username},            #{password},            #{state,javaType=StateEnum,jdbcType=TINYINT},            #{address}        )        ]]>    </insert>

对于select,则需要定义resultMap,这样才能将从数据库中取出的数据封装成一个对象。

    <resultMap id="userResult" type="user">        <result column="state" property="state" javaType="UserState" jdbcType="TINYINT"/>    </resultMap>

   <select id="getUserByUsername"            parameterType="java.lang.String"            resultMap="userResult">        <![CDATA[            select            username,            password,            state,            address,            from                user        ]]>        where        username = #{username}    </select>



0 0
原创粉丝点击