mapper中通过resultMap自定义查询结果映射
mybatis中使用resultType做自动映射时,要注意字段名和pojo的属性名必须一致,若不一致,则需要给字段起别名,保证别名与属性名一致。
使用resultMap做自定义结果映射,字段名可以不一致,并且可以指定要显示的列,比较灵活,应用也广泛。
<select id="getUserList" resultMap="userList" parameterType="User">
select u.*, r.roleName from smbms_user u, smbms_role r
where u.userName like connect ('%', #{userName}, '%')
and u.userRole=#{userRole} and u.userRole=r.id
</select> <resultMap id="userList" type="User">
<result property="id" column="id"/>
<result property="userCode" column="userCode"/>
<result property="userName" column="userName"/>
<result property="phone" column="phone"/>
<result property="birthday" column="birthday"/>
<result property="gender" column="gender"/>
<result property="userRole" column="userRole"/>
<result property="userRoleName" column="roleName"/>
</resultMap>
在上述代码中,进行联表查询,可得到用户对应角色的中文名称
resultMap元素用来描述如何将结果集映射到java对象,此处使用resultMap对象展示所需的必要字段进行自由映射,特别是当数据库的字段名和pojo中的属性名一致的情况下。
result子节点用于标识一些简单属性,其中column属性表示从数据库中查询的字段名,property则表示查询出来的字段对应的值赋给实体对象的哪个属性。
在mybatis进行查询映射的时候,查询出来的每个字段值都放在一个对应的Map里面,其中键是字段名,值则是其对应的值。当select元素提供的返回类型属性是resultType的时候,mybatis会将Map里面的键值对取出赋值给resultType所指定的对象对应的属性(即调用对应的对象的属性的setter方法进行填充)。正因为如此,当使用resultType的时候,直接在后台就能接收到其对应的对象属性值。
由此看出,其实mybatis的每个查询映射的返回类型都是restultMap,只是当我们提供的返回类型属性是resultType的时候,mybatis会自动把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型属性是resultMap的时候,因为Map不能很好的表示领域模型,就需要通过进一步的定义把它转化为对应的实体对象。
在mybatis的select元素中,resultType和resultMap的本质上是一样的,都是Map数据结构。二者不能同时存在。
resultMap自动映射级别
上述代码中,查询出了smbms_user表的所有属性,虽然resultMap中映射关联了部分属性,但是没有在resultMap中做映射关联的属性(字段名一致的属性)在后台也能正常输出。这跟resultMap的自动映射级别有关,默认的映射级别为PARTIAL。若想让没有在resultMap中做映射关联的属性不输出,则需要设置mybatis对于resultMap的自动映射级别(autoMappingBehavior)为NONE,即禁止自动匹配。如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC
"-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration>
<settings>
<setting name="autoMappingBehavior" value="NONE"/>
</settings>
</configuration>
mapper中通过resultMap自定义查询结果映射的更多相关文章
- JEECG中datagrid方法自定义查询条件
自定义加添加查询条件的用法: CriteriaQuery cq = new CriteriaQuery(EquipmentEntity.class, dataGrid); //查询条件组装器 org. ...
- resultMap自定义映射---8.3.1. 解决列名(表中的字段名称)和实体类中的属性名不一致
1.1.1.1. 步骤一:将驼峰匹配注释掉 --------------测试完成后仍然 回来开启 其他地方可能用到 一旦注释掉驼峰匹配,那么再通过queryUserById查询的结果中,用 ...
- mybatis的mapper代理,SqlMapConfig.xml中配置,输入和输出映射使用案例
public class User { private int id; private String username;// 用户姓名 private String sex;// 性别 private ...
- Spring Boot入门系列(十七)整合Mybatis,创建自定义mapper 实现多表关联查询!
之前讲了Springboot整合Mybatis,介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.mybatis 插件自动生成的mappe ...
- 通过视图实现自定义查询<持续完善中。。。>
目前实现: ----普通查询路径 /viewShow/viewShow/list.htm ----Echarts查询路劲 /viewShow/viewShow/echarts.htm 1.自定义查询条 ...
- 关于EF中实体和数据表以及查询语句映射的问题
关于EF中实体和数据表以及查询语句映射的问题? 很多人在使用的时候分不清楚 实体字段应该少于等于(数据库中的表字段或者SQL查询中的临时字段).这样在查询或者添加修改都不会出现问题 如果实体的字段大于 ...
- mybatis - 基于拦截器修改执行语句中的ResultMap映射关系
拦截器介绍 mybatis提供了@Intercepts注解允许开发者对mybatis的执行器Executor进行拦截. Executor接口方法主要有update.query.commit.rollb ...
- Mybatis学习笔记8 - resultMap自定义结果集映射规则
一.resultMap自定义结果集映射规则 示例如下: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; public ...
- Mybatis框架中实现双向一对多关系映射
学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...
随机推荐
- 关于Environment类的使用
import org.springframework.core.env.Environment; EnvironmentAware 如何引用这个类1.可以通过 @Autowired织入Environm ...
- 12、label控件
label可以展示文本.超链接.图片.动图 新建项目Demo526,QMainWindow,勾选ui.将image文件夹(有2个图片)拷贝到项目路径下. [添加图像资源文件] 项目Demo526处,右 ...
- #5 DIV2 A POJ 3321 Apple Tree 摘苹果 构建线段树
Apple Tree Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25232 Accepted: 7503 Descr ...
- TensorFlow线性回归
目录 数据可视化 梯度下降 结果可视化 数据可视化 import numpy as np import tensorflow as tf import matplotlib.pyplot as plt ...
- vue-preview 缩略图
如果我们在 vue 中想使用缩略图的话,可以使用 vue-preview 的插件 小图的缩略 大图的样式 使用方法:vue-preview 下 载: npm i vue-preview 使用方法 ...
- 全面解读php-开发环境及配置
一.版本控制软件 1.集中式 (CVS和 SVN) 中间有一个中央服务器,所有的客户机都会把版本信息上传到中央服务器里,版本信息只在中央服务器里保存,当我们去上传或者下载的时候 ,都是从中央服务器来连 ...
- linux挂载问题
说明 Linux系统在使用光盘.软盘或U盘时,必须先执行挂载(mount)命令. 挂载命令会将这些存储介质指定成系统中的某个目录,以后直接访问相应目录即可读写存储介质上的数据. 挂载光盘 mount ...
- Oracle非分区索引,全局分区索引和本地分区索引。
1.如果按照索引是否分区作为划分依据,Oracle 的索引类型可以分为非分区索引,全局分区索引和本地分区索引. 2.创建演示实例 --创建非分区表create table test_partition ...
- 获取当前线程状态--Thread类
String msgToPrint = Thread.currentThread().getStackTrace()[3] .getMethodName(); 就是调用时的方法名. 其中使用的Thre ...
- 如何解决错误【selenium.common.exceptions.SessionNotCreatedException】
如何解决错误[selenium.common.exceptions.SessionNotCreatedException] [问题起因] 2018年12月26日晚,启动我的pycharm准备学习s ...