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

时间: 2024-08-27 13:57:27

model类中enum类型与数据库字段的映射的相关文章

KVC在定义Model类中的妙用

@我们应用程序使用MVC架构的话,对于处理数据类,我们会单独的定义Model类,在里面为要展示的属性进行初始化赋值,一般采用的方法是通过定义对应的属性,挨个赋值.现在我要介绍的就是通过KVC,key-value的方式,进行赋值. @先来看一段代码: #import <Foundation/Foundation.h> @interface MDCAllShopObjectModel : NSObject // 定义全部商铺信息类要显示的内容的属性 @property (nonatomic, co

C#中enum类型

最近碰到了枚举类型,就顺便整理下. 枚举的基类Enum,可以是除 Char 外的任何整型.不做显示声明的话,默认是整形(Int32). 声明一个Enum类型: /// <summary> /// 颜色 /// </summary> public enum People { [Description("婴儿")] Baby = 0, [Description("儿童")] Children = 5, [Description("青年&

实体类与数据库字段的映射常见错误(at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set)

严重: Servlet.service() for servlet springMVC threw exception java.lang.IllegalArgumentException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.refl

salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值

注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-from.html 群里面有个小伙伴问了一个关于两个有Dependence关系的Picklist字段如何在Apex中通过control字段的值获取到Dependence字段的值,针对Salesforce配置来说,我们很好配置出两个Dependence字段的关系,通过点击设置一下include关系即可.如

MYSQL中 ENUM 类型的详细解释

ENUM 是一个字符串对象,其值通常选自一个允许值列表中,该列表在表创建时的列规格说明中被明确地列举. 在下列某些情况下,值也可以是空串("") 或 NULL: 如果将一个无效值插入一个 ENUM (即,一个不在允许值列表中的字符串),空字符串将作为一个特殊的错误值被插入.事实上,这个字符串有别于一个"普通的"空字符串,因为这个字符串有个数字索引值为 0.稍后有更详细描述. 如果一个 ENUM 被声明为 NULL,NULL 也是该列的一个合法值,并且该列的缺省值也将

获取数据库中指定类型的数据库名称

/// <summary> /// 获取数据库名称 /// </summary> /// <param name="Account">帐套号</param> /// <returns></returns> public static string GetDBName(string Account) { StringBuilder strSql = new StringBuilder(); strSql.Append

自动生成Model层中对应表的各个字段

select 'public '+ case t.name when 'varchar' then 'string' when 'smallint' then 'Int16' when 'int' then 'Int32' when 'datetime' then 'DateTime' when 'numeric' then 'double' else 'string' end +' ' +cl.name+' {get;set;}', t.name, cl.max_length, cl.prec

【原创】文本工具的使用--根据数据库字段快速生成该表对应的Model类属性

在实际项目开发过程中,我们会经常碰到这样的问题:数据库表的字段按下划线命名方式都设计好了,接下来是要创建该表对应的Model类.如果我们按照数据库表中的字段,再手动敲一遍,生成对应Model类的属性.在字段少的情况下,手动创建Model类似乎没啥的.要是字段比较多,那就有点费时了.那如何快速生成数据库表字段对应的Model类呢?以下是本人的解决方案: 1.将建表语句复制到文本编辑器,如notepad++,editplus,vim等. 2.剔除其他字符串,提取字段 点击全部替换 3.下划线法转驼峰

Mybatis中实体类属性与数据库列表间映射方法介绍

           这篇文章主要介绍了Mybatis中实体类属性与数据列表间映射方法介绍,一共四种方法方法,供大家参考.         Mybatis不像Hibernate中那么自动化,通过@Column注解或者直接使用实体类的属性名作为数据列名,而是需要自己指定实体类属性和数据表中列名之间的映射关系,这一点让用惯了Hibernate的人很不习惯,所幸经过探索找到了建立映射关系的几种办法,其中总也有比较简单的. 首先定义一个实体类User,如下: public class User { pr