SSM框架实战详细教程(十一)MyBatis关联关系之一对多和多对多
多对一和一对多是站的角度不同,班级和学生是典型的一对多关系。 在数据库二维表中,无论是一对多还是多对一都是在多的方建一列引用一的方的主键值。  
·
多对一和一对多是站的角度不同,班级和学生是典型的一对多关系。
在数据库二维表中,无论是一对多还是多对一都是在多的方建一列引用一的方的主键值。
而在面向对象的世界里面,是在一的方建多的方的容器型属性。该容器可以是数组、List、Set,在Mybatis中规定的是用List。
public class BanJi {
private int id;
private String name;
private List<Student> stus;
public List<Student> getStus() {
return stus;
}
public void setStus(List<Student> stus) {
this.stus = stus;
}
}
BanJiDao.java
public interface BanJiDao {
//只查询班级
List<BanJi> searchAll();
//查询出班级以及其对应的多个学生
List<BanJi> searchAll2();
}
BanJiDao.xml:
<select id="searchAll" resultType="entity.BanJi">
select * from banji
</select>
<select id="searchAll2" resultMap="BjAndStu">
select bj.id as bjid,bj.name as bj_name,s.* from banji as bj left join student as s on s.bj_id=bj.id
</select>
<resultMap id="BjAndStu" type="entity.BanJi">
<id column="bjid" property="id"/>
<result column="bj_name" property="name"/>
<collection property="stus" ofType="entity.Student">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="gender" property="gender"/>
<result column="age" property="age"/>
</collection>
</resultMap>
测试类:
public class TestOne {
public static void main(String[] args) {
SqlSession session = MybatisSqlSession.getSqlSession();
BanJiDao bjDao = session.getMapper(BanJiDao.class);
List<BanJi> list=bjDao.searchAll2();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getId() + " " + list.get(i).getName());
List<Student> stus = list.get(i).getStus();
if (stus != null) {
for (Student s : stus) {
System.out.println(s.getName());
}
}
}
}
}
在MyBatis中,多对多,站在任何一方看,其实都是一对多的关系,所以对于实体的多对多关系,仍旧使用一对多的处理方案,而不像Hibernate和JPA有专门的处理方式。
更多推荐
已为社区贡献1条内容
所有评论(0)