MyBatis 多表

多表查询:

学生表、班级表、课程表、班级课程表 
    
 

一对一:

一个学生只属于一个班级。
查询:id  name  age  gender   banjiName
SELECT s.id,s.`name`,s.age,s.gender,b.id AS banjiId,b.name AS banjiName
FROM student AS s INNER JOIN banji AS b
ON s.banji_id=b.id;
 
MyBatis中使用association标签解决一对一关联查询,association标签可以使用的属性如下:
  • property:对象属性的名称
  • javaType:对象以昂属性的类型
  • column:数据库中字段的名称(也可能是起的别名)
public void testOne2One() {
      SqlSession sqlSession = MyBatisUtil. getSqlSession();
      // 最终返回的是一个学生的集合,但是Student里面是有一个banji对象,里面保存了这个学生对应的班级信息
       List<Student> list = sqlSession. selectList( "student.findStudentBanjiInfo");
       for (Student student : list) {
         System. out.println( student);
      }
   }
Student [id=1, name=张三, age=21,  gender=男, banji=Banji [id=1,  name=java1 807] ]
Student [id=2, name=zhangsan,  age=12, gender=男, banji=Banji  [id=1, name= java1807] ]
Student [id=4, name=王五2, age=12,  gender=男, banji=Banji [id=2,  name=java1812]]
${student.banji.id}
${student.banji.name}

一对多:

 
 

多对多:

多对多其实就是分解为两个一对多。
 
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
引用[1]:所以想要实现一对一多表查询,需要设置多表查询SQL语句,我们使用左外连接进行多表查询: <select id="getArticleById" resultMap="BaseMap"> select a.*, u.* from articleinfo as a left join userinfo as u on a.uid=u.id where a.id=#{id}; </select> 。 引用[2]:3.测试类: package com.ffyc.mybatisdemo.test; ​ import com.ffyc.mybatisdemo.dao.GradeDao; import com.ffyc.mybatisdemo.dao.StudentDao; import com.ffyc.mybatisdemo.model.Grade; import com.ffyc.mybatisdemo.model.Student; import com.ffyc.mybatisdemo.util.MybatisUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; ​ import java.util.List; ​ /* 多表查询 1对多 */ public class TestGrade { ​ @Test public void findGrade() { SqlSession sqlSession = MybatisUtil.getSqlSession(); GradeDao GradeDao = sqlSession.getMapper(GradeDao.class); List<Grade> grades = GradeDao.findGradelist(); System.out.println(grades); sqlSession.close(); } } ​ 多对一结果查询 。 引用[3]:3.测试类: package com.ffyc.mybatisdemo.test; ​ import com.ffyc.mybatisdemo.dao.AdminDao; import com.ffyc.mybatisdemo.dao.StudentDao; import com.ffyc.mybatisdemo.dao.StudentDao2; import com.ffyc.mybatisdemo.model.Admin; import com.ffyc.mybatisdemo.model.Student; import com.ffyc.mybatisdemo.util.MybatisUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; ​ import java.util.ArrayList; import java.util.List; ​ /* 多表查询 多对1 */ public class TestStudent { ​ @Test //单独使用resultMap处理 public void findStudentlist() { SqlSession sqlSession = MybatisUtil.getSqlSession(); StudentDao studentDao = sqlSession.getMapper(StudentDao.class); Student student = new Student(); List<Student> students = studentDao.findStudentlist(student); System.out.println(students); sqlSession.close(); } } ​ 。 问题:mybatis多表查询left 回答: 在Mybatis中进行多表查询时,可以使用左外连接来实现。在SQL语句中使用左外连接关键字"left join",并指定连接的两个表以及连接条件。例如,可以使用以下SQL语句进行多表查询:<select id="getArticleById" resultMap="BaseMap"> select a.*, u.* from articleinfo as a left join userinfo as u on a.uid=u.id where a.id=#{id}; </select> [1]。此外,还可以使用Mybatis的resultMap来处理多对一或一对多的结果查询。通过定义resultMap,可以将查询结果映射到相应的实体类中。例如,在测试类TestGrade中,使用GradeDao的findGradelist方法进行多对一的结果查询,并将结果打印出来[2]。在测试类TestStudent中,使用StudentDao的findStudentlist方法进行多表查询多对一的结果查询,并将结果打印出来[3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值