javaType字符数组与jdbcType字符串转换(mybatis)

来源:互联网 发布:白光触摸屏 编程软件 编辑:程序博客网 时间:2024/06/10 09:06

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>

0 0