52_基于嵌套select的N-N关联
- 嵌套select的N-N关联映射
- 基于嵌套select的映射时,可指定如下独有属性:
- 项目0522基于嵌套select的N-N
- 使用@Many注解
嵌套select的N-N关联映射
【备注】:对于N-N关联,底层数据表不能直接使用主外键关联来管理,必须使用连接表来管理关联关系。
只要关联实体是多个对象,都使用<collection…/>或@Many映射
所谓嵌套select,就是指需要一条额外的select语句去获取关联实体
在这种策略下,无论是先拿到主表记录,还是先拿到从表记录,程序都需要执行额外的select语句去获取关联实体。
定义<association…/>或<collection…/>元素时,至少要指定property属性,用于指定代表关联关系的属性名
此时javaType指定集合属性类型(比如List、Set),ofType指定集合元素的类型
基于嵌套select的映射时,可指定如下独有属性:
-
select: 指定额外的select语句的ID
-
column: 指定将当前实体的哪一列或哪些列传给select语句作为参数
-
fetchType:指定抓取策略。延迟加载或立即加载。
延迟加载:只有等到真正去访问关联实体时采取执行额外的select语句。【注意】:
对于N-N的关联关系,数据表使用连接表来记录关联关系的,
因此额外的select语句必须去join连接表才能查到有效的信息
项目0522基于嵌套select的N-N
主类
package lee;import java.io.IOException;
import java.io.InputStream;
import java.util.List;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.itcheng.app.dao.AddressMapper;
import org.itcheng.app.dao.PersonMapper;
import org.itcheng.app.domain.Address;
import org.itcheng.app.domain.Person;public class PersonManager
{// SqlSessionFactory应该是应用级别private static SqlSessionFactory sqlSessionFactory;public static void main(String[] args) throws IOException{String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);// 1. 创建SqlSessionFactorysqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 2. 打开SqlSessionSqlSession sqlSession