MyBatis之多对一关系

MyBatis之多对一和一对多

多对一理解

多对一理解起来就是多张表中的数据对应一个数据,比如Student表中多个学生对应Teacher表中的一位老师。(这里指的是学校里上课的老师)通俗理解就是一个老师可以教多个学生

MyBatis中在处理多对一的sql语句方式有两种,一种是以子查询的方式,另一种是联表查询

  • 子查询sql语句简单,但是映射关系相对复杂

    • 下面是在MyBatis中StudentMapper.xml用子查询方式进行多对一查询

      <mapper namespace="com.wcz.dao.StudentMapper">   //命名空间
      <select id="getStudent" resultMap="StudentTeacher">  //结果集反射器
         select * from  mybatis.student ;
      </select>
         <resultMap id="StudentTeacher" type="Student">
             <result property="id" column="id"/>
             <result property="name" column="name"/>
             <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
         </resultMap>
         <select id="getTeacher" resultType="Teacher">
             select * from mybatis.teacher where id=#{tid};
         </select>
      
      • 如上可见,子查询的sql语句简单,但是映射代码逻辑增加
  • 联表查询多对一关系是最常用的,也是我最喜欢的,和子查询不同的是,sql语句复杂,但是映射关系逻辑简单,思路清晰
    • 下面是在MyBatis中StudentMapper.xml下配置的联表查询操作

      • <mapper namespace="com.wcz.dao.StudentMapper">   //命名空间
        <select id="getStudent2" resultMap="StudentTeacher2">
                select  s.id sid,s.name sname,t.name tname,t.pwd  from student s,teacher t where s.tid = t.id;
            </select>
            <resultMap id="StudentTeacher2" type="Student">
                <result property="id" column="sid"/>
                <result property="name" column="sname"/>
                <association property="teacher" column="tid"  javaType="Teacher">
                    <result property="name" column="tname"/>
                    <result property="pwd" column="pwd" />
                </association>
            </resultMap>
        
        • 熟练这两种方式

原文地址:https://www.cnblogs.com/myblogswcz/p/12623928.html

时间: 2024-09-29 15:51:07

MyBatis之多对一关系的相关文章

MyBatis中多对多关系的映射和查询

先说一下需求: 在页面上显示数据库中的所有图书,显示图书的同时,显示出该图书所属的类别(这里一本书可能同时属于多个类别) 创建表: 笔者这里使用 中间表 连接 图书表 和 图书类别表,图书表中 没有使用外键关联 图书类别表 而是在中间表中引用了 图书主键 和 类别主键 通过中间表来 表示 图书 和 图书类别 的关系 建立图书表(图书编号,图书名字) create table book ( bid int primary key auto_increment, bname varchar(20)

(6)MyBatis之多对多关联

引言 MyBatis之多对多 1 创建我们的数据库 2 创建Student持久化类 3 创建Course持久化类 4 创建CS持久化类用于查询某学生某课程的成绩 5 根据需求编写映射文件 51 Student的映射文件 52 Course映射文件 53 CS映射文件 6 编写SQL相应的语句 61 查询选修某课程的所有学生一个Course对象里面有Student数组 62 查询某学生查询的课程信息一个Student对象里面有Course数组 63 查询某学生某课程的成绩信息 7 编写测试类 71

mybatis: 多对多查询[转]

加入3个包 log4j-1.2.17.jar mybatis-3.3.0.jar mysql-connector-java-5.1.8.jar log4j需要配置 log4j.properties # Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender

Mybatis的多对多映射

一.Mybatis的多对多映射 本例讲述使用mybatis开发过程中常见的多对多映射查询案例.只抽取关键代码和mapper文件中的关键sql和配置,详细的工程搭建和Mybatis详细的流程代码可参见<Mybatis入门和简单Demo>和<Mybatis的CRUD案例> 完整的工程代码已上传至https://files.cnblogs.com/files/jiyukai/MyBatis.zip 案例:查询xx同学所选择的多个不同选修课,查询xx选修课被多少同学选修 步骤1.建表脚本,

Laravel5.1 模型 --多对多关系

多对多关系也是很常用的一种关系,比如一篇文章可以有多个标签,一个标签下也可以有多篇文章,这就是一个典型的多对多的关系. 1 实现多对多关系 多对多关系我们需要三张表,一张是文章另一张是标签,第三章表是它们的中间表 因为多对多关系需要抽离成两个一对多关系嘛. 1.1 文章结构 public function up() { Schema::create('articles', function (Blueprint $table) { $table->increments('id'); $table

ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第六章:管理产品图片:多对多关系(上)

这章介绍了怎样创建一个新的实体来管理图片,怎样使用HTML窗体来上传图片文件和使用多对多关系来使它们与产品相关,并且怎样来保存图片到文件系统中.这章也介绍了更多复杂的错误处理增加客户端错误到模型中为了把它们显示回给用户.在这章中播种数据库使用的产品图片可能在在第六章的从Apress网页站点下载代码中. 注意:如果你想遵从这章的代码,你必须完成第五章的代码或者从www.apress.com下载第五章的源代码作为一个起点. 创建实体保存图片文件名 这个项目,我们正要使用文件系统在Web项目中存储图片

MySql多对多关系中外键的应用

业务需求:用户表r_user保存用户名等信息.现需要给每个用户设置工作基地,一个用户可以有多个工作基地,多个用户也可以有一个工作基地,即多对多关系.(外键,若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性) 设计方案: 方案一:建立一张用户基地表,与r_user与用户基地表,保持一对多的关系,如图所示,r_user的主键id做为r_user_base的外键user_id.通过r_user中的id,在r_user_base表中load

Castle.ActiveRecord 多对多关系 引发的错误处理

在Castle.ActiveRecord 实体类中,如果两个对象有 “多对多” 关系,一般的做法是将其分解为 两个“一对多”关系,但有时引发了 “您要删除 或 引用 的对象#2在数据库中不存在”的异常 百思不得其解,同样的用法在“媒体引用”中一直都是正常的,为什么在“专题引用” 和“ Web栏目引用” 中就出现异常呢? 通过遍历代码发现了细微的差别: 在“媒体”的业务对象加载时,为了判断一个对象是否可以删除,常查询其被引用的 次数是多少,使用的方法是:DALMediaReference.Find

在thinkphp中,写的博文标签多对多关系的标签频率统计算法

常常看到别人的博客里面,或者网站里面有这样随机颜色,但字体大小与标签出现频率有关的标签云,于是自己就想写一个.至于颜色的随机显示,那就很简单了,这里就不列代码. 因为正在学thinkphp,所以数据查找的都是用的tp数据查找语句. 1 Public function render( $data ){ 2 //在博文——标签多对多关系的中间表中查找出所有的标签 3 $tags = M('blog_tags')->select(); 4 $a = array(); 5 //去掉重复的标签,将所有不重