java中的接口是类吗
654
2022-08-30
浅谈collection标签的oftype属性能否为java.util.Map
目录collection标签的oftype属性能否为java.util.Mapcollection聚集使用select实现聚集 使用resultMap实现聚集 collection中的ofType="String"时
collection标签的oftype属性能否为java.util.Map
基于mybatis-3.4.5.jar版本,结论是可以的。
SELECT APP_ID ,APP_NAME,PRIORITY,LANGUAGE_CODE,TEXT from TABLE_APP left join TABLE_LANGUAGE on TABLE_LANGUAGE.DATA_ID = TABLE_APP.APP_ID
其中,ofType写成map或java.util.HashMap都是可以的,当然写成pojo的完整名也是可以的,例如ofType="a.b.c.MultiLanguageVO"
package *.*.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestShowVO{
private String id;
private String name;
private Integer priority;
// private List
// private List
private List
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPriority() {
return priority;
}
public void setPriority(Integer priority) {
this.priority = priority;
}
public List
return multiLanguageList;
}
public void setMultiLanguageList(List
this.multiLanguageList = multiLanguageList;
}
}
collection聚集
聚集元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类);对应的数据库表的列名称;
不同情况需要告诉MyBatis 如何加载一个聚集。MyBatis 可以用两种方式加载:
1. select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活;
2. resultsMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型。
例如,一个班级有多个学生。
首先定义班级中的学生列表属性:private List
使用select实现聚集
用法和联合很类似,区别在于,这是一对多,所以一般映射过来的都是列表。所以这里需要定义javaType为ArrayList,还需要定义列表中对象的类型ofType,以及必须设置的select的语句名称(需要注意的是,这里的查询student的select语句条件必须是外键classID)。
ClassMapper.xml文件部分内容:
SELECT * FROM CLASS_TBL CT
WHERE CT.CLASS_ID = #{classID};
StudentMapper.xml文件部分内容:
WHERE ST.CLASS_ID = #{classID}
使用resultMap实现聚集
使用resultMap,就需要重写一个sql,left join学生表。
SELECT *
FROM CLASS_TBL CT
LEFT JOIN STUDENT_TBL ST
ON CT.CLASS_ID = ST.CLASS_ID
LEFT JOIN TEACHER_TBL TT
ON CT.TEACHER_ID = TT.TEACHER_ID
WHERE CT.CLASS_ID = #{classID};
其中的teacherResultMap请见上面TeacherMapper.xml文件部分内容中。studentResultMap请见上面StudentMapper.xml文件部分内容中。
collection中的ofType="String"时
DTO:
pGJVhPackage com.example.mybatis.entity;
import java.util.List;
/**
* 统计部门下的员工名称(只查询出员工名称)
*/
public class ListString {
// 部门id
private int deptId;
// 员工名称集合
private List
public ListString() {
}
public ListString(int deptId, List
this.deptId = deptId;
this.empNames = empNames;
}
// getter
....
// setter
....
}
mapper:
SELECT deptId as 'dept_id',name as 'emp_name'
FROM employee WHERE deptId = #{deptId};
dao:
@Mapper
public interface EmployeeMapper {
/**
* 统计部门下的员工名称(只查询出员工名称)
*/
ListString listStringTest(Integer deptId);
}
表中数据:
测试:
/**
* 统计部门下的员工名称(只查询出员工名称)
*/
@Test
public void deptWithEmpNameTest(){
ListString listString = employeeMapper.listStringTest(1);
System.out.println(listString);
}
输出结果:
ListString{deptId=1, empNames=[小红1, 小红2, 小红3, 小红4, 小红5, 小红6, 小红7, 小红8, 小红9, 小红10]}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~