mybatis + sqlserver 在插入数据的同时返回自增的主键id

时间:2021-03-16 21:47:26
  <insert id="addGoodsAndReturnId"  parameterType="com.project.entity.EmallGoodsWithBLOBs"> 

 <!--
      WARNING - @mbggenerated
      This element is automatically generated by MyBatis Generator, do not modify.
    -->

    insert into EMALL_GOODS ( GOODSNAME, CLASSID, 
      )
    values ( #{goodsname,jdbcType=VARCHAR})
      SELECT @@IDENTITY AS GOODSID

  </insert> 




这是执行的sql
2016-02-23 11:34:46 [http-8090-2] DEBUG com.project.dao.EmallGoodsMapper.addGoodsAndReturnId - ==>  Preparing: insert into EMALL_GOODS ( GOODSNAME) values ( ?) SELECT @@IDENTITY AS GOODSID 

2016-02-23 11:34:46 [http-8090-2] DEBUG com.project.dao.EmallGoodsMapper.addGoodsAndReturnId - ==> Parameters: ereqrqer(String)


SELECT @@IDENTITY AS GOODSID  这一句明明在sql中执行了,为什么每次返回的都是1 插入的数据的行数。
上面的sql语句在 sqlserver 视图工具执行时是可以的。



mybatis + sqlserver 在插入数据的同时返回自增的主键id

12 个解决方案

#1


会回写到参数对象中的。返回值表示影响行数,标准操作。

#3


引用 2 楼 rui888 的回复:
http://blog.csdn.net/jbgtwang/article/details/7307687

我都看过这样的   针对 sqlserver 的 是不行的啊 

#4


引用 3 楼 mengjg321 的回复:
Quote: 引用 2 楼 rui888 的回复:

http://blog.csdn.net/jbgtwang/article/details/7307687

我都看过这样的   针对 sqlserver 的 是不行的啊 
 报错吗?和你的jar版本有没有关系呢?

#5


我记得要返回key要数据库支持
然后是insert标签里面要加上key还是什么的有个关键字的..然后在你插入那个实体类里面的id属性才会有值

#6


引用 4 楼 rui888 的回复:
Quote: 引用 3 楼 mengjg321 的回复:

Quote: 引用 2 楼 rui888 的回复:

http://blog.csdn.net/jbgtwang/article/details/7307687

我都看过这样的   针对 sqlserver 的 是不行的啊 
 报错吗?和你的jar版本有没有关系呢?
mybatis + sqlserver 在插入数据的同时返回自增的主键id
是报错的 报的不是内置函数

#7


这是我的配置文件
<!-- 添加厂区 -->
<insert id="addPlant" parameterType="com.sundear.pojo.Plant"
useGeneratedKeys="true" keyProperty="id">
INSERT INTO t_plant
(plant_code,plant_title,note,parent_id,createtime,updatetime)
VALUES
(#{facCode},#{name},#{note},#{parentId},#{creatDate},#{updateDate})
</insert>

#8


引用 7 楼 zhengjf123 的回复:
这是我的配置文件
<!-- 添加厂区 -->
<insert id="addPlant" parameterType="com.sundear.pojo.Plant"
useGeneratedKeys="true" keyProperty="id">
INSERT INTO t_plant
(plant_code,plant_title,note,parent_id,createtime,updatetime)
VALUES
(#{facCode},#{name},#{note},#{parentId},#{creatDate},#{updateDate})
</insert>

我觉得你少了一个配置属性
useGeneratedKeys="true" keyProperty="id">

#9


<insert id="myInsertStatement">
    INSERT INTO TestTable (name, owner)
    VALUES (#name#, #owner#)
    <selectKey keyProperty="id" resultClass="int">
         SELECT SCOPE_IDENTITY()
    </selectKey>
</insert>


http://*.com/questions/3455796/generating-dao-with-ibatis-problem

#10


引用 9 楼 rui888 的回复:
<insert id="myInsertStatement">
    INSERT INTO TestTable (name, owner)
    VALUES (#name#, #owner#)
    <selectKey keyProperty="id" resultClass="int">
         SELECT SCOPE_IDENTITY()
    </selectKey>
</insert>


http://*.com/questions/3455796/generating-dao-with-ibatis-problem


你好  我这报错了 哥哥 您看应该怎么解决啊

mybatis + sqlserver 在插入数据的同时返回自增的主键id

#11


 我没环境测试。不同jar 版本 dtd 版本都可能发生问题。

我觉得7楼的办法也是可以的。useGeneratedKeys="true" keyColumn="id" keyProperty="id"
像这种,

#12


useGeneratedKeys="true" keyProperty="id" keyColumn="id"
keyProperty 是实体里面的属性,如果传入是map就是mao里的属性,keyColumn是表上的主键名称

mybatis对于sqlserver不太友好,最终这样才能返回主键id

另外不用加 selectKey标签

#1


会回写到参数对象中的。返回值表示影响行数,标准操作。

#2


#3


引用 2 楼 rui888 的回复:
http://blog.csdn.net/jbgtwang/article/details/7307687

我都看过这样的   针对 sqlserver 的 是不行的啊 

#4


引用 3 楼 mengjg321 的回复:
Quote: 引用 2 楼 rui888 的回复:

http://blog.csdn.net/jbgtwang/article/details/7307687

我都看过这样的   针对 sqlserver 的 是不行的啊 
 报错吗?和你的jar版本有没有关系呢?

#5


我记得要返回key要数据库支持
然后是insert标签里面要加上key还是什么的有个关键字的..然后在你插入那个实体类里面的id属性才会有值

#6


引用 4 楼 rui888 的回复:
Quote: 引用 3 楼 mengjg321 的回复:

Quote: 引用 2 楼 rui888 的回复:

http://blog.csdn.net/jbgtwang/article/details/7307687

我都看过这样的   针对 sqlserver 的 是不行的啊 
 报错吗?和你的jar版本有没有关系呢?
mybatis + sqlserver 在插入数据的同时返回自增的主键id
是报错的 报的不是内置函数

#7


这是我的配置文件
<!-- 添加厂区 -->
<insert id="addPlant" parameterType="com.sundear.pojo.Plant"
useGeneratedKeys="true" keyProperty="id">
INSERT INTO t_plant
(plant_code,plant_title,note,parent_id,createtime,updatetime)
VALUES
(#{facCode},#{name},#{note},#{parentId},#{creatDate},#{updateDate})
</insert>

#8


引用 7 楼 zhengjf123 的回复:
这是我的配置文件
<!-- 添加厂区 -->
<insert id="addPlant" parameterType="com.sundear.pojo.Plant"
useGeneratedKeys="true" keyProperty="id">
INSERT INTO t_plant
(plant_code,plant_title,note,parent_id,createtime,updatetime)
VALUES
(#{facCode},#{name},#{note},#{parentId},#{creatDate},#{updateDate})
</insert>

我觉得你少了一个配置属性
useGeneratedKeys="true" keyProperty="id">

#9


<insert id="myInsertStatement">
    INSERT INTO TestTable (name, owner)
    VALUES (#name#, #owner#)
    <selectKey keyProperty="id" resultClass="int">
         SELECT SCOPE_IDENTITY()
    </selectKey>
</insert>


http://*.com/questions/3455796/generating-dao-with-ibatis-problem

#10


引用 9 楼 rui888 的回复:
<insert id="myInsertStatement">
    INSERT INTO TestTable (name, owner)
    VALUES (#name#, #owner#)
    <selectKey keyProperty="id" resultClass="int">
         SELECT SCOPE_IDENTITY()
    </selectKey>
</insert>


http://*.com/questions/3455796/generating-dao-with-ibatis-problem


你好  我这报错了 哥哥 您看应该怎么解决啊

mybatis + sqlserver 在插入数据的同时返回自增的主键id

#11


 我没环境测试。不同jar 版本 dtd 版本都可能发生问题。

我觉得7楼的办法也是可以的。useGeneratedKeys="true" keyColumn="id" keyProperty="id"
像这种,

#12


useGeneratedKeys="true" keyProperty="id" keyColumn="id"
keyProperty 是实体里面的属性,如果传入是map就是mao里的属性,keyColumn是表上的主键名称

mybatis对于sqlserver不太友好,最终这样才能返回主键id

另外不用加 selectKey标签