zoukankan      html  css  js  c++  java
  • mybatis添加记录时返回主键id

    参考:https://www.cnblogs.com/nuccch/p/7687281.html

    场景

    有些时候我们在添加记录成功后希望能直接获取到该记录的主键id值,而不需要再执行一次查询操作。
    在使用mybatis作为ORM组件时,可以很方便地达到这个目的。
    鉴于mybatis目前已经支持xml配置和注解2种方式,所以分别给予详细介绍。

    数据表设计:

    drop table if exists `test`;
    create table `test` (
        `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', // 主键字段为自增长类型
        `name` varchar(50) default '',
        `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
        `update_time` timestamp COMMENT '编辑时间',
        `descr` varchar(100) default '',
        `url` varchar(50) default '',
        PRIMARY KEY (`id`)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;

    使用xml配置方式

    1.xml配置:

    <!-- 插入数据:返回记录的id值 -->
    <insert id="insertOneTest" parameterType="org.chench.test.mybatis.model.Test" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
        insert into test(name,descr,url,create_time,update_time) 
        values(#{name},#{descr},#{url},now(),now())
    </insert>

    2.java代码:

    Test test3 = new Test();
    //test3.setId(0L);
    test3.setName("test6");
    test3.setDescr("测试数据6");
    test3.setUrl("http://www.aliyun.com.cn");
    int rows = sqlSession.insert("org.chench.test.mybatis.mapper.insertOneTest", test3);
    sqlSession.commit();
    logger.info("insert rows: {}", rows);
    // 执行添加记录之后读取POJO的主键id属性
    logger.info("insert test id: {}", test3.getId());

    3.详细解释
    首先,为了在添加记录时能获取到记录主键id,必须在<insert>的xml配置中添加3个属性:

    <insert useGeneratedKeys="true" keyProperty="id" keyColumn="id"></insert>

    useGeneratedKeys:必须设置为true,否则无法获取到主键id。
    keyProperty:设置为POJO对象的主键id属性名称。
    keyColumn:设置为数据库记录的主键id字段名称。

    其次,新添加主键id并不是在执行添加操作时直接返回的,而是在执行添加操作之后将新添加记录的主键id字段设置为POJO对象的主键id属性。
    通过访问POJO对象的主键id属性即可返回。

    使用注解方式

    详见:http://www.cnblogs.com/nuccch/p/7093843.html 使用mybatis注解实现添加记录时返回主键值

  • 相关阅读:
    [模板]LCA
    洛谷 P1103 书本整理(动规)
    [模板]KMP字符串匹配
    [模板]优先队列(堆)
    Java面试题10(如何取到set集合的第一个元素)
    Java集合操作类Collections的一些常用方法
    本机不装Oracle,使用plsql连接远程Oracle的方法
    ORACLE配置tnsnames.ora文件实例
    JS正则表达式验证数字
    diea破解
  • 原文地址:https://www.cnblogs.com/louby/p/8387834.html
Copyright © 2011-2022 走看看