首页 > 代码库 > mybatis08--关联查询多对一

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 mapperPUBLIC "-//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 mapperPUBLIC "-//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>

 

mybatis08--关联查询多对一