mybatis使用用Provider去实现SQL拼接 错误记录

昨天使用Provider进行拼接sql,出现了一个Exception比较懵圈,先将我写的代码与错误cope出来。

    @UpdateProvider( type = SalaryProvider.class,method = "calTempTotal")
    void updateTempTotal(List<SalaryItemEntity> salaryItems);
public class SalaryProvider {

    /**计算合计*/
    public String calTempTotal(List<SalaryItemEntity> salaryItems){
        StringBuilder sql = new StringBuilder();
        sql.append("UPDATE t_salary set total = ( 0 ");
        for (SalaryItemEntity salaryItem : salaryItems){
            if (salaryItem.getType() == 1){
                sql.append(" + "+salaryItem.getValue());
            }else if(salaryItem.getType() == -1){
                sql.append(" - "+salaryItem.getValue());
            }
        }

        sql.append(" ) ");
        System.out.println(sql.toString());
        return sql.toString();
    }
}

最后拼接的字段可以像这样的:UPDATE t_salary set total = ( 0 -wage1 + wage2 + wage10);

出现的错误与这个拼接的代码没有关系,错误是mapper与Provider参数不对应错误

Error invoking SqlProvider method (com.xichuan.mapper.SalaryProvider.calTempTotal).  Cause: org.apache.ibatis.binding.BindingException: Parameter 'arg0' not found. Available parameters are [collection, list]

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (com.xichuan.mapper.SalaryProvider.calTempTotal).  Cause: org.apache.ibatis.binding.BindingException: Parameter 'arg0' not found. Available parameters are [collection, list]
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
	at com.sun.proxy.$Proxy97.update(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:294)
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:63)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
	at com.sun.proxy.$Proxy121.updateTempTotal(Unknown Source)
	at com.xichuan.service.impl.SalaryServiceImpl.uploadSalary(SalaryServiceImpl.java:397)
	at com.xichuan.controller.SalaryController.uploadSalary(SalaryController.java:97)
	at com.xichuan.controller.SalaryController$$FastClassBySpringCGLIB$$dcbf4d5a.invoke(<generated&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值