1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.ibatis.type;
17
18 import java.sql.CallableStatement;
19 import java.sql.PreparedStatement;
20 import java.sql.ResultSet;
21 import java.sql.SQLException;
22
23
24
25
26 public class EnumTypeHandler<E extends Enum<E>> extends BaseTypeHandler<E> {
27
28 private final Class<E> type;
29
30 public EnumTypeHandler(Class<E> type) {
31 if (type == null) {
32 throw new IllegalArgumentException("Type argument cannot be null");
33 }
34 this.type = type;
35 }
36
37 @Override
38 public void setNonNullParameter(PreparedStatement ps, int i, E parameter, JdbcType jdbcType) throws SQLException {
39 if (jdbcType == null) {
40 ps.setString(i, parameter.name());
41 } else {
42 ps.setObject(i, parameter.name(), jdbcType.TYPE_CODE);
43 }
44 }
45
46 @Override
47 public E getNullableResult(ResultSet rs, String columnName) throws SQLException {
48 String s = rs.getString(columnName);
49 return s == null ? null : Enum.valueOf(type, s);
50 }
51
52 @Override
53 public E getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
54 String s = rs.getString(columnIndex);
55 return s == null ? null : Enum.valueOf(type, s);
56 }
57
58 @Override
59 public E getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
60 String s = cs.getString(columnIndex);
61 return s == null ? null : Enum.valueOf(type, s);
62 }
63 }