今天在項目中遇到一個須要從數據中讀取一段字符而後轉化成list類型。因爲忘記了TypeHandler
的存在,就定義了一個對象,內部添加了一個String
和List
類型的成員變量,處理起來比較麻煩。忽然想到TypeHandler
不就是處理這種情景的嗎?!!java
TypeHandler
是Mybatis中用來將Java數據類型中和數據庫類型進行相互轉化的,mybatis中已經幫咱們封裝了大量的類型處理器,夠工做中使用了。如下爲mybatis中默認的的類型處理器。含有處理日期類型的DateTypeHandler
,處理字符創類型的StringTypeHandler
等。以下: sql
自定義typeHandler有兩種實現方式:數據庫
package com.sxt.typehandler;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.type.*;
import java.sql.*;
import java.util.Arrays;
import java.util.List;
@MappedTypes({List.class})
@MappedJdbcTypes(JdbcType.VARCHAR)
public class MyTypeHandler implements TypeHandler<List<String>> {
@Override
public void setParameter(PreparedStatement ps, int i, List<String> strings, JdbcType jdbcType) throws SQLException {
String s = StringUtils.join(strings, ",");
ps.setString(i,s);
}
@Override
public List<String> getResult(ResultSet resultSet, String s) throws SQLException {
return Arrays.asList(resultSet.getString(s).split(","));
}
@Override
public List<String> getResult(ResultSet resultSet, int i) throws SQLException {
String s = resultSet.getString(i);
return Arrays.asList(s.split(","));
}
@Override
public List<String> getResult(CallableStatement callableStatement, int i) throws SQLException {
String s = callableStatement.getString(i);
return Arrays.asList(s.split(","));
}
}
複製代碼
<typeHandlers>
<typeHandler handler="com.fcl.MyTypeHandler"/>
</typeHandlers>
複製代碼
<typeHandlers>
<package name="com.fcl"/>
</typeHandlers>
複製代碼
<resultMap id="query1" type="person">
<id property="id" column="id"/>
<result property="hobbys" column="hobbys" typeHandler="com.fcl.MyTypeHandler"/>
</resultMap>
複製代碼