ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

mybatis_ResultMap

2021-08-27 15:31:51  阅读:152  来源: 互联网

标签:实体类 List ResultMap empMap mybatis deptno SELECT 属性


1、数据库字段信息和对象属性不一致

01、我觉得还是要有必要说一下

​ 1,字段信息(数据表中的类名)

​ 2,对象属性(实体类中的属性)

02、若不一致的字段较少,可以在sql语句使用别名处理
​ SELECT 字段1,
​ 数据库的字段2 AS 实体类的属性
​ FROM 表名

SELECT  sid , sName AS name FROM stu

03、若不一致的字段较多,可以使用resultMap

<resultMap type="Stu" id="stuMap"> 
    	(type: 中放的是实体类的全线定名,如果有别名可以使用别名)
    	(id: 给这哥ResultMap起个名字,但是要唯一)
		<id property="sid" column="sid"/>
    	(property: 中方的是实体类中的id属性)
    	(column: 中方的是数据库表中的主键)
		<result property="name" column="sname"/>
    	(property: 中方的是实体类中的name属性)
    	(column: 中方的是数据库表中对应的字段)
</resultMap>

<select id="selectByMap" resultMap="stuMap">
    		(id: 还是接口中的方法名)
    		(resultMap: 这个时候就不能在使用resultType了
    				因给使用 resultMap 里面给的是你的 <resultMap>上的id值)
			SELECT * FROM stu		
</select>

2、复杂的联合查询,可以自由控制结果

21、一对多:一个部门有多个用户

​ 1、在实体类中添加:用户集合,并且添加了封装方法

/*我的是emp和dept表,上面那个是stu表*/

private List<Emp> empMap;

public List<Emp> getEmpMap() {
	return empMap;
}
public void setEmpMap(List<Emp> empMap) {
	this.empMap = empMap;
}

​ 2、在emp接口中添加、通过部门id 查询

List<Emp> selectById(@Param("deptno") Integer deptno);

​ 3、在对应的映射文件里实现方法

<select id="selectById" resultMap="entity/Emp.java">
    					(resultMap中放的是实体类路径)
		SELECT * FROM emp WHERE deptno = #{deptno}
</select>

​ 4、在dept接口中放 查询全部的方法

List<Dept> selectAll();

​ 5、在dept实现类中

注: 如果在resultMap中使用了collection 标签就必须把所有实体类中的属性多要添加上 result标签

​ 方法一

<resultMap type="Dept" id="deptMaps">
	<id property="deptno" column="deptno"/>
	<result property="dname" column="dname"/>
	<result property="loc" column="loc"/>
	<collection property="empMap" column="deptno"
				select="mapper.EmpMapper.selectById"/>
    		(property: 对应的是你在dept中封装的 对象集合)
    		(column: 数据库中的外键名 [A表中的列名和B表中的列名])
    		(select: 放的是你emp接口中的通过id查寻的方法
    				 一定要是接口的全线定名点你的方法名)
</resultMap>
		
<select id="selectAll" resultMap="deptMaps">
	SELECT * FROM dept
</select>

​ (以上是需要两个表的操作)

方法二 (在一个表中操作)

​ 实体类:

private List<Emp> empMap;

public List<Emp> getEmpMap() {
	return empMap;
}
public void setEmpMap(List<Emp> empMap) {
	this.empMap = empMap;
}

​ 接口中:

List<Dept> selectAllDeptMap();

​ 映射文件中:


<resultMap type="Dept" id="deptMap">
	<id property="deptno" column="deptno"/>
	<result property="dname" column="dname"/>
	<result property="loc" column="loc"/>
	(在 collection 中放的是第二张表的所有属性)
	<collection property="empMap" ofType="Emp">
		<id property="empno" column="empno" />
		<result property="ename" column="ename"/>	
		<result property="job" column="job"/>	
		<result property="mgr" column="mgr"/>	
		<result property="hiredata" column="hiredata"/>	
		<result property="sal" column="sal"/>
		<result property="COMM" column="COMM"/>	
		<result property="deptno" column="deptno"/>	
	</collection>
</resultMap>
<select id="selectAllDeptMap" resultMap="deptMap">
	SELECT 			   		d.*,e.empno,e.ename,e.job,e.mgr,e.hiredata,e.sal,e.COMM,e.deptno
	FROM emp e RIGHT JOIN dept d ON  e.deptno = d.deptno 
</select>

3、配置自动映射级别

<setting name="autoMappingBehavior" value="PARTIAL"/>

​ 级别:

​ NONE:禁止自动匹配(必须手动匹配)

​ PARTIAL:默认,会自动匹配属性

​ (就像我在第一个写的例子中我就没有把所有的字段写全)

​ (除了resultMap中包含了collection、association不能自动匹配,必须每个列都 需要手动匹配)

​ FULL:自动匹配所有属性

标签:实体类,List,ResultMap,empMap,mybatis,deptno,SELECT,属性
来源: https://www.cnblogs.com/CaoJunGuYe/p/mybatis_ResultMap.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有