最近在搞登录系统,可是原先历史上完成的开发并没有引用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级联来解决登录系统中的一对多和多对一的问题了。
【编辑推荐】