2013-04-14 2 views
8

잠시 동안 열거 형을 사용하여 스트럿 팅했지만 현재 진행되지는 않습니다. 힌트를 줄 수있는 사람이 있습니까? MySql에서 Enum 형식을 사용하려고하고 있으며 코드에서 Enum 클래스를 사용합니다.insert에 typeHandler를 사용하여 Mybatis의 Enum 형식을 매핑하는 방법

코드가 이제 MONDAY를 삽입하지만 workdayID에 MONDAY를 삽입하려고합니다 ... 나는 workdayID를 얻지 못합니다. 내가 살려면 DAY_TYPE을 som 방식으로 처리해야한다 ... 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> 
같은 어떤 성공과

내 데이터베이스 테이블

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.... 

올바른 해결책은 ... 근무 표에 열거를 추가 할 물론이며 데이터베이스 내가 보라를 많이 잡을 reduse 것 같이 (210)

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;  
+0

어쩌면 하나는 열거 형을 parameterType으로 사용할 수 없습니까? 이'parameterType = "DAY_TYPE"' – user2279869

+0

좋아, 누구? 적어도 참을성이 없거나 숙제를하지 않았거나 누락 된 것이 있으면 알려주십시오. 그렇습니다. 어떤 사람들은 일반적으로 코드와 데이터베이스에 열거 형 값을 저장하지 않는다고 말합니다. – user2279869

+0

http://stackoverflow.com/questions/10219253/mybatis-enum-usage – jalopaba

답변

7

워크 데이는 존재한다.

<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 ; 
0

귀하의 경우에는 DAY_TYPE에 회원 ID가 포함되어 있습니다. ENUM을 ID로 데이터베이스에 저장하면 Enum이 데이터베이스와 동기화되지 않은 경우에도 DAY_TYPE을 처리 할 수있는 CustomEnumTypeHandler를 항상 사용할 수 있습니다.