• model类中enum类型与数据库字段的映射


    这个东西搞了好久,不难,但小细节没注意到一直不对,现在终于做出来了,赶紧记下。

    下面是实体类User与对应的表user之间的映射:

    1. 准备数据库表user

    SET NAMES utf8;
    SET FOREIGN_KEY_CHECKS = 0;

    -- ----------------------------
    -- Table structure for `user`
    -- ----------------------------
    DROP TABLE IF EXISTS `user`;
    CREATE TABLE `user` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(50) NOT NULL,
    `gender` int(3) NOT NULL,
    `level` int(1) NOT NULL,
    `birth` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `is_locked` bit(1) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

    -- ----------------------------
    -- Records of `user`
    -- ----------------------------
    BEGIN;
    INSERT INTO `user` VALUES ('1', 'c1', '1', '0', '2016-02-28 10:44:34', b'0');
    COMMIT;

    SET FOREIGN_KEY_CHECKS = 1;

    2. model类User

    package pr.cgl.model;
    import javax.persistence.*;
    /**
    * Created by LL on 16/1/25.
    */
    @Entity
    @Table(name = "user")
    public class User {
    private Integer id;

    private String name;

    private Boolean isLocked;

    public enum Gender{
    MALE,
    FEMALE
    }

    public enum Level{
    cardMember, // 0
    goldCardMember, // 1
    platinumCardMember, // 2
    }

    private Gender gender;

    private Level level;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Integer getId() {
    return id;
    }

    public void setId(Integer id) {
    this.id = id;
    }

    @Column(name = "name")
    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    @Column(name = "is_locked")
    public Boolean getIsLocked() {
    return isLocked;
    }

    public void setIsLocked(Boolean isLocked) {
    this.isLocked = isLocked;
    }

    @Column(name = "gender")
    public Gender getGender() {
    return gender;
    }

    public void setGender(Gender gender) {
    this.gender = gender;
    }

    @Column(name="level")
    public Level getLevel() {
    return level;
    }

    public void setLevel(Level level) {
    this.level = level;
    }
    }
    3. 测试类

    package pr.cgl.test;
    import pr.cgl.model.User;
    import pr.cgl.util.EntityUtil;

    import javax.persistence.EntityManager;
    import javax.persistence.Query;
    import java.util.List;

    /**
    * Created by LL on 16/1/25.
    */
    public class EnumTest {
      public static void main(String[] args) {
        EntityManager em = EntityUtil.em;
         String jql = " FROM User u";
        Query query = em.createQuery(jql);
        List<User> userList = query.getResultList();
        for(User u: userList){
          System.out.println("id="+u.getId()+" name="+u.getName()+" is_locked="+u.getIsLocked()+" gender="+u.getGender()+" level="+u.getLevel());
        }
      }
    }
    4. 输出结果

    Hibernate: select user0_.id as id0_, user0_.gender as gender0_, user0_.is_locked as is3_0_, user0_.level as level0_, user0_.name as name0_ from user user0_
    id=1 name=c1 is_locked=false gender=FEMALE level=cardMember

  • 相关阅读:
    September 22nd 2016 Week 39th Thursday
    September 21st 2016 Week 39th Wednesday
    android 几个小技巧
    深入理解计算机系统----经验之谈
    输入数字如何获取
    super 和this的用法
    java程序员修炼之道
    eclipse 如何使用svn
    如何手动添加Android Dependencies包
    如何查看正在使用端口号并利用任务管理器将其关闭
  • 原文地址:https://www.cnblogs.com/cglWorkBook/p/5224266.html
Copyright © 2020-2023  润新知