mybatis07–关联查询一对多详解编程语言

 案例   查询国家的同时,查询出国家下的省会信息!

01.使用单表的连接查询

创建对应的实体类 和数据库表

/** 
 *  
 *国家的实体类 
 */ 
public class Country { 
     
    private  Integer cId;    //国家的编号 
    private  String cName;   //国家的名称 
    //关联省会的属性 
    private  Set<Provincial> provincials; 
    public Integer getcId() { 
        return cId; 
    } 
    public void setcId(Integer cId) { 
        this.cId = cId; 
    } 
    public String getcName() { 
        return cName; 
    } 
    public void setcName(String cName) { 
        this.cName = cName; 
    } 
    public Set<Provincial> getProvincials() { 
        return provincials; 
    } 
    public void setProvincials(Set<Provincial> provincials) { 
        this.provincials = provincials; 
    } 
    public Country(Integer cId, String cName, Set<Provincial> provincials) { 
        super(); 
        this.cId = cId; 
        this.cName = cName; 
        this.provincials = provincials; 
    } 
    public Country() { 
        super(); 
    } 
    @Override 
    public String toString() { 
        return "Country [cId=" + cId + ", cName=" + cName + ", provincials=" 
                + provincials + "]"; 
    } 
 
}

 

 

/** 
 *  
 *省会对应的实体类 
 */ 
public class Provincial { 
    private Integer pId;    //省会的编号 
    private String pName;  //省会名称 
     
    public Integer getpId() { 
        return pId; 
    } 
    public void setpId(Integer pId) { 
        this.pId = pId; 
    } 
    public String getpName() { 
        return pName; 
    } 
    public void setpName(String pName) { 
        this.pName = pName; 
    } 
    public Provincial(Integer pId, String pName) { 
        super(); 
        this.pId = pId; 
        this.pName = pName; 
    } 
    public Provincial() { 
        super(); 
    } 
    @Override 
    public String toString() { 
        return "Provincial [pId=" + pId + ", pName=" + pName + "]"; 
    } 
     
     
 
}

 

mybatis07--关联查询一对多详解编程语言mybatis07--关联查询一对多详解编程语言

 

 

 

mybatis07--关联查询一对多详解编程语言mybatis07--关联查询一对多详解编程语言

 

 

 

 

创建对应的dao和mapper文件

 

public interface CountryDao { 
    /** 
     * 根据国家的id查询出国家的信息  以及国家下面的省会信息 
     */ 
    Country selectCountryById(Integer cId); 
}

 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE mapper 
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-Mapper.dtd"> 
<mapper namespace="cn.bdqn.dao.CountryDao"> 
 
<!--  这里的resultMap和之前使用的不一样,哪怕属性和字段一致 也要书写 
  因为mybatis在底层封装的时候,是根据我们resultMap中写的属性来的 --> 
  <resultMap type="Country" id="countryMap"> 
    <id property="cId" column="cid"/> 
    <result property="cName" column="cname"/> 
    <!-- 设置关联的集合属性 --> 
     <collection property="provincials" ofType="Provincial"> 
      <id property="pId" column="pid"/> 
      <result property="pName" column="pname"/> 
     </collection> 
  </resultMap> 
 <!-- 这是单表的关联查询   不经常使用  因为 不能使用延迟加载 --> 
    <select id="selectCountryById" resultMap="countryMap"> 
      select  cid,cname,pid,pname from country,provincial 
      where cid=countryid and cid=#{xxx}  <!--#{xxx} 参数的占位符  --> 
    </select>  
</mapper>

 

 

在MyBatis.xml文件中 管理Mapper文件

<!-- 加载映射文件信息 --> 
    <mappers> 
        <mapper resource="cn/bdqn/dao/CountryMapper.xml" /> 
    </mappers>

 

测试类代码

public class CountryTest { 
    CountryDao dao; 
    SqlSession session; 
 
    @Before 
    public void before() { 
        // 因为需要关闭session 需要把session提取出去 
        session = SessionUtil.getSession(); 
        dao = session.getMapper(CountryDao.class); 
    } 
 
    @After 
    public void after() { 
        if (session != null) { 
            session.close(); 
        } 
    } 
 
    /** 
     * 根据国家的id查询出国家的信息  以及国家下面的省会信息 
     */ 
    @Test 
    public void test1() { 
         Country country = dao.selectCountryById(1); 
         System.out.println(country); 
    } 
     
}

 

02.使用多表的查询

修改mapper.xml文件中代码即可    其他代码不变 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE mapper 
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-Mapper.dtd"> 
<mapper namespace="cn.bdqn.dao.CountryDao"> 
     
     
    <select id="selectProvincialByCountryId" resultType="Provincial"> 
        select pid,pname from provincial 
         where countryid=#{xxx} 
         <!--#{xxx} 对应的就是resultMap中 collection节点下面的column --> 
    </select> 
     
    <resultMap type="Country" id="countryMap"> 
        <id property="cId" column="cid"/> 
        <result property="cName" column="cname"/> 
        <!--设置关联的集合属性   
          select:需要关联的查询语句 
         column: select关联语句中需要的参数 --> 
         <collection property="provincials" ofType="Provincial" 
          select="selectProvincialByCountryId" 
          column="cid"/> 
     </resultMap> 
     
    <!-- 多表的查询  经常使用  可以使用延迟加载策略  --> 
    <select id="selectCountryById" resultMap="countryMap"> 
          select  cid,cname from  country where cid=#{xxx}  
          <!--#{xxx} 用户传递过来的ID  --> 
    </select>  
     
     
</mapper>

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/12146.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论