栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis 多表操作的实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis 多表操作的实现

1.1 一对一查询

1.1.1 概述

  关系数据库中第一个表中的单个行只可以与第二个表中的一个行相关,且第二个表中的一个行也只可以与第一个表中的一个行相关。

1.1.2 创建实体类

public class Student {
  private Integer id;
  private String name;
  private Boolean age;
  private String sex;
  private StudentStatus studentStatus;

  // set and get
}
public class StudentStatus {
  private Integer id;
  private String num;
  private String major;

  // set and get
}

1.1.3 创建 DAO 接口

public class StudentStatus {
  private Integer id;
  private String num;
  private String major;

  // set and get
}

1.1.4 结果映射

  resultMap 元素是 MyBatis 中最重要最强大的元素。它可以从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许进行一些 JDBC 不支持的操作。实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的长达数千行的代码。resultMap 的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了。之前已经使用过简单映射语句了,但并没有显式指定 resultMap。只是简单的使用 resultType 将所有的列映射到对象的属性上,需要注意的是列名与属性名一致才能映射,解决列名不匹配还是需要使用 resultMap。


	
	
	


	select user_id, user_name, hashed_password from some_table where id = #{id}

1.1.5 配置 mapper




  
    
    
    
  
  
    select * from student s, student_status st where s.st_id = st.st_id
  




  
    
  
  
  
    select * from student s, class c where s.c_id = c.c_id
  

1.1.5 测试


public class MybatisDemo {

  @Test
  public void TestA() throws IOException {
    // 加载核心配置文件
    InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
    // 获得 sqlSession 工厂对象
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    // 获得 sqlSession 对象
    SqlSession sqlSession = sqlSessionFactory.openSession();

    List list = sqlSession.selectList("com.software.mybatis.dao.ClassDao.findAll");

    for (Class aClass : list) {
      System.out.println(aClass);
    }
  }

}


1.3 多对多查询

1.3.1 概述

  多对多关系是关系数据库中两个表之间的一种关系, 该关系中第一个表中的一个行可以与第二个表中的一个或多个行相关。第二个表中的一个行也可以与第一个表中的一个或多个行相关。该关系一般会借助第三方表实现。


1.3.2 创建实体类

public class Course {
  private Integer cId;
  private String cName;
  private List students;
	
	// set and get
}
public class Student {
  private Integer sId;
  private String sName;
  private Long sAge;
  private String sSex;
  private List courses;

	// set and get
}

1.3.3 创建 DAO 接口


public interface CourseDao {
  public List findAll();
}

public interface StudentDao {
  public List findAll();
}

1.3.4 配置 mapper

☞ student-mapper.xml




  
    
    
    
    
    
      
      
    
  
  
    select * from course c, student s, s_c sc where c.c_id = sc.c_id and s.s_id = sc.s_id
  

1.3.5 测试


public class MybatisDemo {

  @Test
  public void TestA() throws IOException {
    // 加载核心配置文件
    InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
    // 获得 sqlSession 工厂对象
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    // 获得 sqlSession 对象
    SqlSession sqlSession = sqlSessionFactory.openSession();

    List courseList = sqlSession.selectList("com.software.mybatis.dao.CourseDao.findAll");
    List studentList = sqlSession.selectList("com.software.mybatis.dao.StudentDao.findAll");

    System.out.println("### 课程 ###");
    for (Course course : courseList) {
      System.out.println(course);
    }

    System.out.println("### 学生 ###");
    for (Student student : studentList) {
      System.out.println(student);
    }
  }
}


到此这篇关于MyBatis 多表操作的实现的文章就介绍到这了,更多相关MyBatis 多表操作内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/132016.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号