zoukankan      html  css  js  c++  java
  • mybatis级联(关联)查询

    1.定义四个实体。User   Role    Privilege   Resource,他们之间的对于关系为

    2.需求:我通过用户名username查找出该用户对应的角色以及角色对应的权限和资源

    3.实体

    public class User implements Serializable {
        private String id;
        private String username;
        private String password;
        private Set<Role> role = new HashSet<Role>();
    
    public class Role implements Serializable {
        private String id;
        private String name;
        private String des;
        private Set<Privilege> privilege = new HashSet<Privilege>();
    
    public class Privilege implements Serializable {  private String id;  
        private String name;  private String des;
        private Set<Resource> resource = new HashSet<Resource>();  
        private Privilege parent;  private Set<Privilege> child = new HashSet<Privilege>();
    
    public class Resource implements Serializable {
        private String id;
        private String uri;
        private String des;   

    4.UserMapper.xml的查询方法为

    <resultMap type="user" id="userResult">
      <id column="id" property="id"/>
       <result column="username" property="username"/>
       <collection property="role" javaType="java.util.Set" resultMap="roleResult"/>
    </resultMap>
       
    <resultMap type="role" id="roleResult">
      <id column="rid" property="id"/>
       <result column="rname" property="name"/>
       <result column="rdes" property="des"/>
       <collection property="privilege" javaType="java.util.Set" resultMap="privilegeResult"/>
    </resultMap>
        
    <resultMap type="privilege" id="privilegeResult">
      <id column="pid" property="id"/>
       <result column="pname" property="name"/>
       <collection property="resource" javaType="java.util.Set" resultMap="resourceResult"/>
    </resultMap>
        
    <resultMap type="resource" id="resourceResult">
      <id column="resid" property="id"/>
       <result column="resuri" property="uri"/>
    </resultMap>
    
    <select id="findUserByUserName" parameterType="string" resultMap="userResult">   select u.id,u.username,r.id as rid,r.name as rname,r.des as rdes,p.id as pid,p.name as pname,res.id as resid,res.uri as resuri
      from tb_user u  left join user_role ur on ur.user_id
    =u.id  join tb_role r on r.id=ur.role_id   join role_privilege rp on rp.role_id=r.id   join tb_privilege p on p.id=rp.privilege_id   join tb_resource res on res.privilege_id=p.id   where u.username=#{username} </select>

    5.UserMapper.java定义方法

    @Component
    public interface UserMapper {
        User findUserByUserName(@Param(value="username")String username);
    }
    一对一查询
    <resultMap id="blogResult" type="Blog"> <id property="id" column="blog_id"/> <result property="title" column="blog_title"/> <!-- 和一个用户关联,Blog 类里面属性时author,关联的列是原先的blog.author_id--> <association property="author" column="blog_author_id" javaType="Author" resultMap="authorResult"/> </resultMap> <resultMap id="authorResult" type="Author"> <id property="id" column="author_id"/> <result property="username" column="author_username"/> <result property="password" column="author_password"/> <result property="email" column="author_email"/> <result property="bio" column="author_bio"/> </resultMap>
    <resultMap id="blogResult" type="Blog">  
         <id property="id" column="blog_id"/>  
          <result property="title" column="blog_title"/>  
            
          <!-- 和一个用户关联,Blog 类里面属性时author,关联的列是原先的blog.author_id-->  
          <association property="author"  column="blog_author_id" javaType="Author" >  
                  <id property="id" column="author_id"/>  
                  <result property="username" column="author_username"/>  
                  <result property="password" column="author_password"/>  
                  <result property="email" column="author_email"/>  
                  <result property="bio" column="author_bio"/>  
          </association>  
    </resultMap> 
  • 相关阅读:
    GrapeCity Documents (服务端文档API组件) V3.0 正式发布
    js 手机号码正则表达式
    springMvc 注解@JsonFormat 日期格式化
    solr java代码
    solr全文检索
    在阿里云服务器CentOS7安装mysql提示“No package mysql-server available上安装mysql遇到的问题
    MockBean 单元测试
    redis缓存
    c3p0连接池
    springboot Transactional事务的使用
  • 原文地址:https://www.cnblogs.com/go4mi/p/5784096.html
Copyright © 2011-2022 走看看