为了数据表中主键不重复且不过于简单,通过调用MySQL中的函数来实现一种自动生成主键id。
首先Java代码中使用mybatis实现调用数据库函数。
mapper文件
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CommonMapper{
String generateKey(String idName);
}
xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.CommonMapper">
<parameterMap id="paramMapX" type="java.util.Map">
<parameter property="idName" javaType="java.lang.String" jdbcType="CHAR" mode="IN"/>
</parameterMap>
<select id="generateKey" resultType="String" parameterMap="paramMapX">
select mf_config.nextval(#{arg0});/*mf_config代表的是数据库名称,nextval是数据库函数*/
</select>
</mapper>
还用到了一个工具类
public class IdPrefix{
public static final String tb_customer_disposeritem = "MCDI";
public static final String tb_customer_disposer = "MCD1";
}
接下来是数据库的内容
首先是MySQL中的自定义函数内容
BEGIN
UPDATE sys_sequence
SET current_value = LAST_INSERT_ID(current_value + increment)
WHERE seq_no = Dseq_no;
RETURN CONCAT(Dseq_no, LAST_INSERT_ID());
END
再其次是数据库工具表的内容(这个地方表名之类的其实不是很重要,主要是为了区分能知道是哪个表就可以)
最后我们在代码中直接调用CommonMapper中的方法就能得到id了,代码如下:
String id = commonMapper.generateKey(IdPrefix.tb_customer_disposeritem);