Mybatis中多对一查询的两种方式
2018-03-22 21:37
609 查看
第一种是按照结果嵌套查询
其实也就是先查询出把两个表结合一块的那种,然后对结果集在进行嵌套自定义resultMap结果集,然后在这个结果集中再去把另一张表进行关联进去,通过的是两个表的外键的那个列名,最后是把另一张表的那个主键id(这里是teacher),给映射到另一个表的外键id(这里是student的和teacher的外键tid)
然后把这个mapper的xml文件映射给mybatis的全局配置文件中的mapper中
就是直接测试了
<select id="getStudent" resultMap="StudentTeacher"> SELECT s.id sid , s.name sname ,s.tid stid , t.id tid, t.name tname FROM student s ,teacher t WHERE s.tid=t.id </select> <!--这个id就是能找到是你哪个SQL语句的resultType的值,而type就是你最终想得到的结果的映射类型--> <resultMap id="StudentTeacher" type="Student"> <!--这个id就是自己定义的列名--> <id column="sid" property="id"/> <result column="sname" property="name"/> <!--关联对象--> <association property="teacher" javaType="Teacher"> <id column="tid" property="id"/> <result column="tname" property="name"/> </association> </resultMap>
测试主函数
package test; import beans.Student; import dao.StudentDao; import java.io.IOException; import java.util.List; public class TestOneToMany { public static void main(String[] args) throws IOException { StudentDao studentDao = new StudentDao(); List<Student> list = studentDao.getAll(); for (Student student : list) { System.out.println("学生的姓名是>>>>"+student.getName()+"学生的老师的姓名>>>>" +student.getTeacher().getName()); } } }
第二种就是 按结果查询处理
先查询student的表,然后在这个返回自定义的resultMap集中再去关联另外一个外键的表(这里指teacher表)然后通过外键的那个列把两个表给关联起来
再去查询另外一个teacher表(可以新建一个mapper的xml配置文件)
<!--这个是按查询的嵌套进行处理的--> <select id="getStudent" resultMap="StudentTeacher"> SELECT * FROM user </select> <resultMap id="StudentTeacher" type="Student"> <!--然后这个关联的是另外一个查询另一张的teacher的表,也就是说需要建两个mapper的SQL语句的xml文件--> <association property="teacher" column="tid" javaType="Teacher" select="TeacherMapper.getTeacher"> </association> </resultMap> <!--这个就是查询另一张teacher的表的映射SQL(下面这个映射如果想更加规范的话也可以放在另外一个mapper的xml中去)--> <!--<select id="getTeacher" resultType="Teacher"> SELECT * FROM teacher WHERE id = #{id} </select>-->
这个测试的文件和上一个一样
总结:用第一种的话思路会比较清晰,但是在书写SQL语句的话会比较麻烦些,第二种的话逻辑有点多,但是SQL语句书写比较简单
相关文章推荐
- MyBatis模糊查询的两种拼接方式
- MyBatis的级联查询(两种方式)
- MyBatis笔记----多表关联查询两种方式实现
- MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)
- MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)
- MyBatis配置一对一关联查询的两种方式及其双向获取时注意问题
- Mybatis模糊查询的两种实现方式
- 关于串口通讯查询与中断两种方式
- mybatis打印sql log4j的两种配置方式
- 20Mybatis_订单商品数据模型_一对一查询——resultType和resultMap两种方式以及两种方式的总结
- mybatis---最简单的增删查改两种方式
- hibernate——两种查询方式
- MyBatis 学习 (二) dao层开发的两种方式
- Mybatis 中级联查询方式
- linq 实现查询字符串拼接 : And 和 OR 两种方式
- linq 实现查询字符串拼接 : And 和 OR 两种方式
- 【SSH三大框架】Hibernate基础第四篇:Hibernate的两种查询方式:hql和Criteria
- MyBatis动态sql_foreach下foreach批量插入两种方式
- SQL查询最三天数据的两种表达方式
- mybatis中mapper配置方式进行查询(三)