gpt4 book ai didi

java - 如何在插入时使用typeHandler在mybatis中映射枚举类型

转载 作者:IT老高 更新时间:2023-10-29 00:17:11 27 4
gpt4 key购买 nike

我已经为 enum 苦苦挣扎了一段时间,但它不会如我所愿。有没有人可以给我提示?我正在尝试在 MySql 中使用 Enum 类型,并且还在我的代码中使用了 Enum 类。

正如现在的代码,它会插入 MONDAY,但它也会尝试在 workdayID 上插入 MONDAY... 我没有得到 workdayID。我相信我必须以某种方式处理 DAY_TYPE ...也许定义一个 typeHandler?但我试过了,但它不起作用,或者是因为我不能正确地做?

我也试过 org.apache.ibatis.type.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;

最佳答案

工作日就这样存在

    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表而是直接在工作日表中添加枚举。

    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 ;

关于java - 如何在插入时使用typeHandler在mybatis中映射枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16000709/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com