关联映射
什么是?
数据库中有关联关系的表,通过实体对象引用的方式体现出来,叫关联映射.
为什么?
将多表的记录封装成实体对象.
何时用?
对数据库中的表进行多表查询时.
怎么用?
cn_user------>User
cn_notebook-->Book
public class User{
cnuserid
cnusername
.
.
.
List books; }
public class Book{
cnuserid
cnusername
.
.
.
User user;
}
单个对象的关联
-
单个SQL语句实现
-
两条SQL语句实现
多个对象的关联
-
单个SQL语句实现:一条SQL语句实现,SQL语句复杂,与数据库交互一次.
-
两条SQL语句实现:一条语句查询USER,一条语句查询BOOK,SQL语句简单,与数
据库进行了两次交互
案例:查询User关联Book的相关信息
实现步骤:
-
定义Dao接口文件
-
定义Mapper文件
-
执行测试
-
练习: 用一条语句实现加载多个关联对象
select * from cn_user u join cn_notebook b on (u.cn_user_id=b.cn_user_id) where u.cn_user_id=#{userId} mapper文件中定义一个<select>标签和<resultMap>标签
案例:查询Book关联User信息(单个对象关联)
实现步骤:
-
定义Dao接口文件
-
定义Mapper文件
-
执行测试
-
一个SQL语句实现关联查询
练习:通过两个SQL语句查询Book关联User信息
-
Mapper定义:
<select> cn_notebook全表查询 </select> <resultMap> 定义Book映射 <association> 定义User映射 </association> </resultMap> <select> 关联cn_user表查询 </select>
主键字段的处理
利用数据自增列作为主键时,执行insert操作时,可以在服务器端自动获取主键值
如何实现
<insert
useGeneratedKeys="true" keyProperty="id">
创建表:
create table t_emp(id int primary key auto_increment,name varchar(30),age int)
作业:
-
利用一个SQL语句实现单个对象关联
-
利用两个SQL语句实现多个对象关联