Mybatis查询SQL:索引越界异常

在Springboot中使用sql进行查询时,报了一个索引越界异常

Error querying database.  Cause: java.lang.IndexOutOfBoundsException: Index 8 out of bounds for length 8
### The error may exist in file [D:\exam\paged_query\target\classes\mapper\exam\ZhrjAlarmInfoMapper.xml]
### The error may involve com.zhrj.exam.mapper.ZhrjAlarmInfoMapper.query
### The error occurred while handling results
### SQL: select         zi.id,         zi.dept_id,         zi.wan_ip,         zi.event_time,         zi.event_type,         zi.event_status,         zi.event_reasons,         zd.dept_name         from db50.zhrj_alarm_info zi         join db50.zhrj_dept zd on zi.dept_id = zd.dept_id  LIMIT ?
### Cause: java.lang.IndexOutOfBoundsException: Index 8 out of bounds for length 8] with root cause

java.lang.IndexOutOfBoundsException: Index 8 out of bounds for length 8
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) ~[na:na]
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) ~[na:na]
    at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266) ~[na:na]
    at java.base/java.util.Objects.checkIndex(Objects.java:359) ~[na:na]
    at java.base/java.util.ArrayList.get(ArrayList.java:427) ~[na:na]
    at 

查看配置文件,发现写的并没有问题

  <resultMap id="ZhrjAlarmInfoResult" type="com.zhrj.exam.entity.ZhrjAlarmInfo">
        <result column="id" property="id"></result>
        <result column="dept_id" property="deptId"></result>
        <result column="wan_ip" property="wanIp"></result>
        <result column="event_time" property="eventTime"></result>
        <result column="event_type" property="eventType"></result>
        <result column="event_status" property="eventStatus"></result>
        <result column="event_reasons" property="eventReasons"></result>
    </resultMap>


    <select id="query" resultMap="ZhrjAlarmInfoResult">
        select
        zi.id,
        zi.dept_id,
        zi.wan_ip,
        zi.event_time,
        zi.event_type,
        zi.event_status,
        zi.event_reasons,
        zd.dept_name
        from db50.zhrj_alarm_info zi
        join db50.zhrj_dept zd on zi.dept_id = zd.dept_id
        <where>
            <if test="eventStatus != null">
                and event_status = #{eventStatus}
            </if>
            <if test="eventType != null">
                and event_type = #{eventType}
            </if>
            <if test="eventReasons != null and eventReasons !=null">
                and event_reasons like concat('%',#{eventReasons},'%')
            </if>
        </where>
    </select>

查看实现类也没有发现问题

   @Override
    public PageQueryVo<ZhrjAlarmInfo> query(PageQueryDto pageQueryDto) {
        ZhrjAlarmInfo zhrjAlarmInfo = ZhrjAlarmInfo.builder().build();
        BeanUtils.copyProperties(pageQueryDto,zhrjAlarmInfo);
        Integer pageSize = pageQueryDto.getPageSize();
        Integer pageIndex = pageQueryDto.getPageIndex();

        log.info("{}",zhrjAlarmInfo);

        if(pageSize == 0 || pageIndex ==0){
            throw  new ParameterException("参数异常");
        }

        PageHelper.startPage(pageIndex,pageSize);
        Page<ZhrjAlarmInfo> zhrjAlarmInfos = zhrjAlarmInfoMapper.query(zhrjAlarmInfo);

        Integer total = Math.toIntExact(zhrjAlarmInfos.getTotal());
        List<ZhrjAlarmInfo> result = zhrjAlarmInfos.getResult();

        return new PageQueryVo<>(total,result,"查找成功");
    }

通过debug看,发现每次有运行到mapper查询的时候就出现了问题,既然sql没有问题,那么一定是传入的参数zhrjAlarmInfo有问题

查看实体类,发现使用了@Builder注解但没有加构造方法,加上了空参和有参构造之后就恢复了正常@AllArgsConstructor @NoArgsConstructor,两个都要加,不能少

@Data
@Builder
@JsonIgnoreProperties(ignoreUnknown = true)
public class ZhrjAlarmInfo implements Serializable {

    private static final long serialVersionUID = 1L;
    private Long id;

    // 部门ID
    private Long deptId;

    // 终端IP
    private String wanIp;

    // 采集时间
    private String eventTime;

    // 事件类型(DICT: event_type)
    private Integer eventType;

    // 事件状态(DICT: event_status)
    private Integer eventStatus;

    // 事件归集原因
    private String eventReasons;

    //部门得名字
    private String deptName;

    //事件类型得中文
    private String eventTypeName;

    /**
     * 事件状态中文
     */
    private String eventStatusName;

}

结论:

在使用Lombok的@Builder注解时,通常需要同时结合@AllArgsConstructor@NoArgsConstructor来确保正常运行。这是因为@Builder生成的构造函数需要在创建对象时设置属性,而@AllArgsConstructor提供了带有所有属性的构造函数,而@NoArgsConstructor提供了无参数构造函数。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值