今天用ibatis开发查询功能的时候,突然需要支持一个具有三级的对象,即对象的属性是一个对象,属性的属性又是一个对象,也就是1:N:N的关系,想在查询一条记录的同时把属性的值也同时查出来,试了一下,只能查出第二级对象的值,第三级的却查不出来,不知道ibatis是否支持这种复杂对象的延迟加载?
以下是我的相关配置代码。
<sqlMap namespace="User"> <!-- Use type aliases to avoid typing the full classname every time. --> <typeAlias alias="user" type="com.asiainfo.core.domain.User"/> <typeAlias alias="role" type="com.asiainfo.core.domain.Role"/> <resultMap class="user" id="AccountResult"> <result column="ACCT_ID" jdbcType="DECIMAL" property="acctId"/> <result column="ACCT_CODE" jdbcType="VARCHAR" property="acctCode"/> <result column="ACCT_NAME" jdbcType="VARCHAR" property="acctName"/> <result column="PASSWORD" jdbcType="VARCHAR" property="password"/> <result column="ROLE_ID" jdbcType="DECIMAL" property="roleId"/> <result column="STATUS" jdbcType="DECIMAL" property="status"/> <result column="EMAIL" jdbcType="VARCHAR" property="email"/> <result column="MOBILE" jdbcType="VARCHAR" property="mobile"/> <result column="PHONE" jdbcType="VARCHAR" property="phone"/> <result column="ADDRESS" jdbcType="VARCHAR" property="address"/> <result column="TRY_TIMES" jdbcType="DECIMAL" property="tryTimes"/> <result column="IS_LOGIN" jdbcType="DECIMAL" property="isLogin"/> <result column="CREATE_TIME" jdbcType="TIMESTAMP" property="createTime"/> <result column="UPDATE_TIME" jdbcType="TIMESTAMP" property="updateTime"/> <result column="DESCRIPTION" jdbcType="VARCHAR" property="description"/> <result column="RECENT_PASSWORD" jdbcType="VARCHAR" property="recentPassword"/> <result property="roles" column="ACCT_ID" select="User.findRoleByUid"/> </resultMap> <select id="findRoleByUid" parameterClass="java.lang.Long" resultClass="role"> select b.role_id as roleId, b.role_code as roleCode, b.role_name as roleName from user_role a, role b where a.role_id = b.role_id and a.ACCT_ID = #acctId# </select> </sqlMap>
本来是用户具有多个角色,而角色具有多个功能的。现在我只有改成在用户信息中同时查出用户具有的功能权限了,用了一个关联查询来实现。