文档章节

Mysql向数据表插入一条数据返回自增主键的ID值

B
 Bufferlin
发布于 2017/03/28 22:23
字数 290
阅读 28
收藏 0

方法一:

     <!--  statementType="STATEMENT" 指定采用非预编译的方式

             table_name:动态传入的数据表的名字

             itemId: 生成的自增主键(名字可以任意)

       -->

      <insert id="insertWithId" parameterType="java.util.Map" statementType="STATEMENT" 
          useGeneratedKeys="true" keyProperty="itemId">

       insert into ${table_name}
        <foreach collection="keys" item="k" index="index" open="(" separator="," close=")">
            ${k}
        </foreach>
        values
        <foreach collection="keys" item="k" index="index" open="(" separator="," close=")">
            '${params[k]}'
        </foreach>
    </insert>

方法二:

<insert id="insertWithId" parameterType="java.util.Map" statementType="STATEMENT">

<!--         Oracle数据库中插入数据返回自增的Id值 -->
<!--         <selectKey resultType="java.lang.Integer" order="BEFORE" keyProperty="itemId"> -->
<!--             SELECT LOGS_SEQ.nextval AS ID FROM DUAL -->
<!--         </selectKey> -->
        <!-- MySql数据库插入一条数据放回自增的Id值 -->    
         <selectKey keyProperty="itemId" resultType="java.lang.Integer" order="AFTER"> -->
            SELECT LAST_INSERT_ID() FROM DUAL 
         </selectKey>
        insert into ${table_name}
        <foreach collection="keys" item="k" index="index" open="(" separator="," close=")">
            ${k}
        </foreach>
        values
        <foreach collection="keys" item="k" index="index" open="(" separator="," close=")">
            '${params[k]}'
        </foreach>
    </insert>

 

 

Mapper接口:

public interface CommenMapper {
    public Integer insertWithId(Map<String, Object> params);

}

测试代码:

    @Test
    public void testInsertWithId(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        CommenMapper commenMapper = sqlSession.getMapper(CommenMapper.class);
        Map<String, Object> save_map = new HashMap<>();
        
        Map<String, Object> param = new HashMap<>();
        param.put("name", "hehehhe");
        param.put("price", 23.3f);
        param.put("detail", "xijiejuedingchengbai");
        
        String[] keys = new String[param.size()];
        Set<String> sset = param.keySet();
        int i = 0;
        for (String os : sset) {
            keys[i++] = os;
        }
        save_map.put("table_name", "items");
        save_map.put("keys", keys);
        save_map.put("params", param);
        commenMapper.insertWithId(save_map);
        sqlSession.commit();
        Integer itemId = (Integer) save_map.get("itemId");
        System.out.println("itemId ===" + itemId);
    }


 

© 著作权归作者所有

B
粉丝 0
博文 5
码字总数 839
作品 0
合肥
程序员
私信 提问
mybatis自增主键配置

mybatis自增主键配置 mybatis进行插入操作时,如果表的主键是自增的,针对不同的数据库相应的操作也不同。基本上经常会遇到的就是 Oracle Sequece 和 MySQL 自增主键,至于其他的手动生成唯一...

李永china
2016/05/20
4
0
MySQL自增id超大问题查询

引言 小A正在balabala写代码呢,DBA小B突然发来了一条消息,“快看看你的用户特定信息表T,里面的主键,也就是自增id,都到16亿了,这才多久,在这样下去过不了多久主键就要超出范围了,插入...

dragon_tech
2018/12/15
49
0
mysql自增字段重排 mysql删除表后自增字段从1开始

MyISAM数据表 删除最大编号的记录后,该编号不可重用。 可在建表时可用“AUTO_INCREMENT=n”选项来指定一个自增的初始值。 可用alter table tablename AUTOINCREMENT=n命令来重设自增的起始值...

BearCatYN
2014/10/14
463
0
mysql关于自动编号问题 转载

MySql数据库唯一编号字段(自动编号字段) 在数据库应用,我们经常要用到唯一编号,以标识记录。在MySQL中可通过数据列的 AUTO_INCREMENT属性来自动生成。MySQL支持多种数据表,每种数据表的...

asdtiang
2010/02/22
848
0
MySQL把数据删除后id从1开始

用法: CREATE TABLE test ( id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, username VARCHAR(15) NOT NULL ) AUTO_INCREMENT = 100; 在数据库应用,我们经常要用到唯一编号,以标识......

netmouse
2016/02/03
153
0

没有更多内容

加载失败,请刷新页面

加载更多

RxJava进行单元测试的方式

@Test public void completeTask_retrievedTaskIsComplete() { // Given a new task in the persistent repository final Task newTask = new Task(TITLE, ""); ......

SuShine
23分钟前
5
0
正则表达式大全

检验手机号码 # 要求:手机号码必须为11位数字,以1开头,第二位为1或5或8。import redef verify_mobile(): mob = input("请输入手机号码:") ret = re.match(r"1[358]\d{9}", m......

彩色泡泡糖
27分钟前
5
0
QT之border-image属性

一、border-image的兼容性 border-image可以说是CSS3中的一员大将,将来一定会大放光彩,其应用潜力真的是非常的惊人。可惜目前支持的浏览器有限,仅Firefox3.5,chrome浏览器,Safari3+支持...

shzwork
28分钟前
6
0
Kubernetes Operator简易教程

1. 安装operator-sdk //安装 operator-sdk$ apt-get install operator-sdk.....$ operator-sdk versionoperator-sdk version: v0.7.0$ go versiongo version go1.11.4 darwin/amd64 2......

Robotcl_Blog
28分钟前
5
0
再谈DAG任务分解和Shuffle RDD

1、DagScheduler分析 DagScheduler功能主要是负责RDD的各个stage的分解和任务提交。Stage分解是从触发任务调度过程的finalStage开始倒推寻找父stage,如果父stage没有提交任务则循环提交缺失...

守望者之父
34分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部