关于MyBatis的通用Mapper的自增ID实现

2019-03-28  本文已影响0人  小白学安卓

tx-mapper是在MyBatis的原来的基础上面添加单表的CRUD的常用操作,方便开发人员快速开发,无须重复写代码。

这里主要记录自己在使用过程中,关于自增id的使用,以及过程遇到的问题,防止以后自己重返再发生错误。

一:

本人使用是作者目前更新的最新的jar包,这是使用的是@KeySql注解替换@GeneratedValue注解,之前使用的自增,在数据库里面设计表的时候,勾选自增的id选项(这里主要说的是MySQL数据库),然后使用注解@GeneratedValue(generator= "JDBC"),这样在使佣insert方法的时候,实体对象的id,直接已经复制了。但是前天你的数据类型必须是Integer或者Long类型,String这里,我是没有是成功,若有高手知道,希望能够告知,表示感谢。

二:

   我的想法,为什么在自增id不可以自定义,难道作者没有想到(其实原作者老早已经想到会有这样的结果,奥秘就在@KeySql注解里面)这里面有个属性:getId,就是实现的关键。首先观看源码便知:

public interface GenId<T> {

    T genId(String table, String column);

    class NULL implements GenId {

        @Override

        public Object genId(String table, String column) {

            throw new UnsupportedOperationException();

        }

}

}

作者默认没有实现,所以需要自己实现,这里面提供两个参数,一个是表名,一个是字段名字,你可以使用,也可以不使用,这里主要通过UUID生成,就不使用参数,直接返回数据便可:

public class UUIDGetId implements GenId<String> {

    @Override

    public String genId(String table, String column) {

        LocalDate localDate = LocalDate.now();

        DateTimeFormatter format = DateTimeFormatter.ISO_DATE;

        String date = format.format(localDate);

        return date + UUID.randomUUID().toString();

    }

}

然后将自己的实现类放入里面放入属性便可,记住,这里面只能放入这一个属性,其他属性不可放入,因为他的等级是最低的:

@Id

@KeySql(genId= UUIDGetId.class)

private String id;

这样,自定义主键便已经可以生成实现

上一篇下一篇

猜你喜欢

热点阅读