概述
利用DB生成业务主键,生成业务主键的方法各种各样,其中一种是利用DB
表主键自增的方式来生成唯一性的业务主键,下文简单介绍一下。
代码
以MySql
作为例子,操作DB
的数据层是Mybatis
。
CREATE TABLE `key_gen` (
`business_no` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`create_time` timestamp NOT NULL COMMENT '创建时间',
PRIMARY KEY (`business_no`)
) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8;
可以通过创建一张key_gen
的表,再利用Mybatis的useGeneratedKey
特性,当insert
一条记录的时候,返回自增的id
。
<insert id="genarateNo" useGeneratedKeys="true" keyProperty="no" parameterType="test.demo.KeyGen">
insert into key_gen (
`create_time`
)
values (
now()
)
</insert>
模型对象:
package test.demo;
public class KeyGen{
private long no;
public void setNo(long no) {
this.no = no;
}
public long getNo(){
return this.no;
}
}
@Repository
public interface KeyGenRepository{
long genarateNo(KenGen kenGen);
}
调用代码:
@Service
public class KeyGen{
@Autowired
private KeyGenRepository keyGenRepository;
public long genNo(){
KeyGen keyGen = new KeyGen();
keyGenRepository.genarateNo(keyGen );
//这个就是我们需要的no
long no = keyGen.getNo();
}
}
这样当调用KeyGenRepository
的 genarateNo
方法的时候,就可以拿到一个唯一的id了。
如果你需要基于某个数字上自增,那么可以利用MySql
的AUTO_INCREMENT
的特性,如本文的例子,第一次插入数据的时候,会直接返回100这个id
。