MyBatis的三层级联和二层缓存
<?xml version = "1.0" encoding = "UTF-8">
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "com.learn.chapter4.mapper.StudentSelfcardMapper">
<resultMap type = "com.learn.chapter4.po.StudentSelfcardBean">
<id property = "id" column = "id"/>
<id property = "studentId" column = "student_id"/>
<id property = "native_" column = "native"/>
<id property = "issueDate" column = "issue_date"/>
<id property = "endDate" column = "end_date"/>
<id property = "note" column = "note"/>
</resultMap>
<select id = "findStudentSelfcardByStudentId" parameterType = "int" resultMap = "studentSelfcardMap">
select id,student_id,native,issue_date,end_date,note from t_student_selfcard where student_id = #{studentId}
</select>
</mapper>
这个呢,就是我们的学生证查询resultMap定义了,接下来是我们的学生表查询;
<?xml version = "1.0" encoding = "UTF-8">
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "com.learn.chapter4.mapper.StudentMapper">
<resultMap id = "studentMap" type = "com.learn.chpater4.po.StudentBean">
<id property = "id" column = "id"/>
<result property = "cnname" column = "cnname"/>
<result property = "sex" column = "sex" jdbcType = "INTEGER" javaType = "com.learn.chapter4.enums.SexEnum"
typeHandler = "com.learn.chapter4.typehandler.SexTypeHandler"/>
<result property = "note" column = "note"/>
<association property = "studentSelfcard" column = "id" select = "com.learn.chapter4.mapper.StudentSelfcardMapper.findStudentSelfcardByStudentId"/>
</resultMap>
<select id = "getStudent" parameterType = "int" resultMap = "studentMap">
select id, cnname, sex, note from t_student where id = #{id}
</select>
</mapper>
最后,做一下测试就可以了;
SqlSession sqlSession = null;
try{
sqlSession = SqlSessionFactoryUtil.openSqlSession();
StduentMapper stuMapper = sqlSession.getMapper(StudentMapper.class);
StudentBean stu = stuMapper.getStudent(1);
}finally{
if(sqlSession != null){
sqlSession.close();
}
}
public class LectureBean{
private Integer id;
private String lectureName;
private String note;
...setter and getter...
}
public class StudentLectureBean{
private int id;
private Integer studentId;
private LectureBean lecture;
private BigDecimal grade;
private String nte;
}
接下来我们做一对多的级联;
<?xml version = "1.0" encoding = "UTF-8">
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "com.learn.chpater4.mapper.StudentMapper">
<resultMap id = "studentMap" type = "com.learn.chpater4.po.StudentBean">
<id property = "id" column = "id"/>
<result property = "cnname" column = "cnname"/>
<result property = "sex" column = "sex" jdbcType = "INTEGER"
javaType = "com.learn.chapter4.enums.SexEnum"
jdbcType = "com.learn.chapter4.typehandler.SexTypeHandler"/>
<result property = "note" column = "note"/>
<association property = "studentSelfcard" column = "id" select = "com.learn.chapter4.mapper.StudentSelfcardMapper.findStudentSelfcardByStudentId"/>
<collection property = "studentLectureList" column = "id" select = "com.learn.chapter4.mapper.StudentLectureMapper.findStudentLectureByStudentId"/>
</resultMap>
<select id = "getStudent" parameterType = "int" resultMap = "studentMap">
select id, cnname, sex, note from t_student where id = #{id}
</select>
</mapper>
StudentLectureMapper.xml
<?xml version = "1.0" encoding = "UTF-8">
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = com.learn.chapter4.mapper.StudentLectureMapper">
<resultMap id = "studentLectureMap" type = "com.learn.chpater4.po.StudentLectureBena">
<id property = "id" column = "id"/>
<id property = "studentId" column = "student_id"/>
<id property = "grade" column = "grade"/>
<id property = "note" column = "note"/>
<association property = "lecture" column = "lecture_id" select = "com.learn.chpater4.mapper.LectureMapper.getLecture"/>
</resultMap>
<select id = "findStudentLectureByStuId" parameterType = "int" resultMap = "studetntLectureMap">
select id, student_id,lecture_id,grade,note from t_student_lecture where student_id = #{id}
</select>
</mapper>
LectureMapper.xml
<?xml version = "1.0" encoding = "UTF-8">
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "com.learn.chapter4.mapper.LectureMapper">
<select id = "getLecture" parameterType = "int" resultTYpe = "com.learn.chapter4.po.LectureBean">
select id,lecture_name as lectureName,note from t_lecture where id = #{id}
</select>
</mapper>
下面是一对多的测试类;
Logger logger = Logger.getLogger(Chpater4Main.class);
SqlSession sqlSession = null;
try{
sqlSession = SqlSessionFactoryUtil.openSqlSession();
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
StudentBean student = studentMapper/getStudent(1);
logger.info(student.getStudentSelfcard().getNative_());
StudentLectureBean studentLecture = student.getStudentLectureList().get(0);
LectureBean lecture = studentLecture.getLecture();
logger.info(student.getCnname() + "\t" + lecture.getLectureName())
}finally{
if(sqlSession != null){
sqlSession.close();
}
}
public class MaleStudentBean extends StudentBean{
privaate List<StudentHealthMaleBean> studentHealthMaleList = null;
}
public class FemaleStudentBean extends StudentBean{
private List<StudentHealthFemaleBean> studentHealthFemaleList = null;
}
下面是鉴别器的内容;
<?xml version = "1.0" encoding = "UTF-8">
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "com.learn.chpater4.mapper.StudentMapper">
<resultMap id = "studentMap" type = "com.learn.chapter4.po.StudentBean">
<id property = "id" column = "id"/>
<result property = "cnname" column = "cnname"/>
<result property = "sex" column = "sex" jdbcType = "INTEGER" typeHandler = "com.learn.chpater4.typeHandler.SexTypeHandler"/>
<result property = "note" column = "note"/>
<association property = "studentSelfcard" column = "id" select = "com.learn.chapter4.mapper.StudentSelfcardMapper.findStudentSelfcardByStudentId"/>
<collection property = "studentLectureList" column = "id" select = "com.learn.chpater4.mapper.StudentLectureMapper.findStudentLectureByStuId"/>
<discriminator javaType = "int" column = "sex">
<case value = "1" resultMap = "maleStudentMap"/>
<case value = "2" resultMap = "femaleStudentMap"/>
</discriminator>
</resultMap>
<select id = "getStudent" parameterType = "int" resultMap = "studentMap">
select id,cnname,sex,note form t_student where id = #{id}
</select>
<resultMap id = "maleStudentMap" type = "com.learn.chpater4.po.MaleStudentBean" extends = "studentMap">
<collection property = "studentHealthMaleList" select = "com.learn.chapter4.mapper.StudentHealthMaleMapper.findStudentHealthMaleByStuId" column = "id"/>
</resultMap>
<resultMap id = "femaleStudentMap" type = "com.learn.chapter4.po.FemaleStudentBean" extends = "studentMap">
<collection property = "studentHealthFemaleList" select = "com.learn.chapter4.mapper.StudentHealthFemaleMapper.findStudentHealthFemaleByStuId" column = "id"/>
</resultMap>
</mapper>
<settings>
<setting naem = "lazyLoadingEnabled" value = "true"/>
</settings>
这是开启延迟加载的;
<setting name = "aggressiveLazyLoading" value = "false"/>
<association property = "studentSelfcard" column = "id" fetchType = "lazy"
select = "com.learn.chapter4.mapper.StudentSelfcardMapper.findStudentSelfcardByStudentId"/>
<collection property = "studentLectureList" column = "id" fetchType = "eager"
select = "com.learn.chapter4.mapper.StudentLectureMapper.findStudentLectureByStuId"/>
<cache/>
MyBatis的三层级联和二层缓存的更多相关文章
- Mybatis第八篇【一级缓存、二级缓存、与ehcache整合】
Mybatis缓存 缓存的意义 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题. myba ...
- MyBatis高级篇之整合ehcache缓存框架
MyBatis高级篇之整合ehcache缓存框架 2017-09-01 0 Comments 1,671 Views 0 Times 一.前言 MyBatis为我们提供了Cache接口,也提供 ...
- SSM框架之Mybatis(7)延迟加载、缓存及注解
Mybatis(7)延迟加载.缓存及注解 1.延迟加载 延迟加载: 就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据.延迟加载也称懒加载. **好处:**先从单表查询,需要时再从关联表去关 ...
- Mybatis源码研究7:缓存的设计和实现
Mybatis源码研究7:缓存的设计和实现 2014年11月19日 21:02:14 酷酷的糖先森 阅读数:1020 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...
- Mybatis基于注解开启使用二级缓存
关于Mybatis的一级缓存和二级缓存的概念以及理解可以参照前面文章的介绍.前文连接:https://www.cnblogs.com/hopeofthevillage/p/11427438.html, ...
- MyBatis学习笔记(2)--缓存
一.什么是缓存 --存在于内存中的临时数据. 为什么使用缓存?--减少和数据库的交互次数,提高执行效率. 适用于缓存的数据: 1.经常查询并且不经常改变的数据. 2.数据的正确与否对最终结果影响较小的 ...
- Mybatis中使用级联查询,一对多的查询
一.需求描述 自己在开发一个小程序的过程中,需要做的一个查询是稍微比较复杂的查询,根据用户信息去查询用户所对应的宠物信息. 一个用户可能对应多个宠物,所以在用户和宠物信息的对应关系就是一对多的关系. ...
- mybatis多参数传递,延迟加载,缓存,注解开发
1.Mybatis的多参数传递方式 需求:更具id 和 名字查询用户: select * from user where id = ? and name = ?: 1):QueryVo 或者 User ...
- MyBatis 中的级联
MyBatis 的级联分为 3 种. 1.鉴别器(discriminator):它是根据某些条件决定采用具体实现类级联的方案,比如体检表要根据性别去区分. 2.一对一(association):比如学 ...
随机推荐
- centos 配置 php 执行shell的权限
在执行特定的shell命令,如 kill,killall 等需要配置root权限 php脚本运行在apache服务器下 可以看到 httpd 是以 apache 用户执行的 看一下 该用户信息 现在 ...
- 基于agenda的Nodejs定时任务管理框架搭建
0.背景 在大型项目中,定时任务的应用场景越来越广.一般来说,按照微服务的思想,我们会将定时任务单独部署一套服务,核心的业务接口独立到另一个服务中,从而降低相互之间的耦合程度.在需要使用定时任务时,只 ...
- Shell脚本的颜色样式及属性控制
首先看一下格式 echo -e "\033[字背景颜色:文字颜色m字符串\033[0m" 举例 echo -e "\033[41;36m 字体 \033[0m" ...
- aforge 学习-基本图像处理要用的类库
1.图像灰度化:Grayscale.CommonAlgorithms.BT709(3种) FiltersSequence =new FiltersSequence(数组处理函数): 2.二值化(阈值 ...
- HDU - 2102 A计划 (BFS) [kuangbin带你飞]专题二
思路:接BFS判断能否在限制时间内到达公主的位置,注意如果骑士进入传送机就会被立即传送到另一层,不会能再向四周移动了,例如第一层的位置(x, y, 1)是传送机,第二层(x, y, 2)也是传送机,这 ...
- APP性能测试(启动时间)
#encoding:utf-8 import csv import os import time class App(object): def __init__(self): self.content ...
- VC中基于 Windows 的精确定时
在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间,定时刷新屏幕上的进度条,上位 机定时向下位机发送命令和传送数据等.特别是在对控制性能要求较高的实时控制系统和数据采集系统中,就更需要 ...
- Flex中一些属性总结
Flex中一些属性总结 1.buttonMode = "true" 鼠标变成手形 2.useHandCursor = "true" 鼠标变成手形
- servlet上传文件报错(三)
1.具体报错如下 null null Exception in thread "http-apr-8686-exec-5" java.lang.OutOfMemoryError: ...
- ZigBee技术
ZigBee技术是一种近距离.低复杂度.低功耗.低速率.低成本的双向无线通讯技术.主要用于距离短.功耗低且传输速率不高的各种电子设备之间进行数据传输以及典型的有周期性数据.间歇性数据和低反应时间数据传 ...