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 的主键 

  • 相关阅读:
    rabbitmq的安装和使用
    springboot之rabbitmq
    springboot之assembly的文件配置
    Android -- 真正的 高仿微信 打开网页的进度条效果
    香蕉云APP,2016下半年开发日记
    使用 Android Studio 检测内存泄漏与解决内存泄漏问题
    阿里云服务器上配置并使用: PHP + Redis + Mysql 从配置到使用
    PHP 获取 特定时间范围 类
    真实记录疑似Linux病毒导致服务器 带宽跑满的解决过程
    -Android -线程池 批量上传图片 -附php接收代码
  • 原文地址:https://www.cnblogs.com/leonkobe/p/3444051.html
Copyright © 2011-2022 走看看