Mybatis 查询数据返回基本类型数组

末蓝、 2022-06-16 03:59 370阅读 0赞

1. mybatis 查询数据的时候返回类型不能是基本类型的数组。如果是基本类型的数组会报类型转换错误。

  1. //StudentMapper
  2. public interface StudentMapper {
  3. int[] getAllStudentIds();
  4. }
  5. //StudentMapper.xml
  6. <?xml version="1.0" encoding="UTF-8" ?>
  7. <!DOCTYPE mapper
  8. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  9. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  10. <mapper namespace="com.morris.dao.StudentMapper">
  11. <resultMap id="orderInfo" type="com.morris.po.OrderInfo">
  12. <id property="id" column="order_id"/>
  13. <result property="orderNumber" column="order_number"/>
  14. <association property="orderAddress" javaType="com.morris.po.OrderAddress">
  15. <result property="region" column="region"/>
  16. <result property="district" column="district"/>
  17. <result property="city" column="city"/>
  18. <result property="street" column="street"/>
  19. </association>
  20. </resultMap>
  21. <select id="getAllStudentIds" resultType="int">
  22. select id
  23. from student;
  24. </select>
  25. </mapper>
  26. //验证
  27. public static void main(String [] args) {
  28. SqlSession session = getSqlSession();
  29. StudentMapper sm = session.getMapper(StudentMapper.class);
  30. int[] ids = sm.getAllStudentIds();
  31. for (int i : ids) {
  32. System.out.println(i);
  33. }
  34. }
  35. 运行程序会抛出ClassCastException
  36. Exception in thread "main" java.lang.ClassCastException: [I cannot be cast to [Ljava.lang.Object;
  37. at org.apache.ibatis.binding.MapperMethod.convertToArray(MapperMethod.java:141)
  38. at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:124)
  39. at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:63)
  40. at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
  41. at com.sun.proxy.$Proxy0.getAllStudentIds(Unknown Source)
  42. at com.morris.util.MybatisUtil.main(MybatisUtil.java:44)
  43. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  44. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  45. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  46. at java.lang.reflect.Method.invoke(Method.java:498)
  47. at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
  1. 解决方案
  1. 1. 接口中返回数据 用包装类来接收
  2. 1. `Integer[] getAllStudentIds();`
  3. 2. xml 配置中resultType=”int 改成 resultType=”java.lang.Integer
  4. 2. 接口中用list 来接收
  5. 1. `List<Integer> getAllStudentIds();`
  6. 2. xml 配置中resultType=”int 改成 resultType=”java.lang.Integer

发表评论

表情:
评论列表 (有 0 条评论,370人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JAVA 基本数据类型数组

    1、标识符与关键字: 1、标识符: 用来标识类名、变量名、方法名、类型名、数组名及文件名的有效字符序列称为标识符,简单的说,标识符就是一个名字。以下是JAVA关于标识符的...