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、使用Java图形界面组件设计软件,界面如图所示。2、软件能够满足基本的“加、减、乘、除"等运算要求。3、程序代码清晰,
- 一、导航栏UINavigationBar1、导航栏的使用在iOS开发中,我们通常会使用导航控制器,导航控制器中封装了一个UINavigati
- 什么是OKHttp一般在Java平台上,我们会使用Apache HttpClient作为Http客户端,用于发送 HTTP 请求,并对响应进
- 方式一:if语句控制// 例如:Column( mainAxisAlig
- 在logback.xml中加上该配置,包名如:com.xxx<logger name="packageName"
- Android手势解锁本文讲述的是一个手势解锁的库,可以定制显示隐藏宫格点、路径、并且带有小九宫格显示图,和震动!让你学会使用这个简单,高效
- 一、项目要求实现一个通讯录通讯录可以用来存储100个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:添加联系人信息删除指定
- 目前很多业务使用微服务架构,服务模块划分有这2种方式:服务功能划分业务划分不管哪种方式,一次接口调用都需要多个服务协同完成,其中一个服务出现
- 多数据源配置首先是配置文件这里采用yml配置文件,其他类型配置文件同理我配置了两个数据源,一个名字叫ds1数据源,一个名字叫ds2数据源,如
- 开发 Web 应用的思路实现一个简单的 JSP/Servlet。搭建创建 Web 应用工程的环境。创建 Web 应用工程。Web 应用工程的
- 一、思路1.定义一个toFind变量来传入要查找的元素2.遍历整个顺序表并判定当前下标的元素等不等于toFind3.如果等于就返回一个tru
- @Value注解读取yml中的map配置网上查了好多资料,都是.properties文件中读取,而且又是几个人抄来抄去,找了半天功夫不负有心
- 知识点:1.使用SQL Helper创建数据库2.数据的增删查改(PRDU:Put、Read、Delete、Update)背景知识:上篇文章
- 代码入下:import java.io.*; public class Practice { publ
- 前言前阵子有同学反馈Flutter中的http请求无法通过fiddler抓包,作者喜欢使用Charles抓包工具,于是抽时间写了个小demo
- 需求说明实际操作过程中,从D盘根目录下的ak.txt读取文件写入D盘根目录下的hello.txt文件内实现思路写两个方法,一个用于读取目标文
- 效果展示在实际项目当中我们经常看到如下各种剪裁形状的效果,Flutter 为我们提供了非常方便的 Widget 很轻松就可以实现,下面我们来
- 面试题1:说一下你对ReentrantLock的理解?ReentrantLock是JDK1.5引入的,它拥有与synchronized相同的
- 一、需求场景有时候我们需要在项目中使用一些静态资源文件,比如城市信息文件 countries.xml,在项目启动后读取其中的数据并初始化写进
- 打开首页,明显看到链接是https打头,https和http的通信协议差别,在于https安全性更高:http和https的差别很明显,二者