mybatis高级查询(多表的一个查询)

mybatis高级查询


实体类:

@Data
public class SysUser {
    private Long id;
    private String userName;
    private String userPassword;
    private String userEmail;
    private String userInfo;
    private byte[] headImg;
    private Date createTime;
    //一对一映射
//    private SysRole role;
    //一对多的映射
    private List<SysRole> roleList;
}

@Data
public class SysRole implements Serializable {
    private Long id;
    private String roleName;
    private int enabled;
    private Long createBy;
    private Date createTime;

}

一对一映射

使用自动映射也就是起别名的方式
使用resultMap配置一对一映射

SysUserRepository.xml文件中

<resultMap id="sysUserMap" type="com.example.model.SysUser">
        <id property="id" column="id"/>
        <result property="userName" column="user_name"/>
        <result property="userPassword" column="user_password"/>
        <result property="userEmail" column="user_email"/>
        <result property="userInfo" column="user_info"/>
        <result property="headImg" column="head_img" jdbcType="BLOB"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
</resultMap>

SysRoleRepository.xml文件

<resultMap id="roleMap" type="SysRole">
        <id property="id" column="id"/>
        <result property="roleName" column="role_name"/>
        <result property="enabled" column="enabled"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
</resultMap>


 
 
<!--一对一映射-->
    <resultMap id="userRoleMap" extends="sysUserMap" type="SysUser">
        <result property="role.id" column="id"/>
        <result property="role.roleName" column="role_name"/>
        <result property="role.enabled" column="enabled"/>
        <result property="role.createBy" column="create_by"/>
        <result property="role.createTime" column="create_time" jdbcType="TIMESTAMP"/>
    </resultMap>
    <select id="selectUserAndRole" resultMap="userRoleMap">
        select u.id ,u.user_name,u.user_password,u.user_email,u.user_info,u.head_img,u.create_time,
        r.id,r.role_name,r.enabled,r.create_by,r.create_time
         from sys_user u inner join sys_user_role ur on ur.user_id = u.id
        inner join sys_role r on r.id = ur.role_id where u.id = #{id}
    </select>

一般使用resultMap的association标签

<resultMap id="userRoleMap" extends="sysUserMap" type="SysUser">
   <association property="role" columnPrefix="role_" javaType="SysRole"> //加了前缀role相关的别名也要加上相应的前缀
        <result property="role.id" column="id"/>
        <result property="role.roleName" column="role_name"/>
        <result property="role.enabled" column="enabled"/>
        <result property="role.createBy" column="create_by"/>
        <result property="role.createTime" column="create_time" jdbcType="TIMESTAMP"/>
  </association>
</resultMap>
或者可以这样子
<resultMap id="userRoleMap" extends="sysUserMap" type="SysUser">
   <association property="role" columnPrefix="role_" resultMap="com.example.repository.SysRoleRepository.roleMap"/> //加了前缀role相关的别名也要加上相应的前缀
</resultMap>
    <select id="selectUserAndRole" resultMap="userRoleMap">
        select u.id ,u.user_name,u.user_password,u.user_email,u.user_info,u.head_img,u.create_time,
        r.id roel_id,r.role_name role_role_name,r.enabled role_enabled,r.create_by role_create_by,r.create_time role_create_time
         from sys_user u inner join sys_user_role ur on ur.user_id = u.id
        inner join sys_role r on r.id = ur.role_id where u.id = #{id}
    </select>

一对多查询

一级嵌套

<!--一对多关系(前缀一定得加上防止,id值重复)-->
    <resultMap id="allUserRoleMap" extends="sysUserMap" type="SysUser">
        <collection property="roleList" columnPrefix="role_" resultMap="com.example.repository.SysRoleRepository.roleMap"/>
    </resultMap>
    <select id="selectAllUserAndRole" resultMap="allUserRoleMap">
        select u.id ,u.user_name,u.user_password,u.user_email,u.user_info,u.head_img,u.create_time,
        r.id role_id,r.role_name role_role_name,r.enabled role_enabled,r.create_by role_create_by,r.create_time role_create_time
         from sys_user u
         inner join sys_user_role ur on u.id = ur.user_id
        inner join sys_role r on ur.role_id =r.id
    </select>

多级嵌套

SysPrivilegeRepository.xml文件
 <resultMap id="privilegeMap" type="SysPrivilege">
        <id property="id" column="id"/>
        <result property="privilegeName" column="privilege_name"/>
        <result property="privilegeUrl" column="privilege_url"/>
 </resultMap>

SysRoleRepository.xml文件

    <resultMap id="rolePrivilegeMap" extends="roleMap" type="SysRole">
        <collection property="privilegeList" columnPrefix="privilege_" resultMap="com.example.repository.SysPrivilegeRepository.privilegeMap"/>
    </resultMap>

SysUserRepository.xml文件中

<!--一对多关系,多级嵌套-->
    <resultMap id="userRolePrivilegeMap" extends="sysUserMap" type="SysUser">
        <collection property="roleList" columnPrefix="role_" resultMap="com.example.repository.SysRoleRepository.rolePrivilegeMap"/>
    </resultMap>
    <select id="selectAllUserAndRoleAndPrivilege" resultMap="userRolePrivilegeMap">
        select u.id ,u.user_name,u.user_password,u.user_email,u.user_info,u.head_img,u.create_time,
        r.id role_id,r.role_name role_role_name,r.enabled role_enabled,r.create_by role_create_by,r.create_time role_create_time,
         p.id role_privilege_id,p.privilege_name role_privilege_privilege_name,p.privilege_url role_privilege_privilege_url
        from sys_user u inner join sys_user_role ur on u.id = ur.user_id
        inner join sys_role r on ur.role_id =r.id
        inner join sys_role_privilege rp on r.id = rp.role_id
        inner join sys_privilege p on p.id = rp.privilege_id
    </select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值