zoukankan      html  css  js  c++  java
  • Mybatis 一对多

    写在开头的话:

    首先要讨论下为什么一定要用一对多、多对一,如果我的实体bean 中并不是和数据库中的表做到一一对应,实体bean 的属性比表字段要多(当然是为了满足业务) 
    那么不用对应关系,也可以解决业务上的需求。
    但是这样会让你的实体bean 显得是如此的丑陋和混乱,为了保持pojo 的整洁,所以有必要用对应关系(个人感觉。。。)

    不管你采不采用对应关系来查询,sql 语句并没有简化写法,这和hibernate 的HQL来级联查询的效果不同 

    一对多之 collection: 

    配置文件:(方式一 更利于resultMap 的重用)

    <mapper namespace="com.azcsoft.casecade.dao.CaseCadeDao">
    <!-- 方式一  --> 
    <resultMap  id="teaMap" type="com.azcsoft.casecade.vo.Tea">
    <result property="teaName" column="teaname" />
    <result property="teaSex" column="teasex"/>
    <result property="teaAge" column="teaage" />
    <collection property="stus"   resultMap="stuMap" />
    </resultMap>
    <resultMap  id="stuMap" type="com.azcsoft.casecade.vo.Stu">
    <result property="stuName" column="stuname" />
    <result property="stuSex" column="stuage"/>
    <result property="stuAddress" column="stuaddress" />
    </resultMap>
    <select id="teaSel" resultMap="teaMap">
    select * from tea a left join stu b on a.teaid = b.teaid
    </select>
     

    <!-- 方式二: -->

     <resultMap type="com.azcsoft.vo.Author" id="authors">
     
    <result property="aid" column="a_id" />
     
    <result property="aname" column="aname" />
     
    <result property="asex" column="asex" />
     
    <result property="birsday" column="abirsday" />
     
    <collection property="blogs" ofType="com.azcsoft.vo.Blog" >
    <result property="bid" column="b_id"/>
     
    <result property="bname" column="bname"/>
     
    <result property="bcontent" column="bcontent"/>
     
    <result property="ctime" column="bctime"/>
     
    </collection>
     </resultMap>

     <select id="authorSel" resultMap="authors">
     select a.a_id,a.aname,a.abirsday,b.* from author a left join blog b on a.a_id = b.a_id
     </select> 

    </mapper>

     多对一 之 association

      方式一:(利于resultMap 的重用)

    <resultMap type="com.azcsoft.vo.Author" id="author">
    <result property="aid" column="a_id" />
    <result property="aname" column="aname" />
    <result property="asex" column="asex" />
    <result property="birsday" column="abirsday" />
    </resultMap>
    <resultMap type="com.azcsoft.vo.Blog" id="blogs">
    <result property="bid" column="b_id"/>
    <result property="bname" column="bname"/>
    <result property="bcontent" column="bcontent"/>
    <result property="ctime" column="bctime"/>
    <association property="author" column="a_id" resultMap="author" />
    </resultMap>
    <select id="blogSel" resultMap="blogs">
    select * from blog a left join author b on a.a_id = b.a_id
    </select>

      方式二:
    <resultMap type="com.azcsoft.vo.Blog" id="blogs">
    <result property="bid" column="b_id"/>
    <result property="bname" column="bname"/>
    <result property="bcontent" column="bcontent"/>
    <result property="ctime" column="bctime"/>
    <association property="author" column="a_id" javaType="com.azcsoft.vo.Author">
    <result property="aid" column="a_id" />
    <result property="aname" column="aname" />
    <result property="asex" column="asex" />
    <result property="birsday" column="abirsday" />
    </association>
         </resultMap>

    <select id="blogSel" resultMap="blogs">
    select * from blog a left join author b on a.a_id = b.a_id
         </select>

    ------------------------------------对象:

    public class Tea {
    private String teaName;
    private String teaSex;
    private String teaAge;
    private List<Stu> stus;

     }

    ------------------------------------表: 

    STU 表中 关联 TEA 的主键 

  • 相关阅读:
    搜索引擎elasticsearch监控利器cat命令
    zuul中的prefix 和 strip-prefix
    微服务:Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors 异常
    JVM-GC算法和收集器
    JVM-内存结构
    redis专题之缓存存在的几大问题(穿透、击穿、雪崩)
    redis专题之redis cluster高可用集群
    redis专题之集群
    redis专题之持久机制
    redis专题之基础篇
  • 原文地址:https://www.cnblogs.com/leonkobe/p/3444051.html
Copyright © 2011-2022 走看看