MyBatis 插入时返回刚插入记录的主键值

Posted 勇闯天涯zfc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis 插入时返回刚插入记录的主键值相关的知识,希望对你有一定的参考价值。

MyBatis 插入时返回刚插入记录的主键值

一、要求:

1、数据库表中的主键是自增长的,如:id;

2、获取刚刚插入的记录的id值;

二、源代码:

1、User.java

 1 package cn.com.zfc.model;
 2 
 3 public class User {
 4 
 5     private Integer id;
 6     private String name;
 7     private String password;
 8 
 9     public Integer getId() {
10         return id;
11     }
12 
13     public void setId(Integer id) {
14         this.id = id;
15     }
16 
17     public String getName() {
18         return name;
19     }
20 
21     public void setName(String name) {
22         this.name = name;
23     }
24 
25     public String getPassword() {
26         return password;
27     }
28 
29     public void setPassword(String password) {
30         this.password = password;
31     }
32 
33     @Override
34     public String toString() {
35         return "User [id=" + id + ", name=" + name + ", password=" + password + "]";
36     }
37 
38 }

2、UserMapper.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 <mapper namespace="cn.com.zfc.model.UserMapper">
 4 
 5     <!-- 插入一条记录开始,返回主键插入记录的id -->
 6     <insert id="insert" parameterType="cn.com.zfc.model.User">
 7         insert into user
 8         (name,password)
 9         values
10         (#{name},#{password})
11         <!-- 
12             selectKey中order属性的值是不同的,BEFORE先选择主键,设置keyProperty的值然后执行插入语句。
13              AFTER是先执行插入语句,然后执行selectKey。 
14          -->
15         <selectKey keyColumn="id" keyProperty="id" order="AFTER"
16             resultType="Integer">
17             SELECT LAST_INSERT_ID() AS id
18         </selectKey>
19     </insert>
20     <!-- 插入一条记录结束 -->
21 </mapper>

3、mybatis-config.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <environments default="development">
 7         <environment id="development">
 8             <transactionManager type="JDBC" />
 9             <!-- 配置数据源 -->
10             <dataSource type="POOLED">
11                 <property name="driver" value="com.mysql.jdbc.Driver" />
12                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis_07" />
13                 <property name="username" value="root" />
14                 <property name="password" value="root" />
15             </dataSource>
16         </environment>
17     </environments>
18     <!-- 注册映射文件 -->
19     <mappers>
20         <!-- 注册映射文件,xml:resource -->
21         <mapper resource="cn/com/zfc/model/UserMapper.xml" />
22     </mappers>
23 </configuration>

4、MyBatisUtil.java

 1 package cn.com.zfc.util;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 
 6 import org.apache.ibatis.io.Resources;
 7 import org.apache.ibatis.session.SqlSessionFactory;
 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 9 
10 public class MyBatisUtil {
11 
12     private static SqlSessionFactoryBuilder sqlSessionFactoryBuilder = null;
13     private static SqlSessionFactory sessionFactory = null;
14     private static InputStream inputStream = null;
15 
16     static {
17         try {
18             // 加载mybatis主配置文件
19             inputStream = Resources.getResourceAsStream("mybatis-config.xml");
20             sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
21             // 获取SqlSessionFactory对象
22             sessionFactory = sqlSessionFactoryBuilder.build(inputStream);
23         } catch (IOException e) {
24             e.printStackTrace();
25         }
26     }
27 
28     /**
29      * 获取SqlSessionFactory对象
30      * 
31      * @return
32      */
33     public static SqlSessionFactory getSqlSessionFactory() {
34         return sessionFactory;
35     }
36 }

5、MyBatisTest.java

 1 package cn.com.zfc.test;
 2 
 3 import org.apache.ibatis.session.SqlSession;
 4 import org.apache.ibatis.session.SqlSessionFactory;
 5 
 6 import cn.com.zfc.model.User;
 7 import cn.com.zfc.util.MyBatisUtil;
 8 
 9 /**
10  * 获取刚插入数据库表中记录的自增长主键
11  * 
12  * @title MyBatisTest
13  * @describe
14  * @author 张富昌
15  * @date 2017年8月22日下午10:56:58
16  */
17 public class MyBatisTest {
18     public static void main(String[] args) {
19 
20         // 1、获取SqlSessionFactory
21         SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
22         // 2、获取SqlSession
23         SqlSession sqlSession = sqlSessionFactory.openSession();
24         String statement = "cn.com.zfc.model.UserMapper.insert";
25         User user = new User();
26         user.setName("张富昌2");
27         user.setPassword("123456");
28         // 执行添加操作之后返回的结果
29         int result = sqlSession.insert(statement, user);
30         // 提交
31         sqlSession.commit();
32         // 关闭
33         sqlSession.close();
34         System.out.println("result:" + result);
35         // 获取刚刚添加进去的自增长主键id
36         System.out.println("id:" + user.getId());
37     }
38 }

 三、运行效果

 

以上是关于MyBatis 插入时返回刚插入记录的主键值的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis应用记录:MyBatis如何得到插入数据之后的主键值

MyBatis+MySQL 返回插入的主键ID

mybatis中useGeneratedKeys用法--插入数据库后获取主键值

Mybaits插入记录返回主键值

mybatis如何获取oracle新插入数据记录的主键?

mybatis 实现 insert 语句返回 主键