16.Mybatis一对多查询

一对多查询在实际开发中非常常见,比如查询学生信息和班级信息,一个班级对应多个学生,这时就需要使用一对多查询,一对多查询时需要在一的实体类中增加一个集合来存储多的信息,比如在班级类中,增加一个集合来存储学生信息;

@Data@AllArgsConstructor@NoArgsConstructorpublic class Clazz {    String id;    String claName;    String claNo;    //存储学生信息的的集合,该字段为后面一对多准备    List studentList;}

一、级联属性赋值(使用不太多)

    /**     * 查询班级以及班级的学生信息     * @param id 班级ID     * @return     */    public Clazz selectClazzAndStudentsById(String id);
                                                                        
@Testpublic void selectClaAndStu(){    //把配置文件读取到数据流    InputStream stream = Clazz.class.getClassLoader().getResourceAsStream("mybatis-config.xml");    //创建SqlSessionFactory    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);    //创建SqlSession    SqlSession sqlSession = sqlSessionFactory.openSession();    //使用反射获取StudentMapper    ClazzMapper clazzMapper = sqlSession.getMapper(ClazzMapper.class);    //查询数据    Clazz clazz = clazzMapper.selectClazzAndStudentsById("1");    //打印信息    System.out.println("clazz = " + clazz);}


二、分步查询

1.在StudentMapper中构造查询

/** * 根据班级编号查询学生信息 * @param Clazzno  班级编号 * @return */public List selectStudentsByClazzno(String Clazzno);

2.在班级表中使用分步查询

/** * 查询班级以及班级的学生信息 * @param id 班级ID * @return */public Clazz selectClazzAndStudentsById(String id);
                        
@Testpublic void selectClaAndStu(){    //把配置文件读取到数据流    InputStream stream = Clazz.class.getClassLoader().getResourceAsStream("mybatis-config.xml");    //创建SqlSessionFactory    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);    //创建SqlSession    SqlSession sqlSession = sqlSessionFactory.openSession();    //使用反射获取StudentMapper    ClazzMapper clazzMapper = sqlSession.getMapper(ClazzMapper.class);    //查询数据    Clazz clazz = clazzMapper.selectClazzAndStudentsById("2");    //打印信息    System.out.println("clazz = " + clazz);}

三、分布查询:延迟加载

分步查询的优点:可以实现延迟加载,但是必须在核心配置文件中设置全局配置信息:lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载

aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。 否则,每个 属性会按需加载此时就可以实现按需加载,获取的数据是什么,就只会执行相应的sql。此时可通过association和 collection中的fetchType属性设置当前的分步查询是否使用延迟加载,fetchType=“lazy(延迟加 载)|eager(立即加载)”

如果想开启或者关闭某一个方法的延迟加载,则需要在该方法中设置;

select="com.jiaguohui.mybatis.mapper.ClazzMapper.selectClaByCid"

column="cla_id"

fetchType="lazy">

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章