Parameter index out of range (2 > number of parameters, which is 1【已解决】

1、SysLogMapper.xml添加注释导致的

    <!--定义一个查询方法,用于获取日志列表-->
    <!--方法ID为getLogList,返回类型com.main.server.api.model.SysLogModel,参数类型为com.main.server.api.dto.LogDto-->
    <select id="getLogList" resultType="com.main.server.api.model.SysLogModel" parameterType="com.main.server.api.dto.LogDto">
        /*查询语句,通过join操作查询sys_log和sys_user表的数据*/
        /*根据log_user_id和id关联sys_log和sys_user表,获取用户名*/
        select a.*,b.real_name as user_name from sys_log a join sys_user b on a.log_user_id = b.id
        /*使用where子句过滤查询条件*/
        <where>
            /*如果LogDto中的userId不为空,则添加过滤条件b.id = #{userId}*/
            <if test="userId != null">
                b.id = #{userId}
            </if>
            /*如果LogDto中的logMsg不为空,则添加过滤条件log_msg like concat('%',#{logMsg},'%')*/
            /*使用concat函数和like操作符实现模糊查询*/
            <if test="logMsg != null and logMsg.trim() != ''">
                and log_msg like concat('%',#{logMsg},'%')
            </if>
        </where>
        /*按照id降序排序排列查询结果*/
        order by id desc
    </select>

在这里插入图片描述

java.lang.RuntimeException: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='userId', mode=IN, javaType=class java.lang.Integer, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #2 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='userId', mode=IN, javaType=class java.lang.Integer, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #2 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
Caused by: org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='userId', mode=IN, javaType=class java.lang.Integer, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #2 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
	at org.apache.ibatis.scripting.defaults.DefaultParameterHandler.setParameters(DefaultParameterHandler.java:89)
	at org.apache.ibatis.executor.statement.PreparedStatementHandler.parameterize(PreparedStatementHandler.java:93)
Caused by: org.apache.ibatis.type.TypeException: Error setting non null for parameter #2 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
	at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:55)
	at org.apache.ibatis.scripting.defaults.DefaultParameterHandler.setParameters(DefaultParameterHandler.java:87)
	... 59 more
Caused by: java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)

2、解决方法

把注释去掉

    <!--定义一个查询方法,用于获取日志列表-->
    <!--方法ID为getLogList,返回类型com.main.server.api.model.SysLogModel,参数类型为com.main.server.api.dto.LogDto-->
    <select id="getLogList" resultType="com.main.server.api.model.SysLogModel" parameterType="com.main.server.api.dto.LogDto">
        /*查询语句,通过join操作查询sys_log和sys_user表的数据*/
        /*根据log_user_id和id关联sys_log和sys_user表,获取用户名*/
        select a.*,b.real_name as user_name from sys_log a join sys_user b on a.log_user_id = b.id
        /*使用where子句过滤查询条件*/
        <where>

            <if test="userId != null">
                b.id = #{userId}
            </if>

            <if test="logMsg != null and logMsg.trim() != ''">
                and log_msg like concat('%',#{logMsg},'%')
            </if>
        </where>
        /*按照id降序排序排列查询结果*/
        order by id desc
    </select>

想加注释也可以,可以用下面这种方式:

    <!--定义一个查询方法,用于获取日志列表-->
    <!--方法ID为getLogList,返回类型com.main.server.api.model.SysLogModel,参数类型为com.main.server.api.dto.LogDto-->
    <select id="getLogList" resultType="com.main.server.api.model.SysLogModel" parameterType="com.main.server.api.dto.LogDto">
        /*查询语句,通过join操作查询sys_log和sys_user表的数据*/
        /*根据log_user_id和id关联sys_log和sys_user表,获取用户名*/
        select a.*,b.real_name as user_name from sys_log a join sys_user b on a.log_user_id = b.id
        /*使用where子句过滤查询条件*/
        <where>
            <!--如果LogDto中的userId不为空,则添加过滤条件b.id = #{userId}-->
            <if test="userId != null">
                b.id = #{userId}
            </if>
            <!--如果LogDto中的logMsg不为空,则添加过滤条件log_msg like concat('%',#{logMsg},'%')-->
            <!--使用concat函数和like操作符实现模糊查询-->
            <if test="logMsg != null and logMsg.trim() != ''">
                and log_msg like concat('%',#{logMsg},'%')
            </if>
        </where>
        /*按照id降序排序排列查询结果*/
        order by id desc
    </select>

3、总结

在xml中,注释尽量用下面这种的

<!-- -->
这种注释形式被称为 HTML 注释。它用于在 HTML 代码中添加注释,注释的内容不会在网页中显示,仅作为开发人员的备注或用于临时禁用部分 HTML 代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值