Mybatis自定义主键增长的一种方式

来源:互联网 发布:吉林大学网络课程中心 编辑:程序博客网 时间:2024/06/10 02:33

最近的一个项目,发现利用mysql的函数方式可以完成数据库表字段主键的自增的方式:

思路:

       mysql函数定义如下:

参数:tname 字符串类型

返回值:字符串

作用:根据传入的参数,根据数据插入的时间来生成 “参数名+时间long值” 得id值。

CREATE FUNCTION nextId(tname varchar(10))RETURNS VARCHAR(255)BEGINDECLARE x VARCHAR(255) DEFAULT '';SET x= CONCAT(CONCAT(tname, date_format(SYSDATE(),'%y%m%d%h%i%s%f')));RETURN x;END

测试:

select nextId("USER")
[SQL]select nextId("USER")
受影响的行: 0
时间: 0.001s



Java+Mybatis实现方式:

1.工具类:

package com.lgy.util;/** *  * 获取主键id *  * @author li_gang * */public class PKUtil {public final static int PK_TREASUREID = 0;/** * /** 获取id串 *  * @param type * @return */public static String getPK(int type) {String pk = null;switch (type) {case PK_TREASUREID:pk = "nextId('TRE')";break;default:break;}return pk;}}

Mapper文件:

<!-- 插入用户数据 --><insert id="insert" parameterType="tearsure">          insert into treasure          <trim prefix="(" suffix=")">              <include refid="Base_Column_List" />          </trim>           <trim prefix="values (" suffix=")">              ${id},              #{number},              #{name},              #{count}         </trim>      </insert>  

        *主要到了没有主键是${id}.


测试:

@Testpublic void insert() {Tearsure record = new Tearsure();record.setId(PKUtil.getPK(PKUtil.PK_TREASUREID));record.setNumber(33);record.setName("test");record.setCount(11);tearsureDao.insert(record );logger.debug("finish");}

sql打印如下:

13:40:57,863 DEBUG insert:142 - ==>  Preparing: insert into treasure ( id, number, name, count ) values ( nextId('TRE'), ?, ?, ? ) 
13:40:57,956 DEBUG insert:142 - ==> Parameters: 33(Integer), test(String), 11(Integer)
13:40:57,972 DEBUG insert:142 - <==    Updates: 1

0 1