200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > mybatis基础 mybatis配置文件核心组件typeHandler元素

mybatis基础 mybatis配置文件核心组件typeHandler元素

时间:2024-05-18 01:31:10

相关推荐

mybatis基础 mybatis配置文件核心组件typeHandler元素

无论是从预处理语句中设置一个值,还是从结果集里取出一个值,都会用类型处理器将获取的值以合适的方式转换成 Java 类型

可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型

实现org.apache.ibatis.type.TypeHandler接口, 或继承一个很便利的类org.apache.ibatis.type.BaseTypeHandler, 然后可以选择性地将它映射到一个 JDBC 类型

public class MyDemoTypeHandler extends BaseTypeHandler<String> {@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType)throws SQLException {String ssex=(String)parameter;if("男".equals(ssex)){ps.setInt(i, 0);}else if("女".equals(ssex)){ps.setInt(i, 1);}else{ps.setInt(i, 2);}}@Overridepublic String getNullableResult(ResultSet rs, String columnName) throws SQLException {int ssex=rs.getInt(columnName);if(ssex==0){return "男";}else if(ssex==1){return "女";}else{return "not know";}}@Overridepublic String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {int ssex=rs.getInt(columnIndex);if(ssex==0){return "男";}else if(ssex==1){return "女";}else{return "not know";}}@Overridepublic String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {int ssex=cs.getInt(columnIndex);if(ssex==0){return "男";}else if(ssex==1){return "女";}else{return "not know";}}}

1 <!-- mybatis-config.xml -->2 <typeHandlers>3 <typeHandler handler="cn.cgq.demo.mybatis.typeHandler.MyDemoTypeHandler" javaType="String" jdbcType="INTEGER"/>4</typeHandlers>

MyBatis 不会窥探数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指明那是 VARCHAR 类型的字段, 以使其能够绑定到正确的类型处理器上。

在StudentMapper.xml中

1 <resultMap id="StudentResult" type="Student"> 2 <id column="sid" property="sid"/> 3 <result column="sname" property="sname"/>4 <result column="ssex" property="ssex" javaType="String" jdbcType="INTEGER"/>5 <result column="saddress" property="saddress"/> 6</resultMap>7 <select id="selectStudentBySsex" parameterType="String" resultType="Student">8 select * from Student where ssex=#{ssex,javaType=String,jdbcType=INTEGER}9</select>

javaType="String"java对应的数据类型

jdbcType="INTEGER"数据路对应的数据类型

表为4个字段,在数据库中ssex用int存储,而在java中用“男”,“女”来表示数据库中的0,1

1 Student student = session.selectOne("cn.cgq.demo.mybatis.mapper.StudentMapper.selectStudentBySsex", "女");2 System.out.println(student.toString());

这样就可以完成数据类型的转换

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。