mybatis执行无参数mapper方法

记录一次mybatis使用无参数mapper方法踩的坑。

mybatis版本2.2.0

当时这么写的

mapper.java
int updateA();

mapper.xml
<update id="updateA">
    update table_a set a = 1 where a = 2;
</update>

serviceImpl.java
mapper.updateA();

语句经过测试,没有问题,但是到了代码中,执行到调用此方法

serviceImpl.java
mapper.updateA();

报了个空指针异常,点进去看了一下,发现最里面那一层抛了一个异常MyBatisSystemException

百度了一下,说是跟参数有关系,我寻思我这也没有参数啊,但是联想到最后的空指针异常,就随便给了个参数,虽然用不到

service.java
int update(Long id);

serviceImpl.java
int updateA(1L);

然后就奇迹般的通过了,没再报错,无语了老半天,花了两个小时。

MyBatis中,拦截器是一种强大的机制,可以对SQL语句的执行进行拦截和处理。如果想要在拦截器中新增Mapper参数,可以通过以下步骤实现: 首先,需要自定义一个拦截器,在该拦截器的intercept方法中对SQL语句进行处理。在处理的过程中,可以新增Mapper参数。具体可以通过以下代码实现: ```java public class MyInterceptor implements Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable { // 获取原始的Mapper参数 Object[] args = invocation.getArgs(); // 新增的Mapper参数 Object extraMapperParam = new Object(); // 将新增的Mapper参数添加到原始的参数中 Object[] newArgs = ArrayUtils.addAll(args, extraMapperParam); // 将新的参数设置到Invocation中 invocation.setArgs(newArgs); // 执行原始的拦截器逻辑 return invocation.proceed(); } } ``` 其次,在Mapper接口的方法上添加注解@Intercepts,指定要拦截的拦截器及对应的方法。可以通过以下代码实现: ```java @Intercepts({ @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}) }) public interface MyMapper { // Mapper方法 } ``` 最后,在MyBatis配置文件中配置该拦截器。可以通过以下代码实现: ```xml <plugins> <plugin interceptor="com.example.MyInterceptor"></plugin> </plugins> ``` 通过上述步骤,就可以在自定义的拦截器中新增Mapper参数。在拦截器中可以获取到原有的Mapper参数,并可以对其进行处理。同时,还可以新增自定义的Mapper参数,以满足业务需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值