mybatis 数组array参数报错org.apache.ibatis.exceptions.PersistenceException: ### Error querying dat
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis 数组array参数报错org.apache.ibatis.exceptions.PersistenceException: ### Error querying dat相关的知识,希望对你有一定的参考价值。
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.ClassCastException: [I
### The error may exist in myBatis/userMapper.xml
### The error may involve com.dao.UserMapper.queryActiclesByArray
### The error occurred while executing a query
### Cause: java.lang.ClassCastException: [I
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:61)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:53)
at org.apache.ibatis.binding.MapperMethod.executeForList(MapperMethod.java:82)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:63)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:35)
at $Proxy1.queryActiclesByArray(Unknown Source)
at com.test.MyBatisTest.dynamicForeachTest2(MyBatisTest.java:79)
at com.test.MyBatisTest.main(MyBatisTest.java:42)
Caused by: java.lang.ClassCastException: [I
at org.apache.ibatis.builder.xml.dynamic.ExpressionEvaluator.evaluateIterable(ExpressionEvaluator.java:29)
at org.apache.ibatis.builder.xml.dynamic.ForEachSqlNode.apply(ForEachSqlNode.java:36)
at org.apache.ibatis.builder.xml.dynamic.MixedSqlNode.apply(MixedSqlNode.java:14)
at org.apache.ibatis.builder.xml.dynamic.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:22)
at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:198)
at org.apache.ibatis.executor.BaseExecutor.createCacheKey(BaseExecutor.java:119)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:88)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:72)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:59)
... 7 more
<select id="queryActiclesByArray" resultType="Article" >
select id,userid,title,content from article where id in
<foreach collection="array" index="index" item="item" open="(" separator="," close=")">
#item
</foreach>
</select>
mybatis 数组array参数报错,是设置错误造成的,解决方法如下:
1、首先使用数组前首先需要创建一个数组出来,并且初始化,对数组赋值。创建一个mybooks的数组,对数组进行赋值。
2、数组创建成功后,那么如何输出数组中的元素,需要使用 for...in 声明来循环输出数组中的元素。
3、访问页面,查看输出结果,正常输出,在这里顺便介绍一下javascript Array对象属性:constructor 描述:返回对创建此对象的数组函数的引用。
4、使用concat() 合并两个数组,继续刚才步骤1的代码进行完善,再声明一个数组,如图。
5、最后直接调用concat()方法,将两个数组合并,array.concat(array2); 如下。
参考技术A /*** 3个get方法,是从数据库中查数据时用的
* 最后的set方法,是插入或修改数据时用的,需要重写一下构造器
* SQL语句示例:
* UPDATE tab SET col = #param, typeHandler=typeHandlerName
**/
public class IntArrayTypeHandler extends BaseTypeHandler<Object> implements TypeHandler<Object>
@Override
public int[] getNullableResult (ResultSet rs, String s) throws SQLException
Array a = rs.getArray (s);
int[] intArray = null;
if (a != null)
intArray = (int[]) a.getArray ();
try
a.free ();
catch (Exception e)
return intArray;
@Override
public int[] getNullableResult (ResultSet rs, int i) throws SQLException
Array a = rs.getArray (i);
int[] intArray = null;
if (a != null)
intArray = (int[]) a.getArray ();
try
a.free ();
catch (Exception e)
return intArray;
@Override
public int[] getNullableResult (CallableStatement callablestatement, int i) throws SQLException
Array a = callablestatement.getArray (i);
int[] intArray = null;
if (a != null)
intArray = (int[]) a.getArray ();
try
a.free ();
catch (Exception e)
return intArray;
@Override
public void setNonNullParameter (PreparedStatement ps, int i, Object parameter, JdbcType jdbcType)
throws SQLException
if (parameter == null)
ps.setArray (i, null);
else
@SuppressWarnings("unchecked")
ArrayList<Object> intList = (ArrayList<Object>) parameter;
Integer[] objectArray = new Integer[intList.size ()];
for (int j = 0; j < intList.size (); j++)
objectArray[j] = Integer.parseInt (intList.get (j).toString ());
Array array = ps.getConnection ().createArrayOf ("integer", objectArray);
ps.setArray (i, array);
参考技术B array参数的类型是什么追问
inti[] arr
追答这个写法没有问题的。
检查检查别名等的设置
array需要设置别名吗,我使用List是可以成功查询的,我的提示的是Class类型转换错误,怎么我使用List时候就没这个错误呢
追答resultType="Article"
有没有设置别名什么的。
有的
mybatis仅传入一个String类型参数报错
mybatis中仅传入一个String类型参数时,不可以用 以下方式
List<Map<String,Object> selectEmployee(String time)
这种方式传参会报错There is no getter for property named ‘id‘ in class ‘java.lang.String‘
目前我知道有两种方式解决问题
1.用 _parameter
<if test="_parameter !=null and _parameter !=‘‘"> DATE_FORMAT( dms.statistic_date, ‘%Y-%m‘ ) = #_parameter,jdbcType=VARCHAR </if>
2.在mapper中参数加上@Param注解
List<Map<String,Object> selectEmployee(@param("time") String time)
以上是关于mybatis 数组array参数报错org.apache.ibatis.exceptions.PersistenceException: ### Error querying dat的主要内容,如果未能解决你的问题,请参考以下文章
mybatis报错:java.lang.IllegalArgumentException: invalid comparison: java.util.Arrays$ArrayList and jav