文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
9.7 在映射中使用枚举
在很多时候,我们希望将数据库的某些字典项转化为我们 Java 的枚举对象,这些在 MyBatis 的 typeHandler 中可以实现。而在 MyBatis 中,EnumTypeHandler 和 EnumOrdinalType Handler 并不是很好用。这个时候我们需要的是一个自定义的 typeHandler 去处理它们。现在让我们举个例子。
现在我们在系统里面定义了红、黄、蓝三种颜色可以使用。于是我们可以得到一个颜色枚举类,如代码清单 9-45 所示。
代码清单 9-45:颜色枚举类
public enum Color { RED(1, "红"), YELLOW(2, "黄"), BLUE(3, "蓝色"); Color(int code, String name) { this.code = code; this.name = name; } private int code; private String name; public int getCode() { return this.code; } public static Color getEnumByCode(int code) { for (Color color : Color.values()) { if(color.code == code) { return color; } } return null; } }
那么我们还需要定义一个自定义的 typeHandler 就可以了,参见代码清单 9-46。
代码清单 9-46:颜色的 typeHandler
public class ColorEnumTypeHandler implements TypeHandler<Color> { @Override public void setParameter(PreparedStatement ps, int i, Color color, JdbcType jdbcType) throws SQLException { ps.setInt(i, color.getCode()); } @Override public Color getResult(ResultSet rs, String name) throws SQLException { int result = rs.getInt(name); return Color.getEnumByCode(result); } @Override public Color getResult(ResultSet rs, int i) throws SQLException { int result = rs.getInt(i); return Color.getEnumByCode(result); } @Override public Color getResult(CallableStatement cs, int i) throws SQLException{ int result = cs.getInt(i); return Color.getEnumByCode(result); } }
我们在映射器中配置 JavaType 和 JdbcType 以及 typeHandler 便可以使用自定义的类型了,如代码清单 9-47 所示。
代码清单 9-47:自定义的类型
...... <resultMap id="colorResultMapper" type="com.learn.chapter9.pojo. ColorBean"> <result property="id" column="id"/> <result property="color" column="color" jdbcType="INTEGER" javaType="com.learn.chapter9.typeHandler.Color" typeHandler="com.learn.chapter9.typeHandler.ColorEnumTypeHandler"/> <result property="note" column="note"/> </resultMap> <select id="getColor" parameterType="int" resultMap="colorResultMapper"> select id, color, note from t_color where id = #{id} </select> ......
注意加粗的代码的配置,这样就可以在这里使用映射为枚举,而不需要在配置文件里面添加任何的配置了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论