Mapper文件常用标签

本文介绍了MyBatis Mapper文件中的Sql公共块和ResultMap标签。Sql标签用于创建可重用的语句块,提高代码复用率。ResultMap标签则是最复杂且强大的,用于实体对象与数据库字段的映射,支持级联查询,尤其在处理一对多、多对多关系映射时非常有用。

一、Sql公共块
Sql标签作用:可被其他语句引用的可重用语句块。

<sql id="sysuser_fields">
	  uid,uname,uphone,user_address
</sql>

<select id="selectUserById" parameterType="int" resultMap="sysuserResultMap">
  		select <include refid="sysuser_fields"></include> from sysuser where uid=#{uid}
</select>

二、ResultMap标签
1、最复杂也是最强大最常用的,用来对实体对象的属性与数据库字段名做映射,同时提供子标签做对象之间的关系映射,进行级联查询操作。
2、数据是多对多,比如一个用户拥有多个角色,一个角色拥有多个用户,但表现上是一对N
示例:
private List userList;

public class Sysrole {
    private Integer rid;
    private String rname;
    private List<Sysuser> userList;//角色对象聚合了用户对象}
<resultMap id="roleAndUsersResultMap" type="sysrole">
        <id column="rid" property="rid"></id><!--主键列映射-->
        <result column="role_name" property="rname"></result><!--非主键列映射-->
        <!--ofType:集合的泛型类型, public List<Sysuser> selectUsersByRoleid(int rid);//根据角色id查询该角色下所有用户-->
        <collection property="userList" column="rid" ofType="Sysuser" select="com.javasm.sys.mapper.SysuserMapper.selectUsersByRoleid"></collection>
    </resultMap>
    <select id="selectRoleAndUsersByRID" parameterType="int" resultMap="roleAndUsersResultMap">
      select * from sysrole where rid = #{rid}
    </select>

private Sysrole srole;

public class Sysuser {
    private Integer uid;
    private String uname;
    private String upwd;
    private String uphone;
    private String uemail;
    private String createTime;
    private String updateTime;
    private Integer rid;
    private Sysrole srole;//用户持有角色}
<resultMap id="roleAndUsersResultMap2" type="sysrole">
        <id column="rid" property="rid"></id><!--主键列映射-->
        <result column="role_name" property="rname"></result><!--非主键列映射-->
        <!--ofType:集合的泛型类型,-->
        <collection property="userList" ofType="Sysuser">
            <id column="uid" property="uid"></id>
            <result column="uname" property="uname"></result>
            <result column="upwd" property="upwd"></result>
            <result column="uphone" property="uphone"></result>
            <result column="uemail" property="uemail"></result>
            <result column="create_time" property="createTime"></result>
            <result column="update_time" property="updateTime"></result>
        </collection>
    </resultMap>
    <select id="selectRoleAndUsersByRID2" parameterType="int" resultMap="roleAndUsersResultMap2">
      select u.*,r.role_name from sysuser u,sysrole r where u.rid=r.rid and r.rid=#{rid}
    </select>

改:

    <resultMap id="userResultMap" type="Sysuser">
        <id column="uid" property="uid"></id>
        <result column="uname" property="uname"></result>
        <result column="rid" property="rid"></result>
        <!--association:column:外键列,javaType:成员变量的类型(类名),select:二次查询的位置-->
        <association property="srole" javaType="Sysrole" column="rid"  select="com.javasm.sys.mapper.SysroleMapper.selectRoleByID"></association>
    </resultMap>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值