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

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

思路:

       mysql函数定义如下:

参数:tname 字符串类型

返回值:字符串

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

CREATE FUNCTION nextId(tname varchar(10))
RETURNS VARCHAR(255)
BEGIN
		DECLARE 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 into treasure  
          
              
           
          
            ${id},  
            #{number},  
            #{name},  
            #{count} 
          
      

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


测试:

@Test
	public 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

你可能感兴趣的:(mybatis)