mybatis 插入递增主键——abc201611090001 abc201611090002

来源:互联网 发布:vb.net和c#区别 编辑:程序博客网 时间:2024/06/08 15:16

mybatis 插入递增主键——abc201611090001 abc201611090002

其实,这个问题已经有解决方案了,但是不是很优雅,现在有一种更优雅的方式。
先介绍一下问题:主键是varchar类型的,存储的内容是这样的abc+时间+流水号。如果按照我上一篇文章介绍的就是通过代码进行一次查询(mybatis插入流水号主键)的到最大的id,然后在进行计算,再次插入。
下面介绍的方式直接通过mybatis进行处理,不需要再service层进行处理了。
首先需要介绍几个mysql中的一些函数:
1、concat

select concat('aabb','124ac','ca');

2、substr

select substr('adbc',1,3);

3、date_format

select date_format(now(),'%Y-%c-%d %h:%i:%s');

4、LAPD

select LPAD(132,4,'0');


下面进入正题:

首先在mybatis的插入函数中做如下处理:

<insert id="inserttestTable" parameterType="com.xueyou.ssm.model.Ttee">        <selectKey keyProperty="id" resultType="string" order="BEFORE">            select IFNULL(concat('abc',date_format(now(),'%Y%c%d'),LPAD(substr(max(id),12,4)+1,4,'0')),concat('abc',date_format(now(),'%Y%c%d'),'0001')) as newID from testtable where id like concat('abc',date_format(now(),'%Y%c%d'),'%');        </selectKey>        INSERT INTO testtable(id,name) VALUE (#{id},#{name})    </insert>

对应的dao层

public int inserttestTable(Ttee ttee);

这里需要model层提供的pojo类

package com.xueyou.ssm.model;/** * Created by wuxueyou on 2016/11/8. */public class Ttee {    private String id;    private String name;    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

这样在进行添加记录时就能直接进行按照流水号添加了。




0 0