很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作。针对这个问题,有两种解决方案:

  • 先插入,后查询。我们可以先插入一条数据,然后根据插入的数据的各个字段值,再次访问数据库,从数据库中将刚刚插入的数据查询出来。当然,这种方法是很笨的,不提倡使用。
  • MyBatis为我们提供了一种在插入数据后获取自增主键的方式,通过这种方式,我们可以在插入一条数据之后直接从插入的POJO对象中取出id即可。这种方式简单且效率高、节省代码量,因此提倡使用。

  Mapper.xml文件中的代码如下:

<mapper namespace="testuser">
<insert id="insertUser" parameterType="com.itgungnir.hellomybatis.bean.User">
<!-- 将插入数据的主键返回,返回到User对象中 -->
<!-- keyProperty:将查询到的主键值设置到parameterType对象的哪个属性中 -->
<!-- order:SELECT LAST_INSERT_ID()语句的执行顺序(相对于insert语句来说的执行顺序) -->
<!-- resultType:指定SELECT LAST_INSERT_ID()语句的结果类型 -->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
<!-- SELECT LAST_INSERT_ID():得到刚insert到数据表中的记录的主键值,只适用于自增主键 -->
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO user(name) VALUES(#{name})
</insert>
</mapper>

  测试代码中这样写:

public void insertUser(){
SqlSession session = null;
try {
// MyBatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream is = Resources.getResourceAsStream(resource);
// 创建会话工厂,传入MyBatis配置文件的信息
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
// 通过工厂得到SqlSession
session = factory.openSession();
// 要添加到数据库中的作为参数的员工对象
User user = new User();
user.setName("111111");
// 通过SqlSession操作数据库,查询结果是与映射文件中的resultType相匹配的数据类型
// 第一个参数:映射文件中Statement的id,等于namespace+"."+statementid
// 第二个参数:指定和映射文件中的SQL语句匹配的parameter type类型的参数
session.insert("testuser.insertUser", user);
// 提交事务
session.commit();
// 打印主键
System.out.println(user.getId());
} catch (IOException e) {
e.printStackTrace();
} finally {
// 释放资源(会话资源)
if (session != null) {
session.close();
}
}
}

【JAVA - SSM】之MyBatis插入数据后获取自增主键的更多相关文章

  1. mybatis框架(6)---mybatis插入数据后获取自增主键

    mybatis插入数据后获取自增主键 首先理解这就话的意思:就是在往数据库表中插入一条数据的同时,返回该条数据在数据库表中的自增主键值. 有什么用呢,举个例子: 你编辑一条新闻,同时需要给该新闻打上标 ...

  2. 【JavaEE】之MyBatis插入数据后获取自增主键

    很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作.针对这个问题,有两种解决方案: 先插入,后查询.我们可以先插入一条数据,然后根据插入的数据的各个字段值,再 ...

  3. mybatis插入数据后返回自增主键ID详解

    1.场景介绍: ​ 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后 ...

  4. mybatis新增数据后获取自增主键

    mybatis对应mysql <insert id="insert" parameterType="com.timestech.wsgk.web.model.Sys ...

  5. C#连接mysql数据库插入数据后获取自增长主键ID值

    From: http://blog.csdn.net/zbc496218/article/details/51082983 MySqlConnection conn = new MySqlConnec ...

  6. SQL Server 插入数据后获得自增主键值

    通过SQLServer系统自带函数获取 String sql = "insert into goods values('" + TextBox1.Text + "',&q ...

  7. Mybatis学习笔记4 - 获取自增主键的值

    获取自增主键的值:mysql支持自增主键,自增主键值的获取,mybatis也是利用statement.getGenreatedKeys():useGeneratedKeys="true&qu ...

  8. Mybatis中,当插入数据后,返回最新主键id的几种方法,及具体用法

    insert元素 属性详解 其属性如下: parameterType ,入参的全限定类名或类型别名 keyColumn ,设置数据表自动生成的主键名.对特定数据库(如PostgreSQL),若自动生成 ...

  9. mybatis插入数据后返回自增的主键id

    在插入数据时候想自动返回mysql的自增的主键,需要在mapper.xml中配置下: <insert id="insert" parameterType="com. ...

随机推荐

  1. JBPM4 常用表结构及其说明

    本文从表结构.操作时表的变化以及jbpm4.4各个包的作用来介绍jbpm的. 第一部分:表结构说明 Jbpm4 共有18张表,如下,其中红色的表为经常使用的表   一:资源库与运行时表结构 1.  J ...

  2. osg(OpenSceneGraph)学习笔记1:智能指针osg::ref_ptr<>

    OSG的智能指针,osg::ref_ptr<> osg::Referenced类管理引用计数内存块,osg::ref_ptr需要使用以它为基类的其它类作为模板参数. osg::ref_pt ...

  3. 用Python和Django实现多用户博客系统(二)——UUBlog

    这次又更新了一大部分功能,这次以app的形式来开发. 增加博客分类功能:博客关注.推荐功能(ajax实现) 增加二级频道功能 更多功能看截图及源码,现在还不完善,大家先将就着看.如果大家有哪些功能觉的 ...

  4. 将yyyyMMdd HH:mm:ss格式的时间转换成时间类型

    DateTime.ParseExact(gmt_withdrawal, "yyyyMMddHHmmss", System.Globalization.CultureInfo.Cur ...

  5. armv7a-mediatek451_001_vfp-linux-gnueabi-gcc: directory: No such file or directory 编译error

    release/vm_linux/output/hisense_android/mt5399_cn_android_JB/rel/obj/oss/source/arm_mali_ko/mali400- ...

  6. Linq语句与aspnetpager结合分页

    public void DataBindList()        {            List<EnDeContent> listCon = null;            in ...

  7. android开发环境重装系统之后的配置

    前提: 之前配置好的android开发环境:重装系统:压缩了android目录 配置: 安装java环境 安装; 建立JAVA_HOME变量:JAVAHOME添加到path变量 JAVA_HOME=C ...

  8. bzoj 1200: [HNOI2005]木梳 DP

    1200: [HNOI2005]木梳 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 266  Solved: 125[Submit][Status] ...

  9. 翻译文章“AST 模块:用 Python 修改 Python 代码”---!!注意ironpathyon未实现此功能

    https://github.com/upsuper/blog/commit/0214fdd084c4adf2de2ed9912d644fb59ce13a1c +Title: [翻译] AST 模块: ...

  10. 17.1.1.7 Setting Up Replication with New Master and Slaves 设置复制使用新的master和slaves:

    17.1.1.7 Setting Up Replication with New Master and Slaves 设置复制使用新的master和slaves: 最简单和最直接方式是设置复制使用新的 ...