mysql中嵌套查询(一对多与多对一)

嵌套查询多对一或一对一

场景分析
基于user表中的deptId查询部门表信息,典型的一对一,即一个deptId
查询出一条信息

association用于多对一,一对一嵌套查询

   <resultMap id="sysUserMap" type="com.cy.pj.common.vo.SysUserDeptVo">
        <association property="sysDept" column="deptId" select="com.cy.pj.sys.dao.SysDeptDao.findById">
        </association>
    </resultMap>

    <!--  查询用户信息,并分页  -->
    <select id="findPageObjects" resultMap="sysUserMap">
        select * from sys_users
        <include refid="queryWhere"></include>
        limit #{startIndex},#{pageSize}
    </select>
    <!--  根据id查询部门信息  -->
    <select id="findById" parameterType="int" resultType="com.cy.pj.sys.entity.SysDept">
        select * from sys_depts where id =#{id}
    </select>

vo对象
private Date createdTime;

/**
 * 封装用户信息与其关联的部门信息的查询结果
 * @author DELL
 */
@Data
@ToString
public class SysUserDeptVo {

    private Integer id;
    private String username;
    private String password;
    private String salt;
    private String email;
    private String mobile;
    private Integer valid=1;
    private SysDept sysDept;
    private Date createdTime;
    private Date modifiedTime;
    private String createdUser;
    private String modifiedUser;
    
}

有多对一或一对一那么就有一对多和多对多

场景分析
查询角色信息是需要查询角色对应的部门,但是部门可以有多个,典型的一对多关系查询
collection用于一对多 或多对多嵌套查询

    <select id="findObjectById" resultMap="SysRoleMenuVo" parameterType="int">
        select id,name,note from sys_roles where id = #{id}
    </select>

    <resultMap id="SysRoleMenuVo" type="com.cy.pj.common.vo.SysRoleMenuVo">
        <id column="id" property="id"/>
        <collection property="menuIds" column="id" select="com.cy.pj.sys.dao.SysRoleMenuDao.findMenuIdsByRoleId">
        </collection>
    </resultMap>
<select id="findMenuIdsByRoleId" parameterType="int" resultType="int">
        select menu_id from sys_role_menus where role_id = #{id};
    </select>

vo对象
private List menuIds;

/**
 * Vo,通过此对象封装角色以及角色对应的菜单id
 * @author DELL
 */
@Data
@ToString
public class SysRoleMenuVo {

    /**角色id*/
    private Integer id;
    /**角色名称*/
    private String name;
    /**角色备注*/
    private String note;
    /**角色对应的菜单id*/
    private List<Integer> menuIds;
}

你可能感兴趣的:(java)