如何解决我的Batis自定义TypeHandler无法正常运行
我对带有H2的IBatis自定义映射器有疑问。
运行查询时,我有一个H2 TEXT列(CLOB),其中有一个字符串:
@Select("select issue,count(*) from complaints WHERE company = #{companyName} group by issue order by 2 desc;")
fun getIssueCountsByCompanyName(@Param("companyName") companyName: String): List<Pair<String,Long>>
我有一个自定义的TypeMapper,可以看到它从CLOB中正确运行并提取String:
@MappedJdbcTypes(JdbcType.VARCHAR,JdbcType.CLOB,JdbcType.CHAR,JdbcType.NVARCHAR)
@MappedTypes(String::class)
class ClobTypeHandler: TypeHandler<String> {
override fun setParameter(ps: PreparedStatement?,i: Int,parameter: String?,jdbcType: JdbcType?) {
TODO("Not yet implemented")
}
fun getFromCol(col: Any?): String{
if(col == null){ return "" }
if(col is JdbcClob){
val returnValue =StreamUtils.copyToString(col.asciiStream,UTF_8)
// Examining with debugger shows `returnValue` is the correct String here
return returnValue
}
else {
return col.toString()
}
}
override fun getResult(rs: ResultSet?,columnName: String?): String {
return getFromCol(rs?.getObject(columnName))
}
override fun getResult(rs: ResultSet?,columnIndex: Int): String {
return getFromCol(rs?.getObject(columnIndex))
}
override fun getResult(rs: CallableStatement?,columnIndex: Int): String {
return getFromCol(rs?.getObject(columnIndex))
}
}
这是我的考试:
@Test
fun test_getIssues(){
var issueCounts = complaintMapper.getIssueCounts();
var issueCount = issueCounts.get(0)
assertFalse(issueCount.first.startsWith("clob"))
}
我收到此错误:
org.h2.jdbc.JdbcClob无法转换为java.lang.String java.lang.ClassCastException:org.h2.jdbc.JdbcClob无法转换为java.lang.String
因此,看起来MyBatis以某种方式调用了我期望的方法,并且该方法返回了正确的String值,但是当MYBatis将数据放入要返回的Object时,它正在将错误的值放入其中( CLOB而不是它从映射器获得的字符串)
这是怎么回事?是造成它的聚合,我不明白...
解决方法
结果可以解决此问题:
@Results(Result(column = "first",property = "first",typeHandler = H2ClobTypeHandler::class))
@Select("select issue as first,count(*) as second from complaints WHERE company = #{companyName} group by issue order by 2 desc;")
fun getIssueCountsByCompanyName(@Param("companyName") companyName: String): List<Pair<String,Long>>
当H2列为TEXT类型时,与选择使用String输入的泛型有关。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。