MyBatis-第四章
表关联
-
准备表teacher 教师表
列名 类型 备注
id number 主键
name varchar2(32) 名称
profession varchar2(32) 专业
-
准备表student 学生表
列名 类型 备注
stu_id number 主键
stu_name varchar2(32) 姓名
stu_age number(3) 年龄
stu_sex varchar2(3) 性别
tea_id number 外键-教师ID
stu_create_date date 时间戳
-
准备表Subject 学科表
列名 类型 备注
sub_id number 主键
sub_name varchar2(32) 学科名
stu_id number 外键-学生ID
sub_create_date date 时间戳
association 一对一 学生表 对 教师表
1. 实体类添加对应对象 – 教师
2. Mapper添加对应结果集映射
collection 一对多 学生表 对 学科表
1. 实体类添加对应集合对象 – 学科
2. Mapper添加对应结果集映射
使用ResultMap实现结果多表映射
1. 设置返回值类型 resultType=“java.util.Map”,SQL结果装入Map集合
2. 不需要写映射关系和实体类的表关联属性值
3. dao层返回值List<Map<String,Object>>
4. 每一行条目对应一个Map:
Map 的Key 对应列名或参数名;
Map 的 value 对应实际值
5. Key值需要修改为,加引号格式
框架的含义
框架(Framework)是一个提供了可重用的公共结构的半成品。框架封装了通用的方法和调用流程架构,它可以让我直接调用成熟的方法来完成某种功能,达到事半功倍的效果。
比如MyBatis封装JDBC的功能,可以让我们不用关心底层的实现,而注重于功能开发。
个人作业及其总结
-
回顾多表关联left,right,inner,full
select * from student t1 left join subject t2 on t1.stu_id=t2.stu_id;
select * from student t1 right join subject t2 on t1.stu_id=t2.stu_id;
select * from student t1 inner join subject t2 on t1.stu_id=t2.stu_id;
select * from student t1 full join subject t2 on t1.stu_id=t2.stu_id; -
MyBatis的一对一关联示例
<!-- 表关系一一对应 --> <select id="selectleftList" resultMap="BaseResultMap2"> select * from student t1 left join teacher t2 on t1.tea_id=t2.id </select> <resultMap id="BaseResultMap2" type="com.gxy.entity.Student"> <id column="stu_id" property="stuId" /> <result column="stu_name" property="stuName" /> <result column="stu_age" property="stuAge" /> <result column="stu_sex" property="stuSex" /> <result column="tea_id" property="teaId" /> <result column="stu_create_date" property="stuCreatedate" /> <association property="teacher" javaType="com.gxy.entity.Teacher"> <id column="id" property="id"/> <result column="name" property="name" /> <result column="class" property="CLASS" /> </association> </resultMap>
-
MyBatis的一对多关联示例
<!-- 通用查询映射结果 --> <resultMap id="BaseResultMap3" type="com.gxy.entity.Student"> <id column="stu_id" property="stuId" /> <result column="stu_name" property="stuName" /> <result column="stu_age" property="stuAge" /> <result column="stu_sex" property="stuSex" /> <result column="tea_id" property="teaId" /> <result column="stu_create_date" property="stuCreatedate" /> <collection property="subject" ofType="com.gxy.entity.Subject"> <id column="sub_id" property="subId" /> <result column="sub_name" property="subName" /> <result column="stu_id" property="stuId" /> <result column="sub_create_date" property="subCreatedate" /> </collection> </resultMap> <!-- 一对多关系 --> <select id="selectinnerlist" resultMap="BaseResultMap3"> select * from student t1 inner join subject t2 on t1.stu_id=t2.stu_id </select>
-
Map结构的表关联
<!-- map标签组 --> <select id="selectMapList" resultType="java.util.Map"> select * from student t1 inner join subject t2 on t1.stu_id=t2.stu_id </select>
5. 框架的含义
Spring
Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。
Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地new
一个对象,而是让Spring框架帮你来完成这一切。
SpringMVC
SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。
mybatis
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。