6–typehandler-2

本小节对枚举类型进行转换
table

1
2
3
4
5
6
create table `student`(
`id` int auto_increment primary key,
`name` varchar(30) not null,
`age` int,
`gender` int default 0
)auto_increment=10000;

enum

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package model;

public enum GenderEnum {
MALE("男",0),FEMALE("女",1),UNKNOW("不知道",2);
private String gender;
private int code;
GenderEnum(String gender, int code){
this.gender = gender;
this.code = code;
}
public static GenderEnum getGender(String genderName){
for (GenderEnum gender: GenderEnum.values()){
if(gender.gender.equalsIgnoreCase(genderName)){
return gender;
}
}
return null;
}

public static GenderEnum getGender(int code){
for (GenderEnum gender: GenderEnum.values()){
if(gender.code == code){
return gender;
}
}
return null;
}

public String getGender() {
return gender;
}

public void setGender(String gender) {
this.gender = gender;
}

public int getCode() {
return code;
}

public void setCode(int code) {
this.code = code;
}

@Override
public String toString() {
return "GenderEnum{" +
"gender='" + gender + ''' +
", code=" + code +
'}';
}
}

model

1
2
3
4
5
6
7
8
9
10
11
12
13
package model;

public class Student {
private int id;
private String name;
private int age;

private GenderEnum gender;

public Student() {
}
//getter setter
}

dao

1
2
3
4
public interface StudentMapper {
int insertStudent(Student student);
Student selectStudentById(int id);
}

mapper
这里的typeHandler使用了别名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<insert id="insertStudent" parameterType="student">
insert into `student`(`name`,`age`,`gender`)
values(#{name},#{age},#{gender,typeHandler=genderTypeHandler})
<selectKey resultType="int" keyColumn="id" keyProperty="id" order="AFTER">
select last_insert_id();
</selectKey>
</insert>

<resultMap id="studentMapper" type="student">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="gender" column="gender" typeHandler="genderTypeHandler"/>
</resultMap>

<select id="selectStudentById" parameterType="int" resultMap="studentMapper">
select * from `student` where `id` = #{id}
</select>

test

1
2