关联查询:

一对一:

两种方式实现:

1.通过业务扩展的方式进行一对一查询,新建一个实体类,继承其中属性多的一个,然后写上另一个类中的属性:

实体类:

映射文件:

1 <!-- 业务扩展的方式进行一对一查询,创建一个新的实体类继承属性多的一方然后重写属性少的一方 -->
2   <select id="queryStudentWithOO" parameterType="int" resultType="StudentBusiness">
3     select * from student s inner join studentcard c on s.sid = c.cid and sid = #{sid}
4   </select>

测试类:

 1 //一对一查寻
 2     public static void queryStudentWithOO() throws IOException {
 3         //读取配置文件
 4         Reader reader = Resources.getResourceAsReader("conf.xml");
 5         //创建sqlSessionFactory
 6         SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
 7         //获取session
 8         SqlSession session = sessionFactory.openSession();
 9         //定位映射文件
10         studentMapper studentMapper = session.getMapper(studentMapper.class);
11         //定位sql语句并执行
12         StudentBusiness studentBusiness = studentMapper.queryStudentWithOO(3);
13         //提交事务
14         session.commit();
15         System.out.println(studentBusiness);
16         //关闭连接
17         session.close();
18     }

2.通过ResultMap的方式实现一对一

然后在映射文件中使用association进行对象属性的映射:

实体类:

配置文件:

 1  <select id="queryStudentWithMap" parameterType="int" resultMap="StudentBusiness1">
 2     select * from student s inner join studentcard c on s.sid = c.cid and sid = #{sid}
 3   </select>
 4 <resultMap type="StudentBusiness" id="StudentBusiness1">
 5   <id property="sid" column="sid"/>
 6   <result property="sname" column="sname"/>
 7   <result property="age" column="age"/>
 8   <result property="sex" column="sex"/>
 9   <result property="cid" column="cid"/>
10   <result property="stuInfo" column="stuInfo"/>
11       <association property="address" javaType="Address">
12           <result property="homeAddress" column="homeaddress"/>
13           <result property="schoolAddress" column="schooladdress"/>
14       </association>
15   </resultMap>

测试类:

 1 //一对一查寻,使用ResultMap的方式
 2     public static void queryStudentWithMap() throws IOException {
 3         //读取配置文件
 4         Reader reader = Resources.getResourceAsReader("conf.xml");
 5         //创建sqlSessionFactory
 6         SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
 7         //获取session
 8         SqlSession session = sessionFactory.openSession();
 9         //定位映射文件
10         studentMapper studentMapper = session.getMapper(studentMapper.class);
11         //定位sql语句并执行
12         StudentBusiness studentBusiness = studentMapper.queryStudentWithMap(3);
13         //提交事务
14         session.commit();
15         System.out.println(studentBusiness);
16         //关闭连接
17         session.close();
18     }

2.一对多:

一个班级对应多个学生,应在班级的实体类中定义一个学生的属性,然后在映射文件中使用collection进行对象属性集合进行映射:

实体类:

配置文件:

 1  <!-- 一对多查询 -->
 2   <select id="queryStudentWithOM" parameterType="int" resultMap="Studentclass1">
 3     select * from student s inner join studentclass c on s.cno = c.cno and c.cno = #{cno}
 4   </select>
 5
 6   <resultMap type="StudentClass" id="Studentclass1">
 7       <id property="cno" column="cno"/>
 8       <result property="cname" column="cname"/>
 9       <!-- 循环集合用collection,属性值写集合属性名,类型写集合中的元素的类型并且使用的是ofType -->
10       <collection property="students" ofType="student">
11           <result property="sname" column="sname"/>
12           <result property="age" column="age"/>
13           <result property="sex" column="sex"/>
14       </collection>
15   </resultMap>

测试类:

 1 //一对多查寻
 2     public static void queryStudentWithOM() throws IOException {
 3         //读取配置文件
 4         Reader reader = Resources.getResourceAsReader("conf.xml");
 5         //创建sqlSessionFactory
 6         SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
 7         //获取session
 8         SqlSession session = sessionFactory.openSession();
 9         //定位映射文件
10         studentMapper studentMapper = session.getMapper(studentMapper.class);
11         //定位sql语句并执行
12          StudentClass studentClass = studentMapper.queryStudentWithOM(2);
13          System.out.println(studentClass);
14         //提交事务
15         session.commit();
16         List<Student> students = studentClass.getStudents();
17         for (Student student : students) {
18             System.out.print(studentClass.getCno() + "," + studentClass.getCname() + ",");
19             System.out.println(student.getSname()+"," +student.getAge()+"," +student.getSex());
20         }
21         //关闭连接
22         session.close();
23     }

转载于:https://www.cnblogs.com/man-tou/p/11345703.html

07.MyBatis中的关联查询相关推荐

  1. mybatis中的关联查询

    mybatis中的关联查询 (尊重劳动成果,转载请注明出处:https://blog.csdn.net/qq_39778516/article/details/84191429 consistence ...

  2. mybatis一对多关联查询两种方式

    mybatis一对多关联查询两种方式 前提: 方式一: 方式二: 前提: 现在有两张表,学生表跟教师表,一个教师对应多个学生 教师表: CREATE TABLE `teacher` (`id` int ...

  3. 关于mybatis中的时间段查询

    ** 关于mybatis中的时间段查询 在最近的开发中使用比较频繁的一个点,咱就是说浅浅的记录一下!! 相信大家对于mybatis框架并不陌生,我使用它在开发过程中需要对一个时间段进行查询,前端设置的 ...

  4. MySQL中的关联查询

    MySQL中的关联查询 (1)Question:关联是什么 关联是SQL语言中使用SELECT操作表的一种操作机制,用来联系两个或者多个表.SELECT是SQL中的查询语句,用于查询数据库中的数据.将 ...

  5. MySQL中,关联查询的3种写法…

    原文地址:MySQL中,关联查询的3种写法(USING/ON) 作者:王小安 看看下面三个关联查询的 SQL 语句有何区别? [sql]  view plain copy SELECT * FROM  ...

  6. 14、mybatis多表关联查询 association定义关联对象封装规则及懒加载

    文章目录 1.使用association单步查询 1).EmployeeMapper 2).EmployeeMapper.xml 3).Test 2.使用association进行分步查询 4).De ...

  7. mybatis collection_MyBatis之关联查询

    前言 我们进行数据库查询时往往需要的不止一张表的数据,需要将多张表的数据一起查询出来,大家学习过数据库的连接查询,那么在MyBatis中如何将有关系的多张表数据进行关联查询呢. 表的结构 商品和订单是 ...

  8. mybatis 多表关联查询_Java修行第041天--MyBatis框架(下)--多表查询

    1 解决列名和属性名不一致问题 如果查询时使用 resultType 属性, 表示采用 MyBatis 的Auto-Mapping(自动映射)机制, 即相同的列名和属性名会自动匹配. 因此, 当数据库 ...

  9. 【mybatis】一对一关联查询

    mybatis: 一对一关联查询 注意 代码部分 实体类(extity) mybatis mapper service controller 注意 在.xml文件编写中有报错,The content ...

最新文章

  1. CelebA数据库转换为VOC、YOLO格式
  2. 解析Python中的线程与进程
  3. OpenCV SURF FLANN匹配单应性的实例(附完整代码)
  4. 在线催稿:当一位高级视频算法工程师接受采访
  5. lunix下的redis数据库操作——list列表
  6. Div+CSS布局入门教程(五) 页面制作-用好border和clear 附加:1.DIV+CSS设计原则 2.DIV+CSS中标签ul ol li dl dt dd用法
  7. 微软亚研院华刚对科研的见解
  8. shell之xargs与-exec与管道的区别你造吗?
  9. ES6新特性_Promise介绍与基本使用---JavaScript_ECMAScript_ES6-ES11新特性工作笔记024
  10. 小米机器狗CyberDog
  11. CentOS 5.4 安装和卸载桌面
  12. 网络编程----TCP通信
  13. rest-framework-视图
  14. 分享大二时用python写的银行管理系统(超简单版)内附源码
  15. NOIP2016普及组T1(买铅笔)题解
  16. TeamViewer被检测为商用后的合理申诉
  17. 笔记 |《软件测试技术经典教程》第4章 黑盒测试技术
  18. 微商城系统之商家平台任务自动分析处理系统_OctShop
  19. React 中 Twitter 的 SVG 图标 (icons)
  20. Installing Oracle11g R2 RAC on RedHat Linux AS 5.5

热门文章

  1. 看看大神是如何计算32位数中‘1’的个数
  2. ./4.sh: No such file or directory
  3. dynamic_debug动态打印kernel日志
  4. 每日一题(46)—— volatile
  5. linux开发板作为蓝牙音箱,USB 蓝牙适配器在ARM 开发板下的使用
  6. 二叉树先序遍历,中序遍历,后序遍历,层次遍历学习总结及完整C/C++代码
  7. Unknown encoder ‘libx264‘的解决方法
  8. 相邻位数字差值的绝对值不能超过_热点争议中技术问题,伺服控制有几个零点?对应真绝对值多圈编码器意义...
  9. 十、vue-router学习笔记——认识路由、vue-router基本使用、vue-router嵌套路由、vue-router参数传递、vue-router导航守卫、keep-alive
  10. LeetCode 1894. 找到需要补充粉笔的学生编号