mybatis insert into select 返回值
时间: 2023-08-23 17:17:55 浏览: 78
MyBatis的insert into select语句并没有返回值。insert into select语句用于将一个查询的结果集插入到另一个表中,它只执行数据的插入操作,并不返回任何结果。如果你需要获取插入的记录数,可以使用insert语句的返回自增主键或使用select count(*)来获取插入的记录数。
相关问题
mybatis中如何在insert语句中select语句后的结果
在 MyBatis 中,我们可以使用 `<selectKey>` 元素来获取插入语句中生成的主键值或者其他需要返回的值。`<selectKey>` 可以被放置在 `<insert>` 元素中,当在执行插入操作时,MyBatis 会先执行 `<selectKey>` 中的 SQL 语句,然后使用得到的结果值来设置插入语句中的相应参数。
下面是一个插入用户信息并返回自增主键的示例:
```
<insert id="insertUser" parameterType="User">
<!-- 执行插入操作,并在插入成功后返回自增主键 -->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>
```
在上面的代码中,我们使用了 `SELECT LAST_INSERT_ID()` 来获取自增主键的值,并将其赋值给 `id` 属性。`keyProperty` 属性指定了返回值应该被设置到哪个属性中,`order` 属性指定了 `<selectKey>` 元素应该在插入语句之前还是之后执行,`resultType` 属性指定了返回值的类型。
注意:`<selectKey>` 元素必须放在 `<insert>` 元素内部,并且只能有一个 `<selectKey>` 元素。如果同时需要返回多个值,可以使用 `resultMap` 或者将返回值封装为一个对象。
mybatisplus 如何使用insertselect
Mybatis-Plus中的insertSelect是用来将查询结果插入到指定表中的操作。下面是使用insertSelect的示例代码:
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(User::getAge, 18);
// 指定插入的表和列
String insertSql = "insert into user_copy(id, name, age) ";
// 执行查询并插入到指定表中
int result = userMapper.selectObjs(queryWrapper)
.stream()
.map(obj -> (User)obj)
.map(user -> insertSql + "values(" + user.getId() + ", '" + user.getName() + "', " + user.getAge() + ")")
.map(sql -> userMapper.insert(new SqlExpression(sql)))
.reduce(0, Integer::sum);
```
上述示例中,我们使用了Mybatis-Plus提供的查询构造器QueryWrapper,指定查询条件为年龄为18岁的用户。接着,我们将查询结果插入到user_copy表中,插入的列为id、name和age。具体实现中,我们使用了Java 8中的流式编程,将查询结果转换为User对象,并将每个对象转换为插入语句,最后使用reduce方法将所有插入操作的返回值相加,得到最终的结果。需要注意的是,为了将插入语句作为动态SQL执行,我们需要将其封装为SqlExpression对象。