oracle使用resultMap实现高级结果映射
resultMap的属性:
1.属性
id:resultMap的唯一标识。
type:resulMap的映射结果类型(一般为Java实体类)。
2.子节点
id:一般对应数据库的主键 id,设置此项可以提升数据库性能。
result:映射到JavaBean的某个 “ 简单类型 ”
属性,如基础数据类型,包装类等。子节点 id 和 result
均可以实现最基本的结果集映射,将列映射到简单数据类型的属性。。这两者唯一不同的是:在比较对象实例时 id
将作为结果集的标识属性。这有助于提高总体性能,特别是应用缓存的嵌套结果映射的时候,若需要实现高级结果映射,就需要下面两个配置项:association
和 collection
association(仅处理一对一的关联关系)
1
2
3
4
5
6
7
|
<resultMap type= "User" id= "userRoleResult" > <id property= "id" column= "id" /> <result property= "userName" column= "userName" /> <association property= "role" javaType= "Role" > <id property= "roleName" column= "roleName" /> </association> </resultMap> |
javaType:完整Java类名或者别名。若映射到一个JavaBean,则MyBatis通常会自行检测到其类型;若映射到一个HashMap,则应该明确指定javaType,类确保所需行为。此处为Role。
property:映射到数据库列的实体对象的属性,此处为在User实体类里定义的JavaBean对象属性(role)。association的子元素如下:
id。
result。
property:映射到数据库列的实体类对象的属性。此处为Role的属性。
column:数据库列名或者别名。
在做结果映射的过程中,要确保所有的列名都是唯一无歧义的。
collection(属性是一个集合列表)
1
2
3
4
5
6
7
8
|
<resultMap type= "User" id= "userRoleResult" > <id property= "id" column= "id" /> <result property= "userName" column= "userName" /> <collection property= "List" ofType= "Address" > <id property= "id" column= "id" /> <result property= "postCode" column= "postCode" /> </collection> </resultMap> |
ofType:完整Java类名或者别名,即集合所包含的类型,此处为Address。
property:映射数据库列的实体类对象的属性。此处为在User里定义的属性:List(可以理解为一个名为List,元素类型为Address的ArrayList集合)
collection的子元素与association基本一致。
一对多
1
|
<span style= "color: #ff0000;" ><strong><span style= "font-size: 18pt;" >实体</span></strong></span> |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
package com.smbms.entity; import java.math.BigInteger; import java.util.Date; import java.util.List; /** * 角色 */ <br><br> public class SmbmsRole { private Integer rid; private String roleCode; private String roleName; private BigInteger createdBy; private Date creationDate; private BigInteger modifyBy; private Date modifyDate; //植入多的一方 集合 private List<SmbmsUser> userList; public List<SmbmsUser> getUserList() { return userList; } public void setUserList(List<SmbmsUser> userList) { this .userList = userList; } public Integer getRid() { return rid; } public void setRid(Integer rid) { this .rid = rid; } public String getRoleCode() { return roleCode; } public void setRoleCode(String roleCode) { this .roleCode = roleCode; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this .roleName = roleName; } public BigInteger getCreatedBy() { return createdBy; } public void setCreatedBy(BigInteger createdBy) { this .createdBy = createdBy; } public Date getCreationDate() { return creationDate; } public void setCreationDate(Date creationDate) { this .creationDate = creationDate; } public BigInteger getModifyBy() { return modifyBy; } public void setModifyBy(BigInteger modifyBy) { this .modifyBy = modifyBy; } public Date getModifyDate() { return modifyDate; } public void setModifyDate(Date modifyDate) { this .modifyDate = modifyDate; } } |
DAO层
1
2
3
4
5
6
7
8
9
10
|
<br> package com.smbms.dao; import com.smbms.entity.SmbmsUser; import java.util.List; public interface ISmbmsUserDao { //查询所有用户信息 包含角色信息 public List<SmbmsUser> getUserList(); } |
DAO层XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<?xml version= "1.0" encoding= "UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!--namespace需要指向接口全路径--> <mapper namespace= "com.smbms.dao.ISmbmsRoleDao" > <resultMap id= "roleAndUserMapper" type= "SmbmsRole" > <id column= "rid" property= "rid" ></id> <result column= "roleName" property= "roleName" /> <!--映射多的一方 property代表实体当中多的一方的属性名 ofType代表集合当中泛型类型--> <!-- select 代表执行查询的ID column所引用的条件列 --> <collection property= "userList" ofType= "SmbmsUser" select= "getRoleAndUserMutilSQL" column= "rid" > </collection> </resultMap> <!--写成一条sql--> <select id= "getRoleAndUser" resultMap= "roleAndUserMapper" > select u.id,u.userName,u.userRole,r.rid,r.roleName from smbms_user as u,smbms_role as r where u.userRole=r.rid and r.rid=#{id} </select> <!--写成两条sql--> <select id= "getRoleAndUser" resultMap= "roleAndUserMapper" > select * from smbms_role where rid=#{id} </select> <select id= "getRoleAndUserMutilSQL" resultType= "SmbmsUser" > select * from smbms_user where userRole=#{rid} </select> </mapper> |
测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package com.smbms.test; import com.smbms.dao.ISmbmsRoleDao; import com.smbms.entity.SmbmsRole; import com.smbms.entity.SmbmsUser; import com.smbms.util.MybatisUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class CollectionTest { @Test public void getRoleAndUserTest(){ SqlSession sqlSession = MybatisUtil.getSqlSession(); ISmbmsRoleDao mapper = sqlSession.getMapper(ISmbmsRoleDao. class ); SmbmsRole role = mapper.getRoleAndUser( 3 ); System.out.println( "角色:" +role.getRoleName()); for (SmbmsUser user : role.getUserList()){ System.out.print( "\t用户:" +user.getUserName()); } } } |
多对一
1
|
<span style= "color: #ff0000;" ><strong><span style= "font-size: 18pt;" >实体</span></strong></span> |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
package com.smbms.entity; import java.math.BigInteger; import java.util.Date; /** * */ public class SmbmsUser { private Integer id; private String userCode; private String userName; private String userPassword; private Integer gender; private Date birthday; private String phone; private String address; private Integer userRole; private BigInteger createdBy; private Date creationDate; private BigInteger modifyBy; private Date modifyDate; //关联一的一方 private SmbmsRole role; public SmbmsRole getRole() { return role; } public void setRole(SmbmsRole role) { this .role = role; } public Integer getId() { return id; } public void setId(Integer id) { this .id = id; } public String getUserCode() { return userCode; } public void setUserCode(String userCode) { this .userCode = userCode; } public String getUserName() { return userName; } public void setUserName(String userName) { this .userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this .userPassword = userPassword; } public Integer getGender() { return gender; } public void setGender(Integer gender) { this .gender = gender; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this .birthday = birthday; } public String getPhone() { return phone; } public void setPhone(String phone) { this .phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this .address = address; } public Integer getUserRole() { return userRole; } public void setUserRole(Integer userRole) { this .userRole = userRole; } public BigInteger getCreatedBy() { return createdBy; } public void setCreatedBy(BigInteger createdBy) { this .createdBy = createdBy; } public Date getCreationDate() { return creationDate; } public void setCreationDate(Date creationDate) { this .creationDate = creationDate; } public BigInteger getModifyBy() { return modifyBy; } public void setModifyBy(BigInteger modifyBy) { this .modifyBy = modifyBy; } public Date getModifyDate() { return modifyDate; } public void setModifyDate(Date modifyDate) { this .modifyDate = modifyDate; } }<br><br><br><br><br><br><br> |
DAO层
1
2
3
4
5
6
7
8
9
10
|
package com.smbms.dao; import com.smbms.entity.SmbmsUser; import java.util.List; public interface ISmbmsUserDao { //查询所有用户信息 包含角色信息 public List<SmbmsUser> getUserList(); } |
DAO层XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<?xml version= "1.0" encoding= "UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!--namespace需要指向接口全路径--> <mapper namespace= "com.smbms.dao.ISmbmsUserDao" > <resultMap id= "userListAndRole" type= "SmbmsUser" > <id column= "id" property= "id" ></id> <result column= "userName" property= "userName" /> <association property= "role" javaType= "SmbmsRole" select= "getRole" column= "userRole" > <id column= "rid" property= "rid" ></id> <result column= "roleName" property= "roleName" /> </association> </resultMap> <!--<select id= "getUserList" resultMap= "userListAndRole" > select u.id,u.userName,u.userRole,r.rid,r.roleName from smbms_user as u,smbms_role as r where u.userRole=r.rid </select>--> <select id= "getUserList" resultMap= "userListAndRole" > select * from smbms_user </select> <select id= "getRole" resultType= "SmbmsRole" > select * from smbms_role where rid=#{userRole} </select> </mapper> |
测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package com.smbms.test; import com.smbms.dao.ISmbmsUserDao; import com.smbms.entity.SmbmsUser; import com.smbms.util.MybatisUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class AssociationTest { @Test public void getUserListTest(){ SqlSession sqlSession = MybatisUtil.getSqlSession(); ISmbmsUserDao mapper = sqlSession.getMapper(ISmbmsUserDao. class ); List<SmbmsUser> userList = mapper.getUserList(); for (SmbmsUser user:userList){ System.out.println( "用户:" +user.getUserName()+ "\t角色:" +user.getRole().getRoleName()); } } } |
多对多
1
|
<span style= "color: #ff0000;" ><strong><span style= "font-size: 18pt;" >实体</span></strong></span> |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
package com.smbms.entity; import java.util.List; public class Teacher { private Integer tid; private String tname; //植入学员集合,代表一名教员可以教授多名学员 private List<Student> students; public Integer getTid() { return tid; } public void setTid(Integer tid) { this .tid = tid; } public String getTname() { return tname; } public void setTname(String tname) { this .tname = tname; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this .students = students; } } package com.smbms.entity; import java.util.List; public class Student { private Integer stuid; private String stuname; private String stuaddress; //植入Teacher集合,代表一名学员可以被多名教员教授 private List<Teacher> teachers; public List<Teacher> getTeachers() { return teachers; } public void setTeachers(List<Teacher> teachers) { this .teachers = teachers; } public Integer getStuid() { return stuid; } public void setStuid(Integer stuid) { this .stuid = stuid; } public String getStuname() { return stuname; } public void setStuname(String stuname) { this .stuname = stuname; } public String getStuaddress() { return stuaddress; } public void setStuaddress(String stuaddress) { this .stuaddress = stuaddress; } } |
DAO层
1
2
3
4
5
6
7
8
9
10
|
package com.smbms.dao; import com.smbms.entity.Student; import java.util.List; public interface IStudentDao { //查询所有学生信息 以及授课教员 public List<Student> getStudentInfo(); } |
DAO层XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?xml version= "1.0" encoding= "UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!--namespace需要指向接口全路径--> <mapper namespace= "com.smbms.dao.IStudentDao" > <resultMap id= "studentAndTeacherMapper" type= "Student" > <id column= "stuid" property= "stuid" /> <result column= "stuname" property= "stuname" /> <collection property= "teachers" ofType= "Teacher" > <id column= "tid" property= "tid" ></id> <result property= "tname" column= "tname" /> </collection> </resultMap> <select id= "getStudentInfo" resultMap= "studentAndTeacherMapper" > select * from student,teacher,stu_t where student.stuid=stu_t.stuid and teacher.tid=stu_t.tid </select> </mapper> |
测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package com.smbms.test; import com.smbms.dao.IStudentDao; import com.smbms.entity.Student; import com.smbms.entity.Teacher; import com.smbms.util.MybatisUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class ManeyTooManey { @Test public void getStudentInfo(){ SqlSession sqlSession = MybatisUtil.getSqlSession(); IStudentDao mapper = sqlSession.getMapper(IStudentDao. class ); List<Student> studentInfo = mapper.getStudentInfo(); for (Student stu:studentInfo){ System.out.println( "学生:" +stu.getStuname()); for (Teacher teacher:stu.getTeachers()){ System.out.print( "\t教员:" +teacher.getTname()); } System.out.println(); } } } |
自联接
1
|
<span style= "color: #ff0000;" ><strong><span style= "font-size: 18pt;" >实体</span></strong></span> |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
package com.smbms.entity; import java.util.List; public class City { private Integer cid; private String cname; private Integer pid; //自关联集合 代表的是当前City对象的子集集合 public List<City> childCitys; @Override public String toString() { return "City{" + "cid=" + cid + ", cname='" + cname + '\ '' + ", pid=" + pid + ", childCitys=" + childCitys + '}' ; } public List<City> getChildCitys() { return childCitys; } public void setChildCitys(List<City> childCitys) { this .childCitys = childCitys; } public Integer getCid() { return cid; } public void setCid(Integer cid) { this .cid = cid; } public String getCname() { return cname; } public void setCname(String cname) { this .cname = cname; } public Integer getPid() { return pid; } public void setPid(Integer pid) { this .pid = pid; } } |
DAO层
1
2
3
4
5
6
7
8
9
10
|
package com.smbms.dao; import com.smbms.entity.City; import java.util.List; public interface ICityDao { //查询河南省 下的所有子集 public City getCityAndChildCitys(Integer cid); } |
DAO层XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?xml version= "1.0" encoding= "UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!--namespace需要指向接口全路径--> <mapper namespace= "com.smbms.dao.ICityDao" > <resultMap id= "CityAndChildCitysMapper" type= "City" > <id column= "cid" property= "cid" ></id> <result column= "cname" property= "cname" /> <result column= "pid" property= "pid" /> <collection property= "childCitys" ofType= "City" select= "getCityAndChildCitysMutilSQL" column= "cid" > <id column= "cid" property= "cid" ></id> <result column= "cname" property= "cname" /> <result column= "pid" property= "pid" /> </collection> </resultMap> <select id= "getCityAndChildCitys" resultMap= "CityAndChildCitysMapper" > select * from city where cid=#{cid} </select> <select id= "getCityAndChildCitysMutilSQL" resultMap= "CityAndChildCitysMapper" > select * from city where pid=#{cid} </select> </mapper> |
测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package com.smbms.test; import com.smbms.dao.ICityDao; import com.smbms.entity.City; import com.smbms.util.MybatisUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class DGTest { @Test public void getCityAndChildCitysTest(){ SqlSession sqlSession = MybatisUtil.getSqlSession(); ICityDao mapper = sqlSession.getMapper(ICityDao. class ); City city = mapper.getCityAndChildCitys( 410000 ); System.out.println(city.toString()); } } |
oracle使用resultMap实现高级结果映射的更多相关文章
- 使用resultMap实现高级结果映射
使用resultMap实现高级结果映射 resultMap的属性: 1.属性 id:resultMap的唯一标识.type:resulMap的映射结果类型(一般为Java实体类).2.子节点 id:一 ...
- mybatis框架-使用resultMap实现高级结果映射,collection属性的使用
需求:获取指定用户的用户信息和地址列表 修改user实体类 添加集合的引用. /** * 根绝用户id,获取该角色下的地址信息 * @param userID * @return */ public ...
- mybatis框架-使用resultMap实现高级结果映射,association属性
需求:查询数特定角色下的所有用户列表 首先需要在在User类中引用Role类,因为引用了复杂的数据类型,所以要使用association属性进行映射,其实起主要作用的还是resultMap属性. /* ...
- Mybatis 高级结果映射 ResultMap Association Collection
在阅读本文章时,先说几个mybatis中容易混淆的地方: 1. mybatis中的列不是数据库里的列而是查询里的列,可以是别名(如 select user_name as userName,这时col ...
- mybatis之高级结果映射
先贴一句官方文档内容 如果世界总是这么简单就好了. 正如官方文档所说:如果一切都是这么简单,那该多好啊,但是实际上,我们面对的是复杂的对象,就是对象里有对象,有列表对象,总之五花八门的对象.这个时候我 ...
- 转:mybatis 高级结果映射(http://blog.csdn.net/ilovejava_2010/article/details/8180521)
高级结果映射 MyBatis的创建基于这样一个思想:数据库并不是您想怎样就怎样的.虽然我们希望所有的数据库遵守第三范式或BCNF(修正的第三范式),但它们不是.如果有一个数据库能够完美映射到所有应用程 ...
- 使用 resultMap 实现高级结果集映射
resultMap 的基本配置项 属性 id 属性:resultMap 的唯一标识,此 id 值用于 select 元素 resultMap 属性的引用. type 属性:表示该 resultMap ...
- Mybatis高级结果映射
有时侯,我们用SQL取得的结果需要映射到类似Map<key, Bean>这样的数据结构中或是映射到多个实体类中时,我们就需要使用到resultMap.下面用3个例子说明Mybatis高级结 ...
- MyBatis从入门到精通(第6章):MyBatis 高级查询->6.1.2高级结果映射之一对多映射
jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.IntelliJ IDEA 2019.3.1 本章主要包含的内容为 MyBatis 的高级结果映射,主要处理数据库一对一.一对多的 ...
随机推荐
- 报表平台发行说明(V0.0.0.1)
开发周期:共20天(2019-11-04~2019-11-23) 发布日期:2019-11-23 主要功能说明: 1 整体功能技术选型,前端(html+CSS+javascript)+Web API ...
- ESLint 使用指南
ESLint 官方文档 About 页面分 About 和 Philosophy 两个部分对 ESLint 做了介绍,简洁明了,值得一读. 借助 ESLint,可将 静态代码分析 和 问题代码协助修复 ...
- VSCode部署JAVA项目出现The type java.lang.Object cannot be resolved
如题,出现的原因是这样的:我将mac系统上的eclipse项目复制到了ubuntu环境下,通过vscode的远程功能连接ubuntu. 然后项目上就出现了各种报错,显示The type java.la ...
- [Java]对double变量进行四舍五入,并保留小数点后位数
1.功能 将double类型变量进行四舍五入,并保留小数点后位数 2.代码 import java.math.BigDecimal; import java.math.RoundingMode; im ...
- spark.streaming.kafka.maxRatePerPartition的理解
spark.streaming.kafka.maxRatePerPartition设定对目标topic每个partition每秒钟拉取的数据条数. 假设此项设为1,批次间隔为10s,目标topic只有 ...
- H5_0012:js事件冒泡和捕获
捕获(capture)和冒泡(bubble)是事件传播过程中的两个概念, 比如用户单击某个元素, 但由于元素处于父元素内, 该父元素又处于document对象中, document对象又处于windo ...
- Dubbo服务暴露分析
Dubbo的服务暴露是一个重要的特性,了解其机制很重要.之前有很多人写了有关的源代码分析,在本文中不再重新分析.官方文档中的一篇写的就很好,本文主要是有关内容进行补充与总结. 传送门:服务导出 为什么 ...
- jQuery---弹幕效果
弹幕效果 <!doctype html> <html> <head> <meta charset="utf-8"> <titl ...
- laravel框架api路由
Route::group(['namespace' => 'Api'], function (){ Route::any('send','SmsController@send'); }); gr ...
- Codeforces Round #619 (Div. 2) A~D题解
最近网课也开始了,牛客上一堆比赛题目也没补,所以就D题后面的也懒得补了 A.Three String 水题 #include <cstdio> #include <cstring&g ...