zoukankan      html  css  js  c++  java
  • mybatis-枚举类型的typeHandler&自定义枚举类型typeHandler

    MyBatis内部提供了两个转化枚举类型的typeHandler给我们使用。

    • org.apache.ibatis.type.EnumTypeHandler 是使用枚举字符串名称作为参数传递的
    • org.apache.ibatis.type.EnumOrdinalTypeHandler 是使用整数下标作为参数传递的

    数据库脚CREATE TABLE `user` (

      `id` int(11) NOT NULL AUTO_INCREMENT,
      `userName` varchar(50) DEFAULT NULL,
      `gender` int(11) DEFAULT NULL, --对应Gender枚举类
      `hobby` varchar(255) DEFAULT NULL, --对用Hobby枚举类
    `member` int(11) DEFAULT NULL, --对应Member枚举类
    `userAge`
    int(11) DEFAULT NULL, `userAddress` varchar(200) DEFAULT NULL, `reg_time` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

    创建三个枚举类Gender、Hobby、Member

    package com.yihaomen.mybatis.enums;
    
    public enum  Gender {
    
        MALE(1, "男性"), FEMALE(2, "女性");
        private int code;
        private String name;
    
        Gender(int code, String name) {
            this.code = code;
            this.name = name;
        }
    
        public int getCode() {
            return code;
        }
    
        public void setCode(int code) {
            this.code = code;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public static Gender getGender(int code) {
            for(Gender gender : Gender.values()) {
                if(gender.getCode() == code) {
                    return gender;
                }
            }
            return null;
        }
    
    }
    package com.yihaomen.mybatis.enums;
    
    public enum Hobby {
        FOOTBALL(1,"足球"), BASKETBALL(2, "篮球");
        private int code;
        private String name;
    
        Hobby(int code, String name) {
            this.code = code;
            this.name = name;
        }
    
        public int getCode() {
            return code;
        }
    
        public void setCode(int code) {
            this.code = code;
        }
    
        public String getName() {
            return name;
        }
    
        public static Hobby getHobby(int code) {
            for(Hobby h : Hobby.values()) {
                if(h.getCode() == code) {
                    return h;
                }
            }
            return null;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    package com.yihaomen.mybatis.enums;
    
    public enum Member {
        FATHER(1,"爸爸"), MOTHER(2,"妈妈");
        private int code;
        private String name;
    
        Member(int code, String name) {
            this.code = code;
            this.name = name;
        }
    
        public int getCode() {
            return code;
        }
    
        public void setCode(int code) {
            this.code = code;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public static Member getMember(int code) {
            for(Member member : Member.values()) {
                if(member.getCode() == code) {
                    return member;
                }
            }
            return null;
        }
    }

    写model层

    package com.yihaomen.mybatis.model;
    
    import com.yihaomen.mybatis.enums.Gender;
    import com.yihaomen.mybatis.enums.Hobby;
    
    import java.util.Date;
    
    public class User {
        private int id;
        private String userName;
        private String userAge;
        private Gender gender;
    private Member member;
    private Hobby hobby;
    private String userAddress; private Date regTime; setters()&getters()... }

    自定义typeHandler

    package com.yihaomen.mybatis.type;
    
    import com.yihaomen.mybatis.enums.Member;
    import org.apache.ibatis.type.JdbcType;
    import org.apache.ibatis.type.TypeHandler;
    
    import java.sql.CallableStatement;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class MyMemberTypeHandler implements TypeHandler<Member> {
        public void setParameter(PreparedStatement ps, int i, Member parameter, JdbcType jdbcType) throws SQLException {
            ps.setInt(i, parameter.getCode());
        }
    
        public Member getResult(ResultSet rs, String columnName) throws SQLException {
            int code = rs.getInt(columnName);
            return Member.getMember(code);
        }
    
        public Member getResult(ResultSet rs, int columnIndex) throws SQLException {
            int code = rs.getInt(columnIndex);
            return Member.getMember(code);
        }
    
        public Member getResult(CallableStatement cs, int columnIndex) throws SQLException {
            int code = cs.getInt(columnIndex);
            return Member.getMember(code);
        }
    }
    

      

    写DAO层

    User.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <resultMap id="resultListUser" type="User">
            <id column="id" property="id" />
            <result column="userName" property="userName" />
            <result column="userAge" property="userAge" />
    <!----> <result column="gender" property="gender" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/> <result column="hobby" property="hobby" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
         <result column="member" property="member" typeHandler="com.yihaomen.mybatis.type.MyMemberTypeHandler"/><!--自定义枚举typeHandler-->
    <result column="userAddress" property="userAddress" /> <result column="reg_time" property="regTime" javaType="java.util.Date" jdbcType="VARCHAR" typeHandler="com.yihaomen.mybatis.type.MyDateTypeHandler"/> </resultMap> <select id="selectUserById2" parameterType="long" resultMap="resultListUser"> select userName, gender, hobby from user where id = #{id}</select> <insert id="addUser2" parameterType="User" useGeneratedKeys="true" keyProperty="id"> INSERT INTO user(userName, userAge, gender, hobby, userAddress, reg_time) VALUES(#{userName},#{userAge},#{gender},#{hobby},#{userAddress}, #{regTime,javaType=Date,jdbcType=VARCHAR,typeHandler=com.yihaomen.mybatis.type.MyDateTypeHandler}) </insert>

    UserMapper

    package com.yihaomen.mybatis.dao;
    
    import com.yihaomen.mybatis.model.User;
    import org.apache.ibatis.annotations.Param;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    @Repository
    public interface UserMapper {
        public List<User> selectUserById2(Long id);
        public int addUser2(User user);
    }

    在configuration.xml注册typeHandler

    <typeHandlers>
            <typeHandler handler="com.yihaomen.mybatis.type.MyDateTypeHandler" />
            <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler"
                         javaType="com.yihaomen.mybatis.enums.Gender" />
            <typeHandler handler="org.apache.ibatis.type.EnumTypeHandler" 
                         javaType="com.yihaomen.mybatis.enums.Hobby"/>
         <typeHandler handler="com.yihaomen.mybatis.type.MyMemberTypeHandler"
         javaType="com.yihaomen.mybatis.enums.Member"/>
    </typeHandlers>

    测试一下:

    package user;

    import com.yihaomen.mybatis.dao.UserMapper;
    import com.yihaomen.mybatis.enums.Gender;
    import com.yihaomen.mybatis.enums.Hobby;
    import com.yihaomen.mybatis.enums.Member;
    import com.yihaomen.mybatis.model.User;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;

    import java.util.Date;
    import java.util.List;

    /**
    *   
    *  @ProjectName: springmvc-mybatis 
    *  @Description:
    */
    public class TestEnumUser extends BaseTest{
    public static void main(String[] args) {
    // testAddEnum();
    testGetEnumUser();
    }

    /**
    * 添加
    */
    public static void testAddEnum() {
    SqlSession sqlSession = null;
    try {
    SqlSessionFactory sqlSessionFactory = getSession();
    sqlSession = sqlSessionFactory.openSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = new User();
    user.setUserName("小明");
    user.setGender(Gender.MALE);
    user.setHobby(Hobby.FOOTBALL);
    user.setMember(Member.FATHER);
    user.setRegTime(new Date());
    user.setUserAddress("地球");
    user.setUserAge("22");
    int result = mapper.addUser2(user);
    System.out.println(result);
    sqlSession.commit();
    } catch (Exception e) {
    e.printStackTrace();
    sqlSession.rollback();
    } finally {
    if(sqlSession != null) {
    sqlSession.close();
    }
    }
    }

    /**
    * select
    */
    public static void testGetEnumUser() {
    SqlSession sqlSession = null;
    try {
    SqlSessionFactory sqlSessionFactory = getSession();
    sqlSession = sqlSessionFactory.openSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<User> users = mapper.selectUserById2(11L);
    for(User u : users) {
    System.out.println(u.getGender());
    System.out.println(u.getHobby());
    System.out.println(u.getMember());
    }
    sqlSession.commit();
    } catch (Exception e) {
    e.printStackTrace();
    sqlSession.rollback();
    } finally {
    if(sqlSession != null) {
    sqlSession.close();
    }
    }
    }
    }
     

    https://gitee.com/huayicompany/springmvc-mybatis.git

    参考文献:

     [1] 杨开振 著,《深入浅出MyBatis技术原理与实战》, 电子工业出版社,2016.09

  • 相关阅读:
    android: 在android studio中使用retrolambda的步骤
    Shiro基础知识03----shiro授权(编程式授权),Permission详解,授权流程(zz)
    [Android] 关于Android的问号?和@符号的用法
    20170506 《摔跤吧,爸爸》观影笔记
    Android关于log日志,华为不输出log.v,log.d(zz)
    阅读日志:协鑫一年的多晶硅料产能能够生产做少装机容量的组件?
    《周鸿祎自述》读书笔记
    使用promise 和 generator来管理工作流
    读书笔记,《刻意练习》,第三章,心理表征
    读书笔记,《刻意练习》,第四章,黄金标准
  • 原文地址:https://www.cnblogs.com/happyflyingpig/p/7672946.html
Copyright © 2011-2022 走看看