mybatis-plus select的坑

 select 导致 NPE

 mapper方法命名要注意

一句简单的mybatis-plus lambdaUpdate语句莫名其妙的出现异常 :

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'modifier' not found. Available parameters are [ew, param1, et, param2]
        at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)
        at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)
        at com.sun.proxy.$Proxy219.update(Unknown Source)
     

业务代码是:

userService.lambdaUpdate().eq(User::getName, "Jack").set(User::getName, "xx").update();

modifier是User类的一个字段,但是并没有更新这个字段,难道是mybatis-plus出bug了么?

问题分析

在debug过程中发现执行了UserMapper中的update方法,然后看了mapper竟然发现定义了一个方法:

int update(UserDO user);

对应的mapper sql是:

 <update id="update" parameterType="UserDO">
        update perf2_period_document
        <set>
            <if test="modifier != null">
                modifier = #{modifier},
            </if>
       ...

问题结论

mapper中自定义方法名不要使用mybatis-plus的默认方法名字!!update、select、remove等,容易引起mybatis-plus异常,另外新增的方法一定要有含义,这种update直接使用lambdaUpdate。

select 只能调用一次

 

### MyBatis-Plus 中 `SELECT AS` 的使用 在 MyBatis-Plus 中,可以灵活地使用 SQL 查询语句中的 `SELECT AS` 来重命名查询结果列。这可以通过编写自定义的 XML 映射文件来实现。 #### 自定义 XML 配置方式 当需要执行复杂的查询并使用 `AS` 关键字时,推荐采用 XML 文件的方式来进行配置。下面是一个具体的例子: 假设有一个名为 `User` 的实体类以及对应的数据库表 `users`: ```java public class User { private Long id; private String name; private Integer age; // Getters and Setters... } ``` 为了从 `users` 表中选择数据并将某些字段名映射成不同的名字返回给 Java 对象,在相应的 Mapper 接口下创建一个 XML 文件,并加入如下 SQL 片段: ```xml <!-- src/main/resources/mapper/UserMapper.xml --> <select id="selectUsersWithAlias" resultType="com.example.User"> SELECT user_id AS "id", full_name AS "name", years_old AS "age" FROM users </select> ``` 这里的关键在于将原始列名(如 `user_id`, `full_name`, 和 `years_old`) 转换成与目标对象属性相匹配的名字(`id`,`name`,`age`). 这种做法不仅限于简单的类型转换,还可以用于更复杂的数据处理场景. 对于上述情况,确保所使用的别名能够正确对应到实体类中的变量名称上[^1]。 另外需要注意的是,如果希望利用 MyBatis-Plus 提供的一些便捷特性而不仅仅是原生SQL的支持,则可能还需要调整一些默认设置以兼容这两种风格共存的情况[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值