美文网首页
关于MyBatis的通用Mapper的自增ID实现

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

作者: 小白学安卓 | 来源:发表于2019-03-28 18:10 被阅读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;

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

    相关文章

      网友评论

          本文标题:关于MyBatis的通用Mapper的自增ID实现

          本文链接:https://www.haomeiwen.com/subject/kpbxvftx.html