一对多查询在实际开发中非常常见,比如查询学生信息和班级信息,一个班级对应多个学生,这时就需要使用一对多查询,一对多查询时需要在一的实体类中增加一个集合来存储多的信息,比如在班级类中,增加一个集合来存储学生信息;
@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"> select * from bdck.student where id=#{id} |
留言与评论(共有 0 条评论) “” |