<sqlMap namespace="user"><--命名空间,好像2.0默认是开通的-->
<cacheModel type="LRU" id="oneDayCategory"><!--缓存配置,详细的资料请察看官方提供的用户手册,好像有中文版本的了
-->
<flushInterval hours="24" />
</cacheModel>
<typeAlias type="com.infodeliver.pigeon.bean.User"
alias="userbean" /><!--定义本地变量,为了方便使用
-->
<typeAlias type="com.infodeliver.pigeon.util.Condition"
alias="condition" />
<typeAlias type="com.infodeliver.pigeon.bean.Role"
alias="rolebean"/>
<resultMap id="get_group_result"
class="com.infodeliver.pigeon.bean.Group"><!--
这就是不定义本地变量的结果-->
<result property="groupid" column="group_id"
/>
<result property="groupname" column="group_name"
/>
</resultMap>
<resultMap id="get_role_result"
class="rolebean">
<result property="role_id" column="role_id"/>
<result property="role_name" column="role_name"/>
</resultMap>
<resultMap id="get_user_result"
class="userbean">
<result property="user_id" column="user_id"
/>
<result property="username" column="username"
/>
<!--为user的group信息(属性groupid,groupname)配置
-->
<result property="group.groupid"
column="group_id" />
<result property="group.groupname"
column="group_name" />
<!—这里的property="group.groupid"的含义已经很对象化了,group指的User对象里的数据类型-Group的别名;这里的column=”group_id”为group表里的PK:group_id而非user表的FK:group_id,不要弄混淆了!-->
<!--为user的role信息(属性roleid,rolename)配置,这里同样是User中的子对象,采取的处理却是不同的,通过group来避免使用子查询带来的性能问题,大家可以看到
第一个配置的粒度比较细微,配置子对象的属性,而role只是到对象一级,group中没有使用select="XXX"这样的子查询,从而避免了因为数据量大而引起二次查询带来的性能问题,而采用了一个role作为一个反面教材,大家比较一下可以发现其中的不同!-->
<result property="role" column="role_id"
select="get_role"/>
<!—这里采用了子查询(两次查询),注意这里的role_id是role表的PK:role_id,而非user表的FK:role_id,大家不要搞错了>
</resultMap>
<select id="get_role" parameterClass="int"
resultMap="get_role_result"><!--这里的parameterClass="int"因为父查询传过来的role_id为int型的-->
select * from sew_role where role_id=#value#
</select>
<select id="get_user" parameterClass="userbean"
resultMap="get_user_result">
select * from sew_user u,sew_group g<!--因为这里的group没有子查询,所以要使用嵌套!这样在执行的效率上比子查询有优势哦,大家应该很熟悉吧!-->
where u.group_id=g.group_id
and u.user_id=#user_id#
</select>
<select id="checkuser" parameterClass="userbean"
resultMap="get_user_result">
select * from sew_user u,sew_group g
where u.group_id=g.group_id
and u.username=#username#
and u.password=#password#
</select>
<select id="get_group" resultMap="get_group_result"
parameterClass="int">
select * from sew_group where group_id=#value#
</select>
<insert id="insertuser" parameterClass="userbean">
insert into sew_user
values(sew_user_id_seq.nextval,<!—因为数据库里用了序列-->
#username#,#password#,#email#,#group.groupid#,#role.role_id#,#nationality#,
#tel#,#address#,#language#,#isEvectioner#,#realname#)
</insert>
|