ibatis級聯解決登錄系統問題
最近在搞登錄系統,可是原先歷史上完成的開發并沒有引用hibernate,而是加入了ibatis ,這方面我以前未接觸過,前幾天需要完成的邏輯還比較簡單,但是今天做到注冊緩解的時候涉及到密碼提示問題,而原先的登錄系統是將question表與user表分開,這就涉及到了ibatis 級聯的處理了。為了能夠使用user.getQuestion,我們需要做一些配置:
在user.ibatis.xml 中設置
- <sqlMap namespace="User">
- <typeAlias alias="user" type="com.gh.passport.domain.User" />
- <typeAlias alias="question" type="com.gh.passport.domain.Question" />
- <resultMap id="user_result" class="com.gh.passport.domain.User">
- <result property="id" column="ID" />
- <result property="name" column="NAME" />
- <result property="password" column="PASSWORD" />
- <result property="answer" column="ANSWER" />
- <result property="email" column="EMAIL" />
- <result property="token" column="TOKEN" />
- <result property="userQuestionId" column="USERQUESTION_ID" select="getQuestionById1" />
- < SPAN>resultMap>
- <select id="getUser" parameterClass="String" resultMap="user_result">
- SELECT
- ID as id,
- NAME as name,
- PASSWORD as password,
- USERQUESTION_ID as userQuestion_Id,
- ANSWER as answer,
- FROM USERS
- WHERE trim(lower(NAME)) = trim(lower(#name#))
- < SPAN>select>
- <select id="getQuestionById1" parameterClass="Long" resultClass="question">
- SELECT USERQUESTION_ID as id,
- QUESTION as question
- FROM USERQUESTION
- where USERQUESTION_ID = #id#
- < SPAN>select>
- < SPAN>sqlmap>
user_result 為result_map供select id="getUser" 使用user_result 集合所需要的數據從getUser 里拿。
其實應該這么說,在getUser查完數據庫將數據映射成user_result 格式,而user_result的column 即為getUser as 后面的部分,名稱需一致 而大小寫無所謂,好像ibatis級聯對大小寫不敏感。
測試:
public void testXXXXXXXXX() throws Exception {
String userName = "x@x.com";
User user = users.findByName(userName);
System.out.println(user.getUserQuestion().getQuestion());
}
以此類推,我們就可以通過ibatis級聯來解決登錄系統中的一對多和多對一的問題了。
【編輯推薦】