zoukankan      html  css  js  c++  java
  • Mybatais 08 关联查询多对一

     根据省会的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>
  • 相关阅读:
    C语言变量名的命名规则
    C++中关于文字编码的问题
    位运算
    Dictionary C#
    C# 中List 用法
    pDC,双缓冲 加载bitmap一点实践
    MyEclipse开发调试JSP,Servlet,JavaBean,JSF,Structs etc
    sqlserver 2005 一些操作
    利用System.EventHandler来实现两个窗体间的事件调用
    webconfig
  • 原文地址:https://www.cnblogs.com/kaisadadi/p/7612291.html
Copyright © 2011-2022 走看看