博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis之级联——鉴别器
阅读量:5052 次
发布时间:2019-06-12

本文共 4381 字,大约阅读时间需要 14 分钟。

鉴别器(discriminator)是MyBatis为我们提供的第三个级联也是最后一个。基于之前两篇级联中的场景,现增加学生们去体检,但男女体检项目不一样,我们把男女体检表做成两张表,当然我想也可以设计为一张表,只有女生的项目男生不填就行了,为了讲解鉴别器就把男女体检表分开。鉴别器的作用在这里就是根据性别的不同去不同的表里进行查询体检情况,例如是男生就在男生体检表里查询,是女生就在女生体检表里查询。

POJO类我们也分为了男生、女生,他们分别继承之前的Student类。

MaleStudent类:

1 package day_8_mybatis.pojo; 2  3 import java.util.List; 4  5 /** 6  * @author turbo 7  * 8  * 2016年11月6日 9  */10 public class MaleStudent extends Student {11     List
studentHealthList;12 //省略getter/setter方法13 }

一个学生和他体检表的对应关系应该是一对一的关系,为什么在这里是一对多的关系呢?呃……这是因为在体检表的设计中有一个日期的字段,也就是说一个学生在不同时间的体检情况都有记录,所以学生和体检表的对应关系就是一对多的关系,在这里也就是一个List的引用。

FemaleStudent类:

1 package day_8_mybatis.pojo; 2  3 import java.util.List; 4  5 /** 6  * @author turbo 7  * 8  * 2016年11月6日 9  */10 public class FemaleStudent extends Student{11     List
studentHealthList;12 //省略getter/setter方法13 }

这里的List的引用道理同上。

现在看看体检表的POJO类。

MaleStudentHealth类:

package day_8_mybatis.pojo;/** * @author turbo * * 2016年11月6日 */public class MaleStudentHealth {    private int id;    private int studentId;    private String date;    private String prostate;   //前列腺    //省略setter/getter方法}

FemaleStudentHealth类:

1 package day_8_mybatis.pojo; 2  3 /** 4  * @author turbo 5  * 6  * 2016年11月6日 7  */ 8 public class FemaleStudentHealth { 9     private int id;10     private int studentId;11     private String date;12     private String womb;13     //省略setter/getter方法14 }

基本的数据结构设计就是上面所贴出来的代码了。下面我们看看mapper映射器,对于体检情况的查询不管男生女生都是通过student_id来查询的。

查询根据男生的student_id查询该生的体检表:

1 package day_8_mybatis.mapper; 2  3 import day_8_mybatis.pojo.MaleStudentHealth; 4  5 /** 6  * @author turbo 7  * 8  * 2016年11月6日 9  */10 public interface MaleStudentHealthMapper {11     MaleStudentHealth findMaleStudentHealthByStudentId(int id);12 }

其对应的MaleStudentHealthMapper.xml:

1 
2 5 6
7
10

查询根据女生的student_id查询该生的体检表:

1 package day_8_mybatis.mapper; 2  3 import day_8_mybatis.pojo.FemaleStudentHealth; 4  5 /** 6  * @author turbo 7  * 8  * 2016年11月6日 9  */10 public interface FemaleStudentHealthMapper {11     FemaleStudentHealth findFemaleStudentHealthByStudentById(int id);12 }

其对应的FemaleStudentHealthMapper.xml:

1 
2 5
6
9

基本工作已经做完了,剩下就是在StudentMapper.xml利用鉴别器来查询不同的体检表。

1 
2 5
6
7
8
9
10
11
12
13
14
15
16
17 18
21 22
23
24
25 26
27
28
29

第12-15行就是本节的要讲的discriminator鉴别器,它通过查询出来的学生性别选择不同的体检表来查询出体检情况。

最后稍微修改的测试类,即可测试结果。

1 package day_8_mybatis; 2  3 import java.io.IOException; 4 import java.io.InputStream; 5  6 import org.apache.ibatis.io.Resources; 7 import org.apache.ibatis.session.SqlSession; 8  9 import day_8_mybatis.mapper.StudentMapper;10 import day_8_mybatis.pojo.MaleStudent;11 import day_8_mybatis.util.SessionFactory2;12 13 /**14  * 客户端15  * @author turbo16  *17  * 2016年11月6日18  */19 public class Main {20 21     /**22      * @param args23      * @throws IOException 24      */25     public static void main(String[] args) throws Exception {26         String resource = "day_8_mybatis/mybatis-config.xml";        //获取mybatis配置文件路径27         InputStream inputStream = Resources.getResourceAsStream(resource);28         SqlSession sqlSession = SessionFactory2.getInstance(inputStream).openSession();29         StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);30         MaleStudent student =(MaleStudent)studentMapper.getStudent(1);31         System.out.println("学生:" + student.getName() + " 课程:" + student.getCourseScoreList().get(0).getCourse().getCourseName() + " 分数:" + student.getCourseScoreList().get(0).getScore()+ " 性别:" + student.getSex() + " 前列腺:" + student.getStudentHealthList().get(0).getProstate());32 33     }34 35 }

别忘了把新增加的mapper映射注册到mybatis-config.xml配置文件中。

 

转载于:https://www.cnblogs.com/yulinfeng/p/6036051.html

你可能感兴趣的文章
WCF 配置文件
查看>>
oracle导出/导入 expdp/impdp
查看>>
JAVA 技术类分享(二)
查看>>
Objective - C基础: 第四天 - 10.SEL类型的基本认识
查看>>
数据结构之查找算法总结笔记
查看>>
Android TextView加上阴影效果
查看>>
Android 音量调节
查看>>
windows上面链接使用linux上面的docker daemon
查看>>
每天一个小程序—0005题(批量处理图片大小)
查看>>
js-创建对象的几种方式
查看>>
JDK JRE Java虚拟机的关系
查看>>
[算法之美] KMP算法的直观理解
查看>>
EntityFramework 性能优化
查看>>
【ASP.NET开发】菜鸟时期的ADO.NET使用笔记
查看>>
android圆角View实现及不同版本号这间的兼容
查看>>
OA项目设计的能力③
查看>>
Cocos2d-x3.0 文件处理
查看>>
全面整理的C++面试题
查看>>
Activity和Fragment生命周期对比
查看>>
查找 EXC_BAD_ACCESS 问题根源的方法
查看>>