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

 根据省会的id查询出省会和对应国家的信息

01.多表的连接查询

修改对应的实体类信息

/** 
 *国家的实体类 
 */ 
public class Country { 
     
    private  Integer cId;    //国家的编号 
    private  String cName;   //国家的名称 
     
    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 Country(Integer cId, String cName) { 
        super(); 
        this.cId = cId; 
        this.cName = cName; 
    } 
    public Country() { 
        super(); 
    } 
    @Override 
    public String toString() { 
        return "Country [cId=" + cId + ", cName=" + cName ; 
    } 
 
}

 

 

/** 
 *  
 *省会对应的实体类 
 */ 
public class Provincial { 
    private Integer pId;    //省会的编号 
    private String pName;  //省会名称 
    //关联的国家属性 
    private  Country country; 
     
    public Country getCountry() { 
        return country; 
    } 
    public void setCountry(Country country) { 
        this.country = country; 
    } 
    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 + ", country=" 
                + country + "]"; 
    } 
 
     
     
 
}

 

修改对应的dao和mapper

public interface ProvincialDao { 
    /** 
     * 根据省会的id查询出省会和对应国家的信息   
     */ 
    Provincial selectProvincialById(Integer pId); 
}

 

<?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.ProvincialDao"> 
 
<!-- 这里的resultMap和之前使用的不一样,哪怕属性和字段一致 也要书写 
   因为mybatis在底层封装的时候,是根据我们resultMap中写的属性来的 --> 
  <resultMap type="Provincial" id="provincialMap"> 
    <id property="pId" column="pid"/> 
    <result property="pName" column="pname"/> 
   <!--  设置关联的属性 --> 
    <association property="country" javaType="Country"> 
         <id property="cId" column="cid"/> 
        <result property="cName" column="cname"/> 
    </association> 
  </resultMap> 
 <!-- 这是单表的关联查询   不经常使用  因为 不能使用延迟加载 --> 
    <select id="selectProvincialById" resultMap="provincialMap"> 
      select  cid,cname,pid,pname from country,provincial 
      where cid=countryid and pid=#{xxx}   <!--  #{xxx} 参数的占位符  --> 
    </select>   
     
</mapper>

 

mybatis.xml文件管理mapper文件

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

 

测试类代码

public class ProvincialTest { 
    ProvincialDao dao; 
    SqlSession session; 
 
    @Before 
    public void before() { 
        // 因为需要关闭session 需要把session提取出去 
        session = SessionUtil.getSession(); 
        dao = session.getMapper(ProvincialDao.class); 
    } 
 
    @After 
    public void after() { 
        if (session != null) { 
            session.close(); 
        } 
    } 
 
    /** 
     * 根据省会的id查询出省会和对应国家的信息   
     */ 
    @Test 
    public void test1() { 
         Provincial provincial = dao.selectProvincialById(1); 
         System.out.println(provincial); 
    } 
     
}

 

 

02.使用单表的单独查询

只需要修改mapper文件内容 其他代码不变

<?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.ProvincialDao"> 
     
   <select id="selectCountryByProvincialId" resultType="Country"> 
    select cid,cname from country where cid=#{xxx} 
    <!--#{xxx}就是resultMap 中 association节点中的column属性 --> 
   </select> 
     
     
    <resultMap type="Provincial" id="provincialMap"> 
    <id property="pId" column="pid"/> 
    <result property="pName" column="pname"/> 
    <!-- 设置关联的属性     select:关联的查询结果 --> 
    <association property="country" javaType="Country" 
     select="selectCountryByProvincialId"  
      column="countryid" /> 
  </resultMap> 
     
    <!-- 多表的单独查询   常用的方式 可以使用延迟加载策略 --> 
     <select id="selectProvincialById" resultMap="provincialMap"> 
      select  pid,pname,countryid from  provincial 
      where  pid=#{xxx}   <!--  #{xxx} 用户传递参数的占位符  --> 
    </select> 
     
</mapper>

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/12145.html

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

相关推荐

发表回复

登录后才能评论