mysql typehandler,如何在插入时使用typeHandler映射mybatis中的Enum类型

I have strugled with enum for a while now but it will not go my way.

Is there anyone that can give me hint?

I am trying to use Enum type in MySql and I also use an Enum class in my code.

As the code is now It will insert MONDAY but it will also try to insert MONDAY on workdayID... I do not get the workdayID.

I belive I have to handle the DAY_TYPE in som way ... define a typeHandler maybe??

but I tried that and it would not work, or its becouse I can not do it correct?

I also tried the org.apache.ibatis.type.EnumTypeHandler but with no success, like this

#{DAY_TYPE,typeHandler=org.apache.ibatis.type.EnumTypeHandler}

DAY_TYPE.java

package tut.model;

import java.io.Serializable;

public enum DAY_TYPE implements Serializable{

MONDAY(1),TUESDAY(2),WEDNESDAY(3),THURSDAY(4),FRIDAY(5),SATURDAY(6),SUNDAY(7);

private int id; private int workdayID;

private DAY_TYPE(int id) { this.id = id; }

public int getId() { return id; }

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

public int getWorkdayID() { return workdayID; }

public void setWorkdayID(int workdayID) {this.workdayID = workdayID;}

}

DAY_TYPE_Mapper.xml

INSERT INTO daytaype (DAY_TYPE, workdayID)

VALUES (#{DAY_TYPE},#{workdayID})

SELECT LAST_INSERT_ID();

My database table

CREATE TABLE `daytaype` (

`iddaytaype` int(11) NOT NULL AUTO_INCREMENT,

`DAY_TYPE` enum('MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY','SATURDAY','SUNDAY') NOT NULL,

`workdayID` int(11) unsigned DEFAULT NULL,

PRIMARY KEY (`iddaytaype`),

KEY `fk_workDayID_idWorkDay` (`workdayID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;=InnoDB DEFAULT CHARSET=utf8;

解决方案

Workday exists as this

public class Workday implements Serializable{

private long idWorkDay;

private Date start;

private Date end;

private List workBreaks;

private DAY_TYPE DAY_TYPE;

private long workweekID;

getter setter....

The correct solution is of course to add enum in the workday table ... and it will reduse database seize a lot I belive.

INSERT INTO workday

( start , end , workweekID , DAY_TYPE )

VALUES (

#{start},

#{end},

#{workweekID},

#{DAY_TYPE, typeHandler=org.apache.ibatis.type.EnumTypeHandler}

)

SELECT LAST_INSERT_ID();

And now delete daytaype table

And add enum directly in workday table instead.

CREATE TABLE `workday` (

`idworkday` int(11) NOT NULL AUTO_INCREMENT,

`start` time DEFAULT '08:00:00',

`end` time DEFAULT '17:00:00',

`workweekID` int(11) DEFAULT NULL,

`DAY_TYPE` enum('MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY','SATURDAY','SUNDAY') DEFAULT NULL,

PRIMARY KEY (`idworkday`),

KEY `fk_workweek_workweekID` (`workweekID`),

CONSTRAINT `fk_workweek_workweekID` FOREIGN KEY (`workweekID`) REFERENCES `workweek` (`idworkweek`) ON DELETE CASCADE ON UPDATE NO ACTION

) ENGINE=InnoDB AUTO_INCREMENT=139 DEFAULT CHARSET=utf8 ;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值