t.text 假设在数据库中存在一对多、多对多等关系,则在一个表中的主键可能作为另一个表的外键而存在,所以在查询的时候返回的结果可能不单单是一个JOPO类,因此就要用到resultMap这
假设在数据库中存在一对多、多对多等关系,则在一个表中的主键可能作为另一个表的外键而存在,所以在查询的时候返回的 结果可能不单单是一个JOPO类,因此就要用到resultMap这个元素去自己定义相关要返回的内容。通常一对多用到association 这个元素,多对一用到collection元素。 一对多内容: 假设一个班级对应多个学生的情况。 班级表: CREATE TABLE `clazz` ( `id` int(14) NOT NULL DEFAULT '0', `code` varchar(18) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 学生表: CREATE TABLE `student` ( `id` int(14) NOT NULL DEFAULT '0', `name` varchar(18) DEFAULT NULL, `sex` varchar(18) DEFAULT NULL, `age` int(14) DEFAULT NULL, `clazz_id` int(14) DEFAULT NULL, PRIMARY KEY (`id`), KEY `class_id` (`clazz_id`), CONSTRAINT `class_id` FOREIGN KEY (`clazz_id`) REFERENCES `clazz` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 班级类: private int id; private String code; 学生类: private int id; private String name; private String sex; private int age; private Clazz clazz; 其中clazz属性对应Clazz对象。 查询要求:查询学生的时候同时显示班级信息。多对一关系。解释:首先执行了id为selectStudent的语句,返回类型为自己定义的Map类,其中的clazz属性是班级属性,所以通过 association元素进行关联映射,column表示列名,javaType表示属性对应的类型,property表示类的属性名,在association元素 中执行了一个select语句,通过传入的班级id作为参数进行查询,返回一个Clazz对象封装在Student的clazz属性中。 查询要求:查询班级信息的时候显示班级的学生。一对多关系。 班级类: private int id; private String code; private List students; 其中students表示集合类型,其中为Student对象。 学生类: private int id; private String name; private String sex; private int age; private Clazz clazz; 查询语句的书写: 上述重点在于collection元素,其中property表示的是属性名称,column表示对应的数据库表的列名,javaType表示返回 的类型,ofType表示集合中返回的类型,上述是Student这个类,select表示一个SQL语句,将返回的结果传给Property定义 的对象,其中的参数由column提供。 由于上述中集合中还有集合,所以通过foreach不能进行获取。所以只能通过原始的方法,如下: <% List list = (List)request.getAttribute("clazzlist");//获取最外面的集合 for(int i=0;i <%=clazz.getId()%> <%=clazz.getCode()%> <%=student.getId()%> <%=student.getName()%> <%=student.getSex()%> <%=student.getAge()%> <% } } %>