Mybatis中resultMap的Colum和property属性详解
作者:爱吃小牛奶 发布时间:2023-09-16 11:17:33
resultMap的Colum和property属性
1: resultMap标签
当我们的数据库字段与实体类的属性不一致时,就需要使用该标签进行一一映射。
2:使用情况
2.1 简单查询
<resultMap id="这个resultMap的id" type="对应实体类的全限定类名">
<id column="id" property="id"></id>
<result column="username" property="name"></result>
<result column="author" property="author"></result>
<result column="number" property="number"></result>
.............
colum对应数据库的字段,property对应实体类的属性
</resultMap>
他表示对数据按照什么样的规则进行一一映射,如:
<!-- 根据编号查找书籍-->
<select id="SelectbooksByNumber" parameterType="String" resultMap="名字">
select * from book where number=#{number};
</select>
上面的查找结果按照你给的resultMap的对应规则进行映射。
2.2 一对一
需要注意的是你sql语句查出来的列名称是别名,那你就要填别名,就不是你数据库的列名称了。
返回结果:User
User中含有Role属性集合 一对多的关系
JavaType是用来指定pojo中属性的类型
2.3 一对多
同样和一对一 一样需要注意列名称。
返回结果:User
User中含有Role属性集合 一对多的关系
JavaType是用来指定pojo中属性的类型,
ofType指定的是 映射到list集合属性中pojo的类型
其中Role属性集合为List
pojo
public class User implements Serializable {
private Integer id;
private String username;
private String password;
private String salt;
private Integer status; // 用户状态 0: 正常 1:禁用 2:锁定
//角色集合
private List<Role> roles;
role表
user表
user与role的映射表
resultMap对column和property的理解
首先,先看看这张图,看能不能一下看明白:
select元素有很多属性(这里说用的比较多的)
id
:命名空间唯一标识,可以被用来引用这条语句parameterType
:将会传入这条语句的参数类的完全限定名或者别名resultType
:从这条语句要返回的期望类型的类的完全限定名或别名(这里注意下集合类型,应该是集合可以包含的类型,不能是集合本身),重要:使用resultType或resultMap,但不能同时使用。resultMap
:命名引用外部的resultMap,其名称要和外部的resultMap元素的ID名称一致,用于映射其结果到实体类指定对象中。
什么时候我们知道使用resultMap,什么时候又使用resultType呢?
①当去select一张表时,可以使用resultType,这些情况下,MyBatis会在幕后自动创建一个ReusltMap,基于属性名来映射到JavaBean属性上
②所以在使用resultMap时,就必须要写上resultMap相对应的xml
③为了方便我们开发出错,在没有特别要求的情况下,column名可以完全和property名称一致,否则当我们没有对应上的时候,数据库匹配不到,会将某某参数值变为大写,导致我们本来获取小写的参数名,结果没有获取到,后台报错,得不偿失啊!
最后说下
sql中比如,有 andm.id = #{id ,jdbcType=VARCHAR } 要标明jdbcType为什么呢?
解释:
如果你映射了一个javabean,MyBatis通常可以断定类型(项目里好多都要写,我也不知道为啥),然而,如果你映射到的是比如:HashMap,那么应该明确指定的jdbcType来保证所需的行为
来源:https://blog.csdn.net/qq_44462054/article/details/102884372


猜你喜欢
- 1 引言在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchro
- 一、集合概述数组其实就是一个集合。集合实际上就是一个容器。可以来容纳其它的数据。二、集合在开发中的应用集合是一个容器,是一个载体,可以一次容
- 引言本文我们来分析NameServer相关代码,在正式分析源码前,我们先来回忆下NameServer的功能:NameServer是一个非常简
- C++对string进行大小写转换操作方法方法一:使用C语言之前的方法,使用函数,进行转换#include <iostream>
- 前言Java虽然五脏俱全但总有软肋,譬如获取CPU等硬件信息,当然我们可以通过JNI调用C/C++来获取,但对于对C/C++和Windows
- 需求描述一个五子棋游戏,能实现双方黑白对决,当一方获胜时给出提示信息,利用GUI界面实现项目结构如下图一、实体FiveChess类提供五子棋
- 本文讲述了Android编程中关于单线程模型的理解与分析。分享给大家供大家参考,具体如下:当一个Android程序启动时,Android系统
- 一、什么是IO流输入流和输出流。输入流:数据从数据源(文件)到程序(内存)的路径输出流:数据从程序(内存)到数据源(文件)的路径二、常用的文
- 使用Collections.sort对中文进行排序使用collections.sort(List list, Comparator <
- 本文实例为大家分享了AndroidStudio简单实现BMI计算的具体代码,供大家参考,具体内容如下xml代码```xml<TextV
- 本文实例为大家分享了java实现多个文件压缩的具体代码,供大家参考,具体内容如下需要用到的ant.jarpackage util;impor
- 问题我们发现,之所以我们现在离不开 xml 配置文件,是因为我们有一句很关键的配置:<!-- 告知spring框架在,读取配置文件,创
- 一、作用及种类UML类图建模语言或标准建模语言类的属性、操作中的可见性使用+、#、-分别表示public、protected、private
- 记录一下微信第三方实现登录的方法。还是比较简单。一、必要的准备工作1.首先需要注册并被审核通过的微信开放平台帐号,然后创建一个移动应用,也需
- 一、Java把这些不同来源和目标的数据都统一抽象为数据流。Java语言的输入输出功能是十分强大而灵活的。在Java类库中,IO部分的内容是很
- Pattern类定义public final class Pattern extends Object implementsSerializ
- 先来看看下面List<T>泛型集合的排序例子:using System;using System.Collections.Gen
- Java 序列化和反序列化实例详解在分布式应用中,对象只有经过序列化才能在各个分布式组件之间传输,这就涉及到两个方面的技术-发送者将对象序列
- 有些手机在电话接通后会有振动提示,这有个好处就是可以等到接通后再放到耳边接听,减少辐射。本文就讲讲如何在Android手机中实现这种接通电话
- 前言任何一个服务如果没有监控,那就是两眼一抹黑,无法知道当前服务的运行情况,也就无法对可能出现的异常状况进行很好的处理,所以对任意一个服务来