<typeHandler?handler="com.user.type.UserTypeHandler"?javaType="com.user.model.User"/>?
<typeHandler?handler="com.user.type.SchoolTypeHandler"?javaType="com.user.model.School"/>
<select?id="selectUser"?resultMap="selectOneResult"?parameterType="user">
????select?*?from?user?where?id?=?#{id}?and?school=#{school,typeHandler=com.user.type.SchoolTypeHandler}
</select>
這樣運行時會先調(diào)用UserTypeHandler然后調(diào)用SchoolTypeHandler
UserTypeHandler調(diào)用沒有問題,但是SchoolTypeHandler調(diào)用時會發(fā)現(xiàn)傳入的parameterObject是User而不是School。。。。你怎么看?
2014-12-17
但如果是你來設(shè)計typeHandler的解析過程,它首先是要對你的User參數(shù)進行類型轉(zhuǎn)換的,轉(zhuǎn)換后肯定不再是User了(要不然你也不會進行類型轉(zhuǎn)換了),這個時候你又如何用#{school}來和轉(zhuǎn)換后的類型進行匹配呢,你可能會說,當(dāng)我用typeHandler=com.user.type.SchoolTypeHandler的時候它就不應(yīng)該再做類型轉(zhuǎn)換而把原來的類型給我,可這樣另一處#{id}應(yīng)該是用轉(zhuǎn)換后的類型,那這樣經(jīng)過UserTypeHandler后,竟然還需要同時保持轉(zhuǎn)換前與轉(zhuǎn)換后兩種類型,如果是你你會這樣設(shè)計嗎?不敢說mybaits的方式是perfect,但你該如何設(shè)計才能即達(dá)到你說的局部配置覆蓋全局的效果,又能不讓typeHandler的效果讓人感到歧義?不管討論的結(jié)果如何,我個人很贊賞你這種鉆研的精神和清晰的分析思路,用不了多久你就不用在這里和我討論了。:)
2014-12-12
我明白你的代碼結(jié)構(gòu)與邏輯了,不能說是他邏輯上有問題,只能說你的代碼結(jié)構(gòu)導(dǎo)致了這樣互相干擾的情況
你的類型轉(zhuǎn)換器的javaType與parameterType是同一個,這是問題的根源
你應(yīng)該知道,無論是parameterType還是#{}中,只要出現(xiàn)java類型與類型轉(zhuǎn)換器中指定的javaType相同就會自動調(diào)用,這樣問題就來了,你的參數(shù)是User,他會自動調(diào)用UserTypeHandler中的setParameter方法來為SQL語句中所有的#{}賦值,一切要注意,我這說的是為“所有”的#{}賦值,當(dāng)然,這個時候setParameter的參數(shù)parameter是User,從這個時候開始已經(jīng)和你想的不一樣了,你用typeHandler=com.user.type.SchoolTypeHandler來改變了其中一個#{}的類型轉(zhuǎn)換器,但是沒用,你只是改變了類型轉(zhuǎn)換器,但參數(shù)是經(jīng)過了UserTypeHandler傳給你的,所以是User,所以這個時候無所謂你寫的是#{school,typeHandler=com.user.type.SchoolTypeHandler}也好,還是寫成#{adsfdsafafdsdsaffdsafdsafdsafdsa,typeHandler=com.user.type.SchoolTypeHandler}也好,這已經(jīng)不重要了,他們拿到的類型都是UserTypeHandler拿到的類型,為這些#{}賦值的控制,已經(jīng)和你想的不一樣了。
2014-12-11
我需要看下user的類結(jié)構(gòu)
2016-09-01
我也碰到相同的問題,User的所有屬性都用UserTypeHandler去處理,請問樓主最后怎么解決的
2014-12-11
我已經(jīng)查過了mybatis的源碼,他確實是邏輯上有問題
2014-12-11
2014-12-11
public class User {
private long id ;
private String name;
private String password;
private String sex;
private String email;
private String tel;
private String department_name;
private String department_id;
private School school;
.......
}
public class School {
private String name;
private String address;
......