Mybatis批量插入操作中,如何获取成功插入的记录数示例?

2026-04-30 04:182阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计781个文字,预计阅读时间需要4分钟。

Mybatis批量插入操作中,如何获取成功插入的记录数示例?

Mybatis 批量插入影响行数分析环境:PostgreSQL 9.6.5, Spring 4.1, Mybatis 3, JUnit 4, Log4j, ThesisMapper.xmlxml-- 批量插入--+ insert id=insertList parameterType=java.util.Listinsert into public.thesis (name) values foreach(c in list)(c)

Mybatis批量插入返回影响的行数

环境:

postgresql 9.6.5

spring 4.1

mybatis3

junit4

log4j

ThesisMapper.xml:

<!-- 批量插入 --> <insert id="insertList" parameterType="java.util.List"> insert into public.thesis (name) values <foreach collection="list" item="t" index="index" separator=","> ( #{t.name} ) </foreach> </insert>

Mapper.java 借口:

public interface ThesisMapper { int insertList(List<Thesis> thesisList); }

服务类:

ThesisService:

public int insertList(List<Thesis> thesisList) throws Exception { return thesisDao.insertList(thesisList); }

测试父类:

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:spring-mvc.xml", "classpath:spring-mybatis.xml" }) @WebAppConfiguration public class BaseTest { @Autowired protected WebApplicationContext wac; @Test public void test() {} }

测试类:

public class UserOpsTest extends BaseTest { @Autowired private ThesisService ts; @Test public void insertListTest() { List<Thesis> thesisList = new ArrayList<Thesis>(); Thesis t1 = new Thesis(); Thesis t2 = new Thesis(); Thesis t3 = new Thesis(); t1.setName("qq1"); t2.setName("ww2"); t3.setName("asd"); thesisList.add(t1); thesisList.add(t2); thesisList.add(t3); try { System.out.println(ts.insertList(thesisList)); } catch (Exception e) { e.printStackTrace(); } } }

日志输出:

[DEBUG] ==> Preparing: insert into public.thesis ( name) values ( ? ) [DEBUG] ==> Parameters: qq1(String), ww2(String), asd(String) [DEBUG] <== Updates: 3 3

返回结果既为所求.

源码地址:

github.com/timo1160139211/trans

补充:关于Mybatis的insert方法返回值(将返回值受影响条数改为插入后的自增主键id)

今天做ssm项目的时候有一个这样的需求——我借阅一本书然后生成一条借阅记录(借阅记录的主键是递增的“borrowNum”),然后将这条记录的主键返回,在往上查阅资料后知道,只要在对应的xml文件对应的那个方法加上两个属性就行了,代码如下:

<insert id="insert" parameterType="com.bsm.model.Borrow" useGeneratedKeys="true" keyProperty="borrownum" keyColumn="borrowNum" > insert into t_borrow (userAccount, bookInfoNum,borrowTime, giveBackTime) values (#{useraccount,jdbcType=VARCHAR},#{bookinfonum,jdbcType=INTEGER}, #{borrowtime,jdbcType=DATE}, #{givebacktime,jdbcType=DATE}) </insert>

就是加入的这三个属性:

useGeneratedKeys="true" keyProperty="borrownum" keyColumn="borrowNum"

Mybatis 配置文件 useGeneratedKeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回。

“keyProperty”的值对应入参的字段名,“keyColumn”的值对应数据库表中的列名。

入参字段:

但是我们想接收这个返回的id的时候却不是我们想要的

Mybatis批量插入操作中,如何获取成功插入的记录数示例?

int i=borrowMapper.insert(borrow);

我们得到的还是受影响的条数而不是返回的borrownum的值,那我们返回的borrownum去哪里了呢?在这里:我们的入参是不是一个borrow?

int mun=borrow.getBorrownum();

这个返回的mun就是我们要的borrownum了,原来这个返回的值放进了入参的那个对象中。

数据库字段:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易盾网络。如有错误或未考虑完全的地方,望不吝赐教。

标签:数目实例

本文共计781个文字,预计阅读时间需要4分钟。

Mybatis批量插入操作中,如何获取成功插入的记录数示例?

Mybatis 批量插入影响行数分析环境:PostgreSQL 9.6.5, Spring 4.1, Mybatis 3, JUnit 4, Log4j, ThesisMapper.xmlxml-- 批量插入--+ insert id=insertList parameterType=java.util.Listinsert into public.thesis (name) values foreach(c in list)(c)

Mybatis批量插入返回影响的行数

环境:

postgresql 9.6.5

spring 4.1

mybatis3

junit4

log4j

ThesisMapper.xml:

<!-- 批量插入 --> <insert id="insertList" parameterType="java.util.List"> insert into public.thesis (name) values <foreach collection="list" item="t" index="index" separator=","> ( #{t.name} ) </foreach> </insert>

Mapper.java 借口:

public interface ThesisMapper { int insertList(List<Thesis> thesisList); }

服务类:

ThesisService:

public int insertList(List<Thesis> thesisList) throws Exception { return thesisDao.insertList(thesisList); }

测试父类:

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:spring-mvc.xml", "classpath:spring-mybatis.xml" }) @WebAppConfiguration public class BaseTest { @Autowired protected WebApplicationContext wac; @Test public void test() {} }

测试类:

public class UserOpsTest extends BaseTest { @Autowired private ThesisService ts; @Test public void insertListTest() { List<Thesis> thesisList = new ArrayList<Thesis>(); Thesis t1 = new Thesis(); Thesis t2 = new Thesis(); Thesis t3 = new Thesis(); t1.setName("qq1"); t2.setName("ww2"); t3.setName("asd"); thesisList.add(t1); thesisList.add(t2); thesisList.add(t3); try { System.out.println(ts.insertList(thesisList)); } catch (Exception e) { e.printStackTrace(); } } }

日志输出:

[DEBUG] ==> Preparing: insert into public.thesis ( name) values ( ? ) [DEBUG] ==> Parameters: qq1(String), ww2(String), asd(String) [DEBUG] <== Updates: 3 3

返回结果既为所求.

源码地址:

github.com/timo1160139211/trans

补充:关于Mybatis的insert方法返回值(将返回值受影响条数改为插入后的自增主键id)

今天做ssm项目的时候有一个这样的需求——我借阅一本书然后生成一条借阅记录(借阅记录的主键是递增的“borrowNum”),然后将这条记录的主键返回,在往上查阅资料后知道,只要在对应的xml文件对应的那个方法加上两个属性就行了,代码如下:

<insert id="insert" parameterType="com.bsm.model.Borrow" useGeneratedKeys="true" keyProperty="borrownum" keyColumn="borrowNum" > insert into t_borrow (userAccount, bookInfoNum,borrowTime, giveBackTime) values (#{useraccount,jdbcType=VARCHAR},#{bookinfonum,jdbcType=INTEGER}, #{borrowtime,jdbcType=DATE}, #{givebacktime,jdbcType=DATE}) </insert>

就是加入的这三个属性:

useGeneratedKeys="true" keyProperty="borrownum" keyColumn="borrowNum"

Mybatis 配置文件 useGeneratedKeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回。

“keyProperty”的值对应入参的字段名,“keyColumn”的值对应数据库表中的列名。

入参字段:

但是我们想接收这个返回的id的时候却不是我们想要的

Mybatis批量插入操作中,如何获取成功插入的记录数示例?

int i=borrowMapper.insert(borrow);

我们得到的还是受影响的条数而不是返回的borrownum的值,那我们返回的borrownum去哪里了呢?在这里:我们的入参是不是一个borrow?

int mun=borrow.getBorrownum();

这个返回的mun就是我们要的borrownum了,原来这个返回的值放进了入参的那个对象中。

数据库字段:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易盾网络。如有错误或未考虑完全的地方,望不吝赐教。

标签:数目实例