mysql 枚举类型 映射_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 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中定义了一个枚举类型后,可以使用JDBC将其映射MySQL数据库中的一个字段。具体实现方法如下: 1. 定义一个枚举类型: ```java public enum Gender { MALE, FEMALE, OTHER } ``` 2. 在MySQL中定义一个枚举类型: ```sql CREATE TYPE gender_enum AS ENUM ('MALE', 'FEMALE', 'OTHER'); ``` 3. 在Java中定义一个类型处理器,用于将枚举类型映射MySQL中的枚举类型: ```java public class GenderTypeHandler extends BaseTypeHandler<Gender> { @Override public void setNonNullParameter(PreparedStatement ps, int i, Gender parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, parameter.toString()); } @Override public Gender getNullableResult(ResultSet rs, String columnName) throws SQLException { String value = rs.getString(columnName); return value != null ? Gender.valueOf(value) : null; } @Override public Gender getNullableResult(ResultSet rs, int columnIndex) throws SQLException { String value = rs.getString(columnIndex); return value != null ? Gender.valueOf(value) : null; } @Override public Gender getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { String value = cs.getString(columnIndex); return value != null ? Gender.valueOf(value) : null; } } ``` 4. 在MyBatis中配置类型处理器: ```xml <typeHandlers> <typeHandler handler="com.example.GenderTypeHandler" javaType="com.example.Gender"/> </typeHandlers> ``` 5. 在Mapper中使用枚举类型: ```xml <resultMap id="userResultMap" type="com.example.User"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="gender" column="gender" typeHandler="com.example.GenderTypeHandler"/> </resultMap> <select id="getUser" resultMap="userResultMap"> SELECT * FROM user WHERE id = #{id} </select> ``` 这样,就可以将Java中的枚举类型映射MySQL中的一个枚举类型

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值