mybatis中insert语句,mybatis insert写法

  mybatis中insert语句,mybatis insert写法

  

目录

@Insert和@InsertProvider使用InsertProvider来注释错误解决过程。

 

  00-1010首先,在mybatis-generator.xml中配置返回主键

  在用户映射程序中

  @SelectKey:返回主键。具体解释见以下描述。@ @InsertProvider:type表示SQL工厂类,method是工厂类中对应的方法。

  @SelectKey注释源代码

  语句是要运行的SQL语句,其返回值由resultType指定。before表示查询语句运行的时间。keyProperty指示将查询结果分配给代码中的哪个对象,keyColumn指示将查询结果分配给数据库表中的哪个列。keyProperty和keyColumn不是必需的。在=true之前什么都可以查询,查询结果可以赋给keycroperty和-keyColumn。分配给keyColumn相当于在befaore=false之前更改数据库,先插入,然后查询。此时,只能将结果分配给keycroperty用于“读取”数据库,keyColumn用于写入数据库selectKey的两大作用:.

  1.生成主键;2.获取刚刚插入的数据的主键。注意:在MYSQL中,order是AFTER,因为只有成功执行insert语句才能获取当前和记录的主键值,而在ORACLE中,order是BEFORE,因为ORACLE需要先从序列中获取值,然后作为主键插入数据库。

  另外附上UserMapper.xml形式返回主键的方法。

  ?xml版本=1.0 编码=UTF-8 ?DOCTYPE Mapper PUBLIC -//mybatis . org//DTD Mapper 3.0//EN http://mybatis . org/DTD/mybatis-3-Mapper . DTD !-实体类的映射文件命名空间指定接口映射器命名空间的完整类名= com.wzl.dao.Usermapper !-Scheme 1 :此表的主键必须是自增auto _ increment usegeneratedkeys= true 。让自增主键开启返回函数keyColumn=id user。keyProperty=id 用户实体主键属性注意:支持自增主键的数据库MySQ。l和SqlServer,oracle不支持-insert id= adduser usegeneratedkeys= true key column= id key property= id insert into user values(null,#{user.username},#{user.birthday},#{user.sex},#{user.address}) /insert!-scheme 2: select key key column= id key property= id key property= id 用户表中的用户实体,result type= int key property用户实体的类型,order=AFTER 表示在执行insert之前执行此标签内部的sql语句,或者在[当主键自行添加时]之前[当使用指定的主键时]之后(AFTER)。在MYSQL中,order在after之后,因为只有成功执行insert语句才能获得当前和记录的主键值,而在ORACLE中,oder在BEFORE之前。因为ORACLE需要先从序列中获取值,然后将其作为主键插入数据库-insert id= add user 2 select key key column= id key property= id result type= int order= after select last _ insert _ id()/select key insert into user values(null,#{username},#{birthday},#{sex},#{address}) /insert/mapper

  00-1010 mybatis用于当前项目,是标注的方式。

  使用InsertProvider批注时报告错误:

  org . Apache . ibatis . builder . builder exception :在SQL批注上找不到value方法。原因: org . Apache . ibatis . builder . builder exception :为SqlProvider创建SqlSource时出错。方法.

  注释如下所示。

  @ insert provider(method= insert List ,type=SQL provider . class)public int insertInnerTable(List List,String dbTable);想法是写一个通用的插入集合的方法,但是在执行的时候报告了上面的错误。网上查资料失败。

  于是只好自己动手,丰衣足食。

  按照断点一步一步来,并遵循mybatis的错误报告方法,找到下面的代码

  试试这个。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){.}至此问题解决!

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行它。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: