Mybatis 52_基于嵌套select的N-N关联

52_基于嵌套select的N-N关联

  • 嵌套select的N-N关联映射
    • 基于嵌套select的映射时,可指定如下独有属性:
    • 项目0522基于嵌套select的N-N
    • 使用@Many注解

嵌套select的N-N关联映射

【备注】:对于N-N关联,底层数据表不能直接使用主外键关联来管理,必须使用连接表来管理关联关系。
只要关联实体是多个对象,都使用或@Many映射
所谓嵌套select,就是指需要一条额外的select语句去获取关联实体
在这种策略下,无论是先拿到主表记录,还是先拿到从表记录,程序都需要执行额外的select语句去获取关联实体。
定义元素时,至少要指定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. 创建SqlSessionFactory
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		// 2. 打开SqlSession
		SqlSession sqlSession 

你可能感兴趣的:(mybatis,数据库,sql,eclipse,java)