在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ mybatis構(gòu)造函數(shù)出錯

mybatis構(gòu)造函數(shù)出錯

最近發(fā)現(xiàn)一個mybatis問題:
mybatis中如果實體類不添加構(gòu)造函數(shù)select語句不報錯,但是一旦添加了構(gòu)造函數(shù),沒有所對應(yīng)的resultMap里面的result字段就報錯?

如:
A.java

class A{
 private int id;
 private String a;
 private String b;
}

AMapper.xml

<resultMap id="aBean" type="A">
    <id column="id" property="id"/>
   <result column="a" property="a" />
   <result column="b" property="b" />
</resultMap>
<select id="queryById" resultMap="aBean">
select *
from A
where id=#{id}
</select>

上面寫法是沒問題,但是下面就有問題:

A.java

class A{
 private int id;
 private String a;
 private String b;
 public A(String a){
    this.a = a;
 }
}

AMapper.xml

<resultMap id="aBean" type="A">
    <id column="id" property="id"/>
   <result column="a" property="a" />
   <result column="b" property="b" />
</resultMap>
<select id="queryById" resultMap="aBean">
select *
from A
where id=#{id}
</select>

這種寫法就報錯,解決辦法就是要填充所有resultMap里面的字段,如:

A.java

class A{
 private int id;
 private String a;
 private String b;
public A(String a,String b){
    this.a = a;
    this.b = b;
 }
 public A(String a){
    this.a = a;
 }
}

請問下這是為什么???有人知道嗎

回答
編輯回答
柚稚

結(jié)合官方文檔中Object FactoryResult Maps 的說明,當(dāng)你在 <select> 標簽中要求獲取 a, b兩個屬性時,它又發(fā)現(xiàn) A 含有一個帶參數(shù)的構(gòu)造器,此時它會嘗試將 a, b的值作為參數(shù)調(diào)用帶參構(gòu)造器,然而你只聲明了參數(shù) a,那么就會創(chuàng)建失敗了。

2017年6月25日 21:32