在实体对象上使用Builder模式应该注意

上篇文章说了一下Builder模式的优点儿,以及idea  Builder插件的安装。亲身经历的坑,项目是spring+mybatis,同事在自动生成的实体类中使用了Builder模式,细心观察了一下,生成了一个私有带有参数的构造方法,并且日志报出来的错误更是可笑

 

No constructor found in  xxx.entity.CardOrder matching [java.lang.Long, java.lang.Integer, java.lang.String, java.lang.String, java.sql.Timestamp, java.sql.Timestamp]


在实体对象上使用Builder模式应该注意_第1张图片
 首先 mybatisd 提示没有一个构造器来匹配数据,首先想到的不是构造函数的问题,后面参数除了第一个其他的都能对应上类型,就一直开始找为什么会有一个Long类型的数据,实体和数据库明明都是int 类型,首先把重点放在了xml映射上,慢慢的把注意力放到了实体上,查了半天发现 Builder 生成的代码有一个私有的构造方法,

    private CardOrder(Builder builder) {
        setTypeId(builder.typeId);
        setPhone(builder.phone);
        setStatus(builder.status);
    }

 添加了一个 public 的无参数的构造函数,完美解决,

注意使用 

      在有被映射实体的类中记得加上一个公有的构造函数;

 Builder 缺点:

   当然,上节你也看到了,在使用构建器的时候,必须利用另外一个类来实例化另外一个类,这样子会使创建的时候创建更多的对象。这样子会损耗一定的性能...不过带来的好处是非常明显的。因为使用builder模式,每次设置属性的时候,都是具名的方法操作,是开发人员更容易使用,并且不需要给宿主类增加相应的setXxx方法,这样子,这个宿主类在创建之后是不可以修改的,在一些安全模式比较高的程序中,这点也是很重要的。

 

  • 在实体对象上使用Builder模式应该注意_第2张图片
  • 大小: 766.7 KB
  • 查看图片附件

你可能感兴趣的:(mybatis)