浅谈collection标签的oftype属性能否为java.util.Map

网友投稿 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 multiLanguageList;

// private List multiLanguageList;

private List multiLanguageList;

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 getMultiLanguageList() {

return multiLanguageList;

}

public void setMultiLanguageList(List multiLanguageList) {

this.multiLanguageList = multiLanguageList;

}

}

collection聚集

聚集元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类);对应的数据库表的列名称;

不同情况需要告诉MyBatis 如何加载一个聚集。MyBatis 可以用两种方式加载:

1. select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活;

2. resultsMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型。

例如,一个班级有多个学生。

首先定义班级中的学生列表属性:private List studentList;

使用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 empNames;

public ListString() {

}

public ListString(int deptId, List empNames) {

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小时内删除侵权内容。

上一篇:python四十几行代码实现界面化贪吃蛇(几十行代码的python程序)
下一篇:python文档:数字(python数字字符)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~