mybatis基礎,mybatis配置文件核心組件typeHandler元素


無論是從預處理語句中設置一個值,還是從結果集里取出一個值,都會用類型處理器將獲取的值以合適的方式轉換成 Java 類型

可以重寫類型處理器或創建你自己的類型處理器來處理不支持的或非標准的類型

實現 org.apache.ibatis.type.TypeHandler 接口, 或繼承一個很便利的類 org.apache.ibatis.type.BaseTypeHandler, 然后可以選擇性地將它映射到一個 JDBC 類型

 

public class MyDemoTypeHandler extends BaseTypeHandler<String> {

	@Override
	public 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);
			
		}
	}

	@Override
	public 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";
		}
	}

	@Override
	public 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";
		}
		
	}

	@Override
	public 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());

這樣就可以完成數據類型的轉換


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM