Как отобразить тип перечисления в mybatis с помощью typeHandler на insert
у меня strugled с перечисление на некоторое время теперь, но это не идет в мою сторону. Кто-нибудь может мне подсказать? Я пытаюсь использовать тип перечисления в MySql, и я также использую класс перечисления в своем коде.
как код теперь он будет вставлять понедельник, но он также попытается вставить понедельник на workdayID... Я не получаю workdayID. Я верю, я должен справиться с DAY_TYPE в сом пути ... определить typeHandler может?? но я попробовал, и это не сработает, или его потому, что я не могу этого сделать правильно?
Я также попробовал организацию.апаш.ibatis.тип.EnumTypeHandler, но без успеха, как это
#{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 id="insert" parameterType="DAY_TYPE" useGeneratedKeys="true" keyProperty="iddaytaype">
INSERT INTO daytaype (DAY_TYPE, workdayID)
VALUES (#{DAY_TYPE},#{workdayID})
<selectKey keyProperty="iddaytaype" resultType="long" order="AFTER">
SELECT LAST_INSERT_ID();
</selectKey>
</insert>
<!-- <insert id="insert" parameterMap="insert-params" useGeneratedKeys="true" keyProperty="iddaytaype"> -->
<parameterMap id="insert-params" type="DAY_TYPE">
<parameter property="DAY_TYPE" javaType="DAY_TYPE" typeHandler="mappings.XenumTypeHandler" />
<parameter property="workdayID" javaType="int" />
</parameterMap>
моя таблица базы данных
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;
3 ответов
рабочий день существует как это
public class Workday implements Serializable{
private long idWorkDay;
private Date start;
private Date end;
private List<Workbreak> workBreaks;
private DAY_TYPE DAY_TYPE;
private long workweekID;
getter setter....
правильным решением, конечно, является добавление перечисления в таблицу рабочего дня ... и он будет повторно использовать базу данных, я верю.
<insert id="insert" parameterType="workday" useGeneratedKeys="true" keyProperty="idWorkDay">
INSERT INTO workday
( start , end , workweekID , DAY_TYPE )
VALUES (
#{start},
#{end},
#{workweekID},
#{DAY_TYPE, typeHandler=org.apache.ibatis.type.EnumTypeHandler}
)
<selectKey keyProperty="idWorkDay" resultType="long" order="AFTER">
SELECT LAST_INSERT_ID();
</selectKey>
</insert>
и теперь удалить таблицу daytaype И добавьте перечисление непосредственно в таблицу workday.
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 ;
DAY_TYPE в вашем случае содержит идентификатор члена. Теперь, если вы храните свое перечисление как id в базе данных, вы всегда можете использовать CustomEnumTypeHandler, который может обрабатывать DAY_TYPE для вас, даже если у вас нет вашего перечисления, синхронизированного с вашей базой данных.
переопределить геттер сеттер. мой такой:
@Column(name = "type")
private MailType type;
public String getType(){
return type.name();
}
public void setType(String type){
this.type = MailType.valueOf(type);
}
public MailType getTypeEnum(){
return type;
}
public void setTypeEnum(MailType type){
this.type = type;
}