一、通过映射配置文件实现多表联查

首先,使用Mysql数据库,创建两个表,分别为学生表Student表和班级表Class表,在Student表中添加列classid参照主表的列id的外键约束。

学生表Student表:

班级表Class表 :

现在去写Dao层和实体类

Student实体类:

package com.ape.bean;
 
import java.util.Date;
 
public class Student {
    private Integer sid;
    private String sname;
    private Date birthday;
    private String ssex;
    private int classid;
/*
    一对一
*/
    private Classs banji;
 
    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }
 
    public Student(Integer sid, String sname, Date birthday, String ssex, int classid, Classs banji) {
        this.sid = sid;
        this.sname = sname;
        this.birthday = birthday;
        this.ssex = ssex;
        this.classid = classid;
        this.banji = banji;
    }
 
    public Integer getSid() {
        return sid;
    }
 
    public void setSid(Integer sid) {
        this.sid = sid;
    }
 
    public String getSname() {
        return sname;
    }
 
    public void setSname(String sname) {
        this.sname = sname;
    }
 
    public Date getBirthday() {
        return birthday;
    }
 
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
 
    public String getSsex() {
        return ssex;
    }
 
    public void setSsex(String ssex) {
        this.ssex = ssex;
    }
 
    public int getClassid() {
        return classid;
    }
 
    public void setClassid(int classid) {
        this.classid = classid;
    }
 
    public Classs getBanji() {
        return banji;
    }
 
    public void setBanji(Classs banji) {
        this.banji = banji;
    }
 
    @Override
    public String toString() {
        return "Student{"  
                "sid="   sid  
                ", sname='"   sname   '\''  
                ", birthday="   birthday  
                ", ssex='"   ssex   '\''  
                ", classid="   classid  
                ", banji="   banji  
                '}';
    }
}

Class实体类:

package com.ape.bean;
 
import java.util.List;
 
public class Classs {
    private int classid;
    private String classname;
/*
    一对多
*/
    private List<Student> xuesheng;
 
    public Classs() {
    }
 
    public Classs(int classid, String classname, List<Student> xuesheng) {
        this.classid = classid;
        this.classname = classname;
        this.xuesheng = xuesheng;
    }
 
    public int getClassid() {
        return classid;
    }
 
    public void setClassid(int classid) {
        this.classid = classid;
    }
 
    public String getClassname() {
        return classname;
    }
 
    public void setClassname(String classname) {
        this.classname = classname;
    }
 
    public List<Student> getXuesheng() {
        return xuesheng;
    }
 
    public void setXuesheng(List<Student> xuesheng) {
        this.xuesheng = xuesheng;
    }
 
    @Override
    public String toString() {
        return "Classs{"  
                "classid="   classid  
                ", classname='"   classname   '\''  
                ", xuesheng="   xuesheng  
                '}';
    }
}

 Mapper接口:

public interface ClassMapper {
    
    public List<Class> findClass();
}
public interface StudentMapper {
    public List<Student> findStudent();
/*
    一对多
*/
    public List<Student> findduobiao();
}

一对一关系的xml文件配置:

实现一对一的关系查询,即一条student信息对应一条class信息

<resultMap id="stu_class_Map" type="Student">
		<result column="sid" property="sid" />
		<result column="sname" property="sname"/>
		<result column="birthday" property="birthday"/>
		<result column="ssex" property="ssex"/>
		<result column="classid" property="classid"/>
        <!-- 一对一的关系映射,配置封装student的内容 -->
		<association property="banji">
			<result column="classid" property="classid"/>
			<result column="classname" property="classname"/>
		</association>
	</resultMap>
	<select id="findduobiao" resultMap="stu_class_Map">
		select * from student inner join class on student.classid = class.classid;
	</select>

这里主要配置的就是resultMap了,配置javabean类中属性与数据库列名的对应关系,association是用来指定从表方的引用实体属性的。
注意最后写的findstudent方法中,是使用到resultMap作为接收结果值返回,与上文配置的resultMap相对应。

一对多查询xml文件配置:

<resultMap id="class_stu_Map" type="Classs">
		<result column="classid" property="classid"/>
		<result column="classname" property="classname"/>
        <!-- Class中的集合映射 -->
		<collection property="xuesheng">
			<result column="sid" property="sid" />
			<result column="sname" property="sname"/>
			<result column="birthday" property="birthday"/>
			<result column="ssex" property="ssex"/>
			<result column="classid" property="classid"/>
		</collection>
	</resultMap>
	<select id="yiduiduo" resultMap="class_stu_Map">
		select * from class left join student on class.classid = student.classid order by class.classid;
	</select>

虽然知道使用这条sql语句查询后的结果会有重复项,但是不用担心,应为mybatis会自动识别到重复的内容,只保留一个。

二、使用注解的方式

还是同样的我们需要再建实体类,跟上面的一样;其次Mapper接口中的方法需要加注解。

一对一:

public interface AccountDao {
  @Select("select  * from account")
  @Results(id="accountMap",value = {
      @Result(id = true,column = "id",property = "id"),
      @Result(column = "uid",property = "uid"),
      @Result(column = "money",property = "money"),
      @Result(property = "user",column = "uid",one =
      @One(select="mediacomm.dao.UserDao.findUserById",fetchType= FetchType.DEFAULT))
  })
  List<Account> findAccountWithUser();
public interface UserDao {
@Select("select * from user where id=#{id}")
  User findUserById(int id);

 一对多:

public interface UserDao {
  @Select(value = "select * from user")
  @Results(id = "userMap",value = {
      @Result(id = true,column = "id",property = "id"),
      @Result(column = "username",property = "username"),
      @Result(column = "password",property = "password"),
      @Result(column = "address",property = "address"),
      @Result(property = "accounts",column = "id",
          many = @Many(select = "mediacomm.dao.AccountDao.findAccountByUid",fetchType = FetchType.DEFAULT))
  })
  List<User> findAllUser();
 
public interface AccountDao {
 @Select("select * from account where uid=#{uid}")
  List<Account> findAccountByUid(int uid);

到此这篇关于MyBatis如何实现多表联查的文章就介绍到这了,更多相关MyBatis多表联查内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

MyBatis实现多表联查的详细代码的更多相关文章

  1. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  2. Springboot集成mybatis实现多数据源配置详解流程

    在日常开发中,若遇到多个数据源的需求,怎么办呢?通过springboot集成mybatis实现多数据源配置,简单尝试一下,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  3. MybatisPlus中的多表条件排序查询

    这篇文章主要介绍了MybatisPlus中的多表条件排序查询,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  4. Mybatis结果集映射与生命周期详细介绍

    结果集映射指的是将数据表中的字段与实体类中的属性关联起来,这样 MyBatis 就可以根据查询到的数据来填充实体对象的属性,帮助我们完成赋值操作

  5. Spring Boot 整合持久层之MyBatis

    在实际开发中不仅仅是要展示数据,还要构成数据模型添加数据,这篇文章主要介绍了SpringBoot集成Mybatis操作数据库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. Mybatis详解动态SQL以及单表多表查询的应用

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑,下面这篇文章主要给大家介绍了关于Mybatis超级强大的动态SQL语句的相关资料,需要的朋友可以参考下

  7. mybatis水平分表实现动态表名的项目实例

    本文主要介绍了mybatis水平分表实现动态表名的项目实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  8. Mybatis中${param}与#{param}的区别说明

    这篇文章主要介绍了Mybatis中${param}与#{param}的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  9. MyBatis流式查询的项目实践

    本文主要介绍了MyBatis流式查询的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  10. Mybatis图文并茂讲解分页插件

    使用过mybatis的人都知道,mybatis本身就很小且简单,sql写在xml里,统一管理和优化。缺点当然也有,比如我们使用过程中,要使用到分页,如果用最原始的方式的话,1.查询分页数据,2.获取分页长度,也就是说要使用到两个方法才能完成分页

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部