經過修改對象屬性的方式,能夠知足大多數的數據傳輸對象(Data Transfer Object,DTO)以及絕大部分領域模型的要求。 但有些狀況下你想使用不可變類。 一般來講,不多或基本不變的、包含引用或查詢數 據的表,很適合使用不可變類。 構造方法注入容許你在初始化時 爲類設置屬性的值,而不用暴露出公有方法。MyBatis 也支持私有屬性和私有 JavaBeans 屬 性來達到這個目的,但有一些人更青睞於構造方法注入。constructor 元素就是爲此而生的。html
構造方法以下:java
public class User { //... public User(Integer id, String username, int age) { //... } //... }
爲了將結果注入構造方法,MyBatis須要經過某種方式定位相應的構造方法。 在下面的例子中,MyBatis搜索一個聲明瞭三個形參的的構造方法,以 java.lang.Integer, java.lang.String and int 的順序排列。sql
<constructor> <idArg column="id" javaType="int"/> <arg column="username" javaType="String"/> <arg column="age" javaType="_int"/> </constructor>
當你在處理一個帶有多個形參的構造方法時,很容易在保證 arg 元素的正確順序上出錯。 從版本 3.4.3 開始,能夠在指定參數名稱的前提下,以任意順序編寫 arg 元素。 爲了經過名稱來引用構造方法參數,你能夠添加 @Param 註解,或者使用 '-parameters' 編譯選項並啓用 useActualParamName 選項(默認開啓)來編譯項目。 下面的例子對於同一個構造方法依然是有效的,儘管第二和第三個形參順序與構造方法中聲明的順序不匹配。 使用name與形參名稱匹配:mybatis
<constructor> <idArg column="id" javaType="int" name="id" /> <arg column="age" javaType="_int" name="age" /> <arg column="username" javaType="String" name="username" /> </constructor>
若是類中存在名稱和類型相同的屬性,那麼能夠省略 javaType 。.net