實(shí)體類(lèi)中要么就有參無(wú)參構(gòu)造方法都不寫(xiě),要不就都要寫(xiě)仓坞,不能只寫(xiě)有參構(gòu)造方法
mybatis為什么持久化類(lèi)時(shí)必須提供一個(gè)不帶參數(shù)的默認(rèn)構(gòu)造函數(shù)抚垃?
原因:因?yàn)閙ybatis框架會(huì)調(diào)用這個(gè)默認(rèn)構(gòu)造方法來(lái)構(gòu)造實(shí)例對(duì)象。
即Class類(lèi)的newInstance方法 這個(gè)方法就是通過(guò)調(diào)用默認(rèn)構(gòu)造方法來(lái)創(chuàng)建實(shí)例對(duì)象的 荆隘,
另外再提醒一點(diǎn)恩伺,如果你沒(méi)有提供任何構(gòu)造方法,虛擬機(jī)會(huì)自動(dòng)提供默認(rèn)構(gòu)造方法(無(wú)參構(gòu)造器)椰拒,但是如果你提供了其他有參數(shù)的構(gòu)造方法的話晶渠,虛擬機(jī)就不再為你提供默認(rèn)構(gòu)造方法,這時(shí)必須手動(dòng)把無(wú)參構(gòu)造器寫(xiě)在代碼里燃观,否則new Xxxx()是會(huì)報(bào)錯(cuò)的褒脯,所以默認(rèn)的構(gòu)造方法不是必須的,只在有多個(gè)構(gòu)造方法時(shí)才是必須的缆毁,這里“必須”指的是“必須手動(dòng)寫(xiě)出來(lái)”番川。
當(dāng)查詢(xún)的時(shí)候返回的實(shí)體類(lèi)是一個(gè)對(duì)象實(shí)例,是mybatis動(dòng)態(tài)通過(guò)反射生成的
反射的Class.forName("className").newInstance();需要對(duì)應(yīng)的類(lèi)提供一個(gè)無(wú)參構(gòu)造函數(shù)