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):比如学 ...
随机推荐
- JAVAEE——BOS物流项目06:分页查询、分区导出Excel文件、定区添加、分页问题总结
1 学习计划 1.分区组合条件分页查询 n 分区分页查询(没有过滤条件) n 分区分页查询(带有过滤条件) 2.分区导出 n 页面调整 n 使用POI将数据写到Excel文件 n 通过输出流进行文件下 ...
- Django——ContentType及ContentType-signals的使用
一.ContentType 在django中,有一个记录了项目中所有model元数据的表,就是ContentType,表中一条记录对应着一个存在的model,所以可以通过一个ContentType表的 ...
- Oracle数据库中SCOTT用户下的默认表
①EMP(雇员表): ②DEPT(部门表): ③BONUS(奖金表): ④SALGRADE(工资等级表):
- 使用nodejs搭建api的mock服务
1. 介绍 公司的业务开发都是静态页面,开发前期总是避免不了获取api的问题.在vue中有一些mockjs的方案,方案都是注入性质的,和最终部署总是有差别,而且业务大部分还在zepto下,很难找到合适 ...
- Nginx拦截算法
Nginx流量拦截算法 nginx 夏日小草 2015年10月22日发布 | 1 收藏 | 40 4.2k 次浏览 0x00.About 电商平台营销时候,经常会碰到的大流量问题,除了做流量分 ...
- 重温基础之-css盒模型
所有html元素都可以看作盒子. css盒模型本质上是一个盒子,封装周围的html元素,它包括:外边距,边框,内边距和实际内容. 默认情况下,一个元素的总宽度计算方式: 总宽度=左外边距+左边框+左内 ...
- HDU - 1584 IDA*
思路:裸的IDA*,估计当前状态至少需要多少距离才能达到目标状态,剪枝即可.每一墩牌只需记录其最上面和最下面的牌型即可完成移动. AC代码 #include <cstdio> #inclu ...
- HDU5992 - Finding Hotels
原题链接 Description 给出个二维平面上的点,每个点有权值.次询问,求所有权值小于等于的点中,距离坐标的欧几里得距离最小的点.如果有多个满足条件的点,输出最靠前的一个. Solution 拿 ...
- 利用js实现placeholder占位符,甩开ie不兼容
正常的写法 <input type="text" placeholder="占位符"> 这种写法ie低版本的支持不友好,为了满足某些测试或者产品的变 ...
- JavaScript获取屏幕和页面的宽度和高度
JavaScript获取屏幕和页面的宽度和高度 1.设计源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN ...