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 }

 三、运行效果

时间: 2024-08-01 22:42:57

MyBatis 插入时返回刚插入记录的主键值的相关文章

mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法

[CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问题 [CSDN博客] mysql 主从复制 双主从复制原理 防止主键重复问题(必看) [CSDN博客] replace into导致mysql自增列导致主键重复问题分析 [CSDN博客] 一个循环更新某库所有表所有非主键列的值方法(sql 2005 & mysql) [CSDN博客] mysql i

IBatisNet:让insert操作返回新增记录的主键值

项目引用ibatis包: IBatisNet.Common.dll --文件版本1.6.2.0 IBatisNet.DataAccess.dll IBatisNet.DataMapper.dll 项目目录结构: 项目中使用ibatis做数据访问层已经有好长时间了.开发小组成员反映ibatis的insert操作返回的结果是null,这一点很是不爽. 其实,大家都是希望能够把新增记录的主键值返回出来. 上上周,大家有反编译ibatis的包,查看其实现原理,后来,又尝试其他方法,都没能给实现这个功能.

JDBC:元数据 &amp;&amp; 获取插入记录的主键值 &amp;&amp; _JDBC_处理 Blob

一.元数据 DatabaseMetaData类 DatabaseMetaData 类中提供了许多方法用于获得数据源的各种信息,通过这些方法可以非常详细的了解数据库的信息: getURL():返回一个String类对象,代表数据库的URL. getUserName():返回连接当前数据库管理系统的用户名. isReadOnly():返回一个boolean值,指示数据库是否只允许读操作. getDatabaseProductName():返回数据库的产品名称. getDatabaseProductV

mybatis insert语句 返回插入的记录的主键值

Map<String,Object> paymentMp = new HashMap<String,Object>();        paymentMp.put("amount", 12.0 );        paymentMp.put("pay", Attributes.Payment_Pay_No);        paymentMp.put("status", Attributes.Payment_Status_

Mybatis 插入数据后返回主键值

Oracle中获取刚刚插入记录的主键值: <insert id="insertSelective" parameterType="com.jxxx.p2pp.model.UUserInfo">     <selectKey resultType="java.math.BigDecimal" order="BEFORE" keyProperty="id">    SELECT U_US

mybatis在oracle插入对象后返回主键值

在mybatis中默认插入一条记录后,返回值为插入记录的条数. 现在想获取插入记录后,当前被插入的记录的主键值,需在insert方法中添加如下代码: <insert id="insert" parameterType="cn.com.pm.ppm.model.UserInfo" >   <selectKey resultType="java.math.BigDecimal" order="BEFORE" ke

jdbc 预编译处理 和spring返回自增主键值

利用GeneratedKeyHolder获得新建数据主键值 Spring利用GeneratedKeyHolder,提供了一个可以返回新增记录对应主键值的方法 : int update(PreparedStatementCreator psc, KeyHolder generatedKeyHolder)//该方法返回受影响的行数,同时将新增记录对应主键值赋值给generatedKeyHolder参数 Spring为KeyHolder接口指代了一个通用的实现类GeneratedKeyHolder,该

获取呈现在格表(table)记录的主键

用mouse点击表格(table)的行或是批定列,获取记录的主键值.在ASP.NET的MVC应用程序中,已经没有办法象ASP.NET的Data控件一样,如GridView,DataList和Repeater控件好找到记录记键值了.下面的示例中,Insus.NET演示,如何获取呈现在格表(table)记录的主键.打开以前练习的例子: 先来演示,点击行中任何一列,获取: 实时演示: 如果,我们想只能点击第一列,才去获取记录的主键值,也就是说,指定点击某一列,这样的话,我们改一下jQuery代码: 看

MyBatis+MySQL 返回插入记录的主键ID

今天用到了多个表之间的关系,另一个表中的一个字段要以第一个表的主键作为外键. 下面说两种方法,MyBatis+MySQL 返回插入记录的主键ID: 第一种: <insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User"> insert into us