Cause: org.apache.ibatis.ognl.OgnlException: source is null for getProperty(null, "username")

本文详细解析了在使用MyBatis框架时,因PageData参数不当使用导致的错误及其解决方法。强调了在mapper.xml文件中正确引用参数的重要性,并提供了正确的语法示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司开发项目中,出现一个错误,找了一下午,才找到一个类似的错误,现在记录一下。

 

报错信息:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'pd.username != null and pd.username != '''. Cause: org.apache.ibatis.ognl.OgnlException: source is null for getProperty(null, "username")

 

分析原因:

公司开发项目,是用一个项目框架来开发的,其中没有针对每个数据表建立实体类,而是直接创建PageData类型(继承HashMap并实现了Map接口),由此类来代替所有的实体类。

框架使用SSM。

当客户端请求Controller,我会通过new PageData()创建PageData()对象,将前端JSP传到Controller中方法的参数进行保存。由于mapper.xml映射文件中,时常会需要传递输入参数类型和输出参数类型,因此是直接传递PageData类型的参数。但此时在mapper.xml映射文件中不能使用pd.属性名来获取参数了,因此mybatis会直接用它封装的方法,return一个map。如下:

错误写法:

    <select id="findUserByUsername" parameterType="pd" resultType="pd">
        SELECT
            *
        FROM
            user
        <where>
            <if test="pd.username != null and pd.username != ''">
                AND user.username = #{pd.username}
            </if>
        </where>
    </select>

 

正确写法:把pd去掉即可

    <select id="findUserByUsername" parameterType="pd" resultType="pd">
        SELECT
            *
        FROM
            user
        <where>
            <if test="username != null and username != ''">
                AND user.username = #{username}
            </if>
        </where>
    </select>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值