MyBatis之输入(parameterType)与输出(resultType、resultMap)映射

MyBatis之输入(parameterType)与输出(resultType、resultMap)映射

在MyBatis中,我们通过parameterType完成输入映射(指将值映射到sql语句的占位符中,值的类型与dao层响应方法的参数类型一致),通过resultType完成输出映射(从数据库中输出,通过dao层的方法查询到的数据输出到pojo对象中)。 注意输入与输出都是相对于数据库的。接下来我们先谈谈输入映射。工程目录结构如下:


1.输入映射parameterType

通过parameterType传入简单类型或对象,我们之前讲过了,接下来我们要讲的是parameterType传递pojo包装对象。可以定义pojo包装类型扩展mapper接口输入参数的内容。

看下我们的需求:定义查询条件查询用户信息,需要向statement输入查询条件,查询条件可以有user信息、商品信息等等。

首先我们在domain包下创建UserCustom类并继承User,


UserCustom类用于对User属性进行扩展(例如User中只有用户信息,而我们可以在UserCustom中加入商品信息),然后再创建User的包装类UserQueryVo.java:


UserMapper.xml中添加如下配置信息:


UserMapper.java中添加方法:


然后便可以进行测试:


可能出现的异常:如果在parameterType中指定了错误的属性名时会出现如下异常:


2.输出映射

输出映射有resultType和resultMap,他们都是指定输出结果的类型(pojo、简单类型、hashmap…),并将sql查询结果映射为java对象 。

2.1resultType

借用上述parameter传递包装pojo对象的知识(不用parameter传递包装pojo对象的知识也行),我们来谈谈用resultType输出简单类型。UserMapper.xml文件中添加如下配置:


然后在UserMapper.java中添加如下方法:


测试:


这里因为查询的记录结果集为一条记录且该记录只有1列,所以我们使用的是返回简单类型。

使用resultType时我们应该注意:sql查询的列名要和resultType指定pojo的属性名相同,指定相同属性方可映射成功,如果sql查询的列名要和resultType指定pojo的属性名全部不相同(或是部分不相同),则映射到pojo对象中的对应属性为null。例如有时候我们不需要查询select * from user where id = ?而是select username,address _address where id = ? 此时我们给查询的address列名给了一个别名_address,这样我们通过查询表中address的数据然后在将它映射到User对象时,该对象的address属性就为null,即没将从表中查询到的address数据映射到user对象的address属性中。

此时resultMap就出现了。如果sql查询列名和最终要映射的pojo的属性名不一致,使用resultMap就可以将列名和pojo的属性名做一个对应关系 (列名和属性名映射配置)。

2.2resultMap

使用resultMap需要在UserMapper.xml中进行配置:



然后在UserMapper.xml中使用它:


UserMapper.java文件中:


测试类代码:


运行测试类发现,即使我们查询的列名与User对象的属性不一样,但是我们的确映射成功了。




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java几种遍历方式以及效率对比

几种遍历方式&#xff1a; /*** */ package effectiveUse;import java.util.Iterator; import java.util.List;/*** author weijie** 2019年4月13日*/ public class ForEachList {/** 方式1&#xff1a;开始时候*/public void countSizeForEachList(List<Integer> list)…

MyBatis之优化MyBatis配置文件中的配置

MyBatis之优化MyBatis配置文件中的配置 2017/9/30MyBatis配置文件很重要&#xff0c;首先我们来看看MyBatis配置文件中的内容和顺序: 文件目录结构如下: 1.<properties>属性定义 可以把一些通用的属性值配置在属性文件中&#xff0c;加载到mybatis运行环境内。例如创建d…

【转载保存】在python中如何用word2vec来计算句子的相似度

在python中&#xff0c;如何使用word2vec来计算句子的相似度呢&#xff1f; 第一种解决方法 如果使用word2vec&#xff0c;需要计算每个句子/文档中所有单词的平均向量&#xff0c;并使用向量之间的余弦相似度来计算句子相似度&#xff0c;代码示例如下&#xff1a; import …

Spark介绍

Spark Spark 是什么? Apache Spark?是用于大规模数据处理的快速和通用引擎. 速度:在内存中,运行程序比Hadoop MapReduce快100倍&#xff0c;在磁盘上则要快10倍. Apache Spark具有支持非循环数据流和内存计算的高级DAG执行引擎. 易用:可以使用Java&#xff0c;Scala&#…

MyBatis之使用resultMap实现高级映射

MyBatis之使用resultMap实现高级映射 2017/09/30对于数据库中对表的增删改查操作&#xff0c;我们知道增删改都涉及的是单表&#xff0c;而只有查询操作既可以设计到单表操作又可以涉及到多表操作&#xff0c;所以对于输入映射parameterType而言是没有所谓的高级映射的&#xf…

【转载保存】大型推荐系统架构图设计图

推荐系统架构&#xff1a;https://www.cnblogs.com/kobedeshow/p/3569525.html 推荐系统介绍和基本架构流程:https://blog.csdn.net/LHWorldBlog/article/details/80822719

MyBatis之查询缓存

MyBatis之查询缓存 2017/09/30正如大多数持久层框架一样&#xff0c;MyBatis同样也提供了对查询数据的缓存支持。今后我们要学习的SpringMVC框架属于系统控制层&#xff0c;它也有它的缓存区域&#xff0c;对响应的jsp页面进行缓存&#xff1b;Spring属于系统业务层&#xff0c…

Spark和机器学习整合

链接&#xff1a;https://www.cnblogs.com/charlesblc/p/6109551.html

MyBatis3.x和Spring3.x的整合

MyBatis3.x和Spring3.x的整合 2017/10/021.mybatis和spring整合的思路 1.让spring管理SqlSessionFactory 2.让spring管理mapper对象和dao 使用spring和mybatis整合开发mapper代理及原始dao接口。 自动开启事务&#xff0c;自动管理sqlsession 3.让spring管理数据源(即数据库连接…

【转载保存】匿名内部类中this的使用

转载链接&#xff1a;https://www.cnblogs.com/yaowen/p/9471389.html 代码使用模板使用&#xff1a; package test;public class A extends B {public String toString() {return "A";}public static void main(String[] args) {A a new A();a.say();A.AIn aa a…

特征选择

特征选择是特征工程中的重要问题&#xff08;另一个重要的问题是特征提取&#xff09;&#xff0c;坊间常说&#xff1a;数据和特征决定了机器学习的上限&#xff0c;而模型和算法只是逼近这个上限而已。由此可见&#xff0c;特征工程尤其是特征选择在机器学习中占有相当重要的…

交叉验证

sklearn中的交叉验证&#xff08;Cross-Validation&#xff09; sklearn是利用python进行机器学习中一个非常全面和好用的第三方库&#xff0c;用过的都说好。今天主要记录一下sklearn中关于交叉验证的各种用法&#xff0c;主要是对sklearn官方文档 Cross-validation: evaluati…

Jmater参数说明

样本数目&#xff1a;运行时得到的取样器响应结果个数 最新样本&#xff1a;最近一个取样器结果的响应时间 平均&#xff1a;所有取样器结果的响应时间平均值 偏离&#xff1a;所有取样器结果的响应时间标准差 吞吐量&#xff1a;每分钟响应的取样器结果个数 中值&#xf…

【转载保存】java静态方法继承与保存的问题

结论&#xff1a;java中静态属性和静态方法可以被继承&#xff0c;但是没有被重写(overwrite)而是被隐藏. 原因&#xff1a; 1). 静态方法和属性是属于类的&#xff0c;调用的时候直接通过类名.方法名完成对&#xff0c;不需要继承机制及可以调用。如果子类里面定义了静态方法…

机器学习名词解释

1. 损失函数 损失函数是用来估量你模型的预测值f(x)与真实值Y的不一致程度&#xff0c;它是一个非负实值函数,通常使用L(Y, f(x))来表示&#xff0c;损失函数越小&#xff0c;模型的鲁棒性就越好。损失函数是经验风险函数的核心部分&#xff0c;也是结构风险函数重要组成部分。…

【转载保存】推荐ApacheCN开源的一个机器学习路线图

转载&#xff1a;https://mp.weixin.qq.com/s/EMWFFPsaKaGc8FO1g-htzg 推荐ApacheCN开源的一个机器学习路线图 原创&#xff1a; 机器学习初学者 机器学习初学者 今天 推荐一个ApacheCN开源的一个机器学习路线图&#xff1a; https://github.com/apachecn/AiLearning 注意…

CNN(Convolutional Neural Network) 的基础

卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;简称CNN&#xff09;&#xff0c;是一种前馈神经网络&#xff0c;人工神经元可以响应周围单元&#xff0c;可以进行大型图像处理。卷积神经网络包括卷积层和池化层。 卷积神经网络是受到生物思考方式启发的ML…

【转载保存】java 23种设计模式 深入理解

以下是学习过程中查询的资料,别人总结的资料,比较容易理解(站在各位巨人的肩膀上,望博主勿究) 创建型 抽象工厂模式 http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html 工厂方法 http://www.cnblogs.com/java-my-life/archive/2012/03/25/2416227.html 建…

语音识别学习日志 2019-7-13 语音识别基础知识准备 1{语音基础知识}

线性预测 线性预测(linear prediction)根据随机信号过去的p个已知抽样值序列为Sn-1&#xff0c;Sn-2&#xff0c;…Sn-p&#xff0c;预测现时样值Sn的估计值的方法。预测公式是一个线性方程&#xff0c;所以这种预测称为线性预测。 声音的构成 声音频率决定音调&#xff1b;声…

【转载保存】mysql不设置主键使用自增长ID方法

MySQL 每张表只能有1个自动增长字段&#xff0c;这个自动增长字段即可作为主键&#xff0c;也可以用作非主键使用&#xff0c;但是请注意将自动增长字段当做非主键使用时必须必须为其添加唯一索引&#xff0c;否则系统将会报错。例如&#xff1a; 1.将自动增长字段设置为主键。…