第一步创建一个需要转换的参数的Bean类Address(String province,String city,String stree)
第二步创建一个用来接收的javaBean类(int id,String name,Address a )
第三步创建一个AddressTypeHandler
implements TypeHandler extends BaseTypeHandler
package test; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class AddressTypeHandler extends BaseTypeHandler<Address> { @Override public void setNonNullParameter(PreparedStatement ps, int i, Address address, JdbcType jdbcType) throws SQLException { String adres = address.getProvince()+"," +address.getCity()+","+address.getStreet(); ps.setString(i, adres); } private Address getAdresFromString(String adres) { if(adres==null||"".equals(adres)) { return null; } String[] info = adres.split(","); Address adObj = new Address(info[0],info[1],info[2]); return adObj; } @Override public Address getNullableResult(ResultSet resultSet, String s) throws SQLException { return getAdresFromString(resultSet.getString(s)); } @Override public Address getNullableResult(ResultSet resultSet, int i) throws SQLException { return getAdresFromString(resultSet.getString(i)); } @Override public Address getNullableResult(CallableStatement callableStatement, int i) throws SQLException { return getAdresFromString(callableStatement.getString(i)); } }第四步在xml里配置
分为局部配置和全局配置
局部配置
这个是在配置具体的sql语句的xml里进行的
<insert id="saveTeacher"> insert into addr(id,place)values(#{id},#{place,jdbcType=VARCHAR, typeHandler=test.AddressTypeHandler}) </insert>全局配置
这个是在
configuration和environments之间配置的test为xxxTypeHandler对应的包名
<typeHandlers> <package name="test"/> </typeHandlers>