Mybatis-03-添加数据返回主键

在实际项目开发中很多情况下是需要获取新插入的数据的主键值。

在此已MySQL数据库的自增主键为例进行说明:

背景介绍:基础信息和数据库表结构信息请参见前面的文章。

 

1、mapper映射文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="UserSpace">
	<!-- 添加用户,返回主键 -->
	<insert id="addUserRetPrim" parameterType="com.wp.model.User">
		<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
			SELECT LAST_INSERT_ID()
		</selectKey>
		insert into user(username, sex, age, birthday, address)
		values(#{userName}, #{sex}, #{age}, #{birthDay}, #{address})
	</insert>
</mapper>

    注意:

    【selectKey】标签用于设置主键的返回方式。

      “resultType”:设置主键的返回类型。

      “order”:表示主键返回的时间。取值为:AFTER/BEFORE。“AFTER”表示在执行完成insert语句后返回此主键。“BEFORE”表示在指定insert语句之前返回此主键。

      “keyProperty”:表示在模型对象中的主键属性名称。在此模型对象中必须有此属性的get、set方法。

      【SELECT LAST_INSERT_ID()】是mysql查询最近插入数据库的主键语句。

 

2、测试文件:

package com.wp.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.wp.model.User;
import com.wp.util.DateUtil;


public class UserTest2 {

	@Test
	public void testAddUserRetPrim() {
		String resource = "mybatis-config.xml";
		try {
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			SqlSession session = sessionFactory.openSession();
			
			Date birthDay = DateUtil.parseStrToFullDate("1993-10-04", "yyyy-MM-dd");
			User user = new User("李太白", 1, 306, birthDay, "北京市西城区西直门");
			
			System.out.println("插入前主键:" + user.getId());
			session.insert("UserSpace.addUserRetPrim", user);
			session.commit();
			System.out.println("end....");
			session.close();
			System.out.println("插入后主键:" + user.getId());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}

 

3、测试结果及数据库结果:



 

 

 

 

 

 

 

 

         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Mybatis-plus支持通过`save()`方法插入数据返回主键。示例代码如下: ``` User user = new User(); user.setName("张三"); user.setAge(20); user.setEmail("zhangsan@example.com"); user.setManagerId(1088248166370832385L); user.setCreateTime(LocalDateTime.now()); user.setDeleted(0); userMapper.insert(user); Long id = user.getId(); ``` 其中,`userMapper`是Mybatis-plus生成的mapper类,`user`是实体类,`insert()`方法用于执行插入操作,并将主键设置到实体类中。 注意: 如果数据库表的主键是自增的,这里获取的就是自增的主键。 如果表的主键是UUID,那么可以在实体类上添加注解 @TableId(type = IdType.UUID)来实现。 ### 回答2: Mybatis-Plus 是一款基于 Mybatis 进行封装增强的开发框架,提供了一系列的操作数据库的增删改查方法,又不失原有的 Mybatis 灵活性,其使得开发者可以更加方便快捷的操作数据库。在使用Mybatis-Plus进行插入操作时,有时候需要获取插入后生成的主键ID,这时我们就可以使用 Mybatis-Plus 的插入返回主键的功能。 在Mybatis-Plus中,插入返回主键的方法比较简单,只需要在实体类中加上 @TableId 注解,并且指定其为数据库中的主键,然后在插入数据时即可返回生成的主键ID。 示例代码如下: 第一步:在实体类中加上 @TableId 注解并指定其为数据库中的主键 ``` @Data @TableName("user") public class User { @TableId(value = "id", type = IdType.AUTO) private Long id; // 用户ID private String username; // 用户名 private String password; // 密码 private String email; // 邮箱 } ``` 第二步:调用 Mybatis-Plus 的相应方法进行插入操作,并获取用 @TableId 注解指定的主键ID ``` // 获取 Mybatis 的 SqlSession 对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); // 获取 UserMapper 的代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 创建 User 对象 User user = new User(); user.setUsername("test"); user.setPassword("123456"); user.setEmail("test@example.com"); // 执行插入操作,并返回影响的行数 int result = userMapper.insert(user); // 获取插入自动生成的主键ID Long generatedId = user.getId(); // 提交事务并关闭连接 sqlSession.commit(); sqlSession.close(); ``` 以上就是使用 Mybatis-Plus 进行插入操作并返回主键ID的方法。需要注意的是,使用 Mybatis-Plus 进行插入操作时,插入 SQL 语句默认是使用 MySQL 的 replace into 语法,如果需要使用 insert into 语法,可以在 application.properties 中设置 mybatis-plus.global-config.db-config.insert-strategy 的值为 not_null。 ### 回答3: Mybatis-plus是Mybatis的增强版,提供了更为便捷的操作和处理方式。在插入数据时,Mybatis-plus提供了多种方式来返回主键。 1. 使用Mapper自带的insert方法插入数据后,通过获取插入后的主键值来返回主键。示例代码如下: ``` User user = new User(); user.setName("Tom"); user.setAge(18); userMapper.insert(user); Long id = user.getId(); // 获取插入后的主键值 ``` 2. 使用Mapper自带的insert方法插入数据后,通过使用KeyGenerator来返回主键。示例代码如下: ``` public interface UserMapper extends BaseMapper<User> { @Insert("insert into user(name, age) values(#{name}, #{age})") @SelectKey(statement="SELECT LAST_INSERT_ID()", keyProperty="id", before=false, resultType=Long.class) int insertUser(User user); } User user = new User(); user.setName("Tom"); user.setAge(18); userMapper.insertUser(user); // 调用自定义的insertUser方法 Long id = user.getId(); // 获取插入后的主键值 ``` 3. 使用Mybatis-plus提供的insert方法插入数据时,通过EntityWrapper来封装实体数据返回主键。示例代码如下: ``` User user = new User(); user.setName("Tom"); user.setAge(18); boolean success = user.insert(); // 调用insert方法 Long id = user.getId(); // 获取插入后的主键值 ``` 需要注意的是,以上方法只适用于MySQL数据库。对于其他数据库主键生成方式,需要使用不同的KeyGenerator来实现。在实际开发中,根据具体情况选择最适合的方式来返回主键
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值