mybatis insert报错,mybatis注解批量insert
目录
使用插入提供者注解报错解决框架注解开发@InsertProviderUserprovider类制图人的书写
使用InsertProvider注解报错解决
目前项目在使用我的巴蒂斯,并且是使用注解的方式。
在使用插入提供者注解的时候报了一下的错误:
org。阿帕奇。伊巴提斯。建筑商。生成器异常:在结构化查询语言批注上找不到价值方法。原因: org。阿帕奇。伊巴提斯。建筑商。生成器异常:为SqlProvider创建SqlSource时出错。方法.
注解是如下这个样子的
@ insert provider(method= insert List ,type=SQL provider。class)public int insertInnerTable(List List,String dbTable);思路是要写一个通用的插入一个集合的方法,但是在执行的时候就报了上面的错误。
在网上查资料未果。
于是只能自己动手,丰衣足食了。
一步步跟断点,跟到框架了报错的方法中,发现了如下的代码
试试这个。sqlsourceparser=new SqlSourceBuilder(config);this.providerType=(Class?)provider.getClass().getMethod(type ).调用(提供者);提供者方法名称=(字符串)提供者。获取类().getMethod(method ).调用(提供者);对于(方法m :这个。提供商类型。get methods()){ if(提供者方法名称。equals(m . getname()){ if(m . getparametertypes()).长度2m。get returntype()==string。类){这个。提供者方法=m;这个。providertakesparameteobject=m . getparametertypes().长度==1;} } } } catch(Exception e){抛出新生成器异常(为SqlProvider创建SqlSource时出错Cause: e,e);}注意标黄的位置,终于发现导致错误的罪魁祸首了,原来是这里限制了参数的个数,不能操作两个参数的啊。
于是将方法以及注解改为如下形式
@InsertProvider(method=insert ,type=SQL provider。class)public int insert(SqlContext SqlContext);在SqlProvider中对应的方法为公共字符串插入(SqlContext sqlContext){.}至此问题解决
mybatis注解开发@InsertProvider
插入一条用户的数据,可以直接根据用户名和密码插入
//插入到用户(用户名,密码)值(?)@ Insert(插入到用户(用户名,密码)值(# {用户名},# {密码}))作废保存(用户用户);但是如果有一个需求,要求传入用户名和密码能正常输入,传入用户名、密码、id也能够正常插入,这个时候就可以使用供应者注解。
这个的用法就是可以创建一个方法类,在类里面做判断,让制图人里面的查询方法根据写的方法来选择需要的结构化查询语言语句。
Userprovider类
导入com。斯凯杜。springbootssm。实体。用户;公共类用户提供程序{公共字符串保存用户(用户用户){ if(用户。getid()==null){ return insert into User(username,password) values(#{username},# { password });} else { return insert into user values(# { id }、#{username}、# { password });} } }在这个类里面我们做判断,选择需要的结构化查询语言语句。
mapper的书写
@插入提供者(类型=用户提供者。class,method= save User )void save(User用户);以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行它。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。