销售人员报销网站开发费,邓州建网站,网站首页动画代码,房产cms网站建设一、多表结构
学生表、班级表、课程表、班级课程表 二、一对一
一个学生只属于一个班级。
查询#xff1a;id name age gender banjiName
SELECT s.id,s.name,s.age,s.gender,b.id AS banjiId,b.name AS banjiName
FROM student AS s INNER JOIN banji AS b
ON s.banji_id…一、多表结构
学生表、班级表、课程表、班级课程表 二、一对一
一个学生只属于一个班级。
查询id name age gender banjiName
SELECT s.id,s.name,s.age,s.gender,b.id AS banjiId,b.name AS banjiName
FROM student AS s INNER JOIN banji AS b
ON s.banji_idb.id; public class Student{private Integer id;private String name;private Integer age;private Banji banji;
} MyBatis中使用association标签解决一对一关联查询association标签可以使用的属性如下 property对象属性的名称javaType对象以昂属性的类型column数据库中字段的名称也可能是起的别名 public void testOne2One() {SqlSession sqlSession MyBatisUtil.getSqlSession();// 最终返回的是一个学生的集合但是Student里面是有一个banji对象里面保存了这个学生对应的班级信息ListStudent list sqlSession.selectList(student.selectStudentBanjiInfo);for (Student student : list) {System.out.println(student);}
}
Student [id1, name张三, age21, gender男, banjiBanji [id1, namejava1807]] Student [id2, namezhangsan, age12, gender男, banjiBanji [id1, namejava1807]] Student [id4, name王五2, age12, gender男, banjiBanji [id2, namejava1812]] 二、一对多 三、多对多
多对多其实就是分解为两个一对多。 四、懒加载(延迟加载)
1.什么是懒加载
顾名思义懒加载就是懒得加载只有使用的时候才进行加载。其实懒加载也加延迟加载主要以应用与Mybatis的关联查询按照设置的延迟规则推迟对延迟对关联对象的select查询例如我们在用Mybatis进行一对多的时候先查询出一方当程序需要多方数据时mybatis会再次发出sql语句进行查询 减轻了对我们数据库的压力。Mybatis的延迟加载只对关联对象有延迟设置。 MyBatis关联查询加载时机 直接加载执行完主对象的查询后马上执行对关联对象的查询语句侵入式延迟执行完对主对象对查询后不会执行对关联对象的查询但当访问主对象的属性详情事就会执行关联对象的查询深度延迟只有当真正访问关联对象的详情时才会执行查询语句 延迟加载需要把mybatis版本号改为3.5.1 2.全局延迟配置
在MyBatis核心配置类中添加标签
settings!-- 延迟加载总开关 --setting namelazyLoadingEnabled valuetrue/!-- 侵入式延迟加载开关 --setting nameaggressiveLazyLoading valuetrue/
/settings
aggressiveLazyLoading侵入式延迟加载为true 在3.4.1之后的版本aggressiveLazyLoading侵入式延迟加载默认值为false
StudentMapper.xml
resultMap idstudentMap typeStudentid columnid propertyid/result columnname propertyname/result columnage propertyage/result columngender propertygender/result columnbanji_id propertybanjiId/!--association propertybanji javaTypeBanjiid columnbanjiId propertyid/result columnbanjiName propertyname//association--association propertybanji columnbanji_id selectbanji.selectById javaTypeBanji/
/resultMapselect idselectAll resultMapstudentMapSELECT id, name, age, gender, banji_idFROM student
/select
BanjiMapper.xml
select idselectById resultTypeBanjiSELECT * FROM banji WHERE id#{id}
/select
1.直接加载
直接加载执行完主对象的查询后马上执行对关联对象的查询语句
默认情况的延迟加载
!-- 延迟加载总开关 --
setting namelazyLoadingEnabled valuefalse/
!-- 侵入式延迟加载开关 --
setting nameaggressiveLazyLoading valuetrue/
延迟加载的默认设置是直接加载
延迟加载默认情况下是关闭状态(false)延迟加载相当于总闸总闸是关闭的那么侵入式延迟加载即使是true也不会起作用。 2.侵入式延迟加载
侵入式延迟执行完对主对象对查询后不会执行对关联对象的查询但当访问主对象的属性详情时就会执行关联对象的查询
!-- 延迟加载总开关 --
setting namelazyLoadingEnabled valuetrue/
!-- 侵入式延迟加载开关 --
setting nameaggressiveLazyLoading valuetrue/
Test
public void testSelectAll() throws IOException {SqlSession sqlSession MyBatisUtils.getSqlSession();ListStudent list sqlSession.selectList(student.selectAll);for (Student student : list) {//System.out.println(student);//student.getName();}
} Test
public void testSelectAll() throws IOException {SqlSession sqlSession MyBatisUtils.getSqlSession();ListStudent list sqlSession.selectList(student.selectAll);for (Student student : list) {//System.out.println(student);student.getName();}
}