1.TypeHandler
写一个类来实现该mybatis中自定义转换器
/**
* javaType与jdbcType类型的转换器
* @author jiandandia
*
*/
@MappedTypes({String[].class})
@MappedJdbcTypes({JdbcType.VARCHAR})
public class StringArrayTypeHandler implements TypeHandler<String[]> {
public String[] getResult(ResultSet rs, String columnName)
throws SQLException {
String columnValue = rs.getString(columnName);
return this.getStringArray(columnValue);
}
public String[] getResult(ResultSet rs, int columnIndex)
throws SQLException {
String columnValue = rs.getString(columnIndex);
return this.getStringArray(columnValue);
}
public String[] getResult(CallableStatement cs, int columnIndex)
throws SQLException {
String columnValue = cs.getString(columnIndex);
return this.getStringArray(columnValue);
}
public void setParameter(PreparedStatement ps, int i, String[] parameter,
JdbcType jdbcType) throws SQLException {
if (parameter == null)
ps.setNull(i, Types.VARCHAR);
else {
StringBuffer result = new StringBuffer();
for (String value : parameter)
result.append(value).append(",");
result.deleteCharAt(result.length()-1);
ps.setString(i, result.toString());
}
}
private String[] getStringArray(String columnValue) {
if (columnValue == null)
return null;
return columnValue.split(",");
}
}
2.mybatsi配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="org.dtt.handler"/>
</typeAliases>
<!-- TypeHandler注册 -->
<typeHandlers>
<typeHandler handler="org.dtt.handler.StringArrayTypeHandler"/>
</typeHandlers>
<!-- 连接数据库配置信息 -->
<environments default="environment">
<environment id="environment">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver"
value="oracle.jdbc.driver.OracleDriver" />
<property name="url"
value="jdbc:oracle:thin:@localhost:8080:ORCL"/>
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
<!-- sql映射文件 -->
<mappers>
<mapper resource="sql/CostMapper.xml" />
</mappers>
</configuration>
3.sql映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="org.dtt.all.MainBatch">
<insert id="add_log" parameterType="org.dtt.all.MainBatch">
insert into log_record
(code_id,file_code,file_name,
file_text,error,status,create_time)
values
(s_code_id.nextval,#{file_code},#{file_name},#{file_text, javaType=[Ljava.lang.String;, jdbcType=VARCHAR},
#{error},#{status},sysdate)
</insert>
</mapper>