mybatis中xml文件容易搞混的属性

目录

  • 第一章、
    • 1.1)MyBatis中resultMap标签
    • 1.2)MyBatis的resultType
    • 1.3)MyBatis的parameterType
    • 1.4)type属性
    • 1.5)jdbcType属性
    • 1.6)javaType属性
    • 1.7)ofType属性

友情提醒:
先看文章目录,大致了解文章知识点结构,点击文章目录可直接跳转到文章指定位置。

第一章、

1.1)MyBatis中resultMap标签

resultType和resultMap是不能同时存在的
介绍:在MyBatis当中,查询结果集被封装为Java对象,可以通过resultType,也可以通过resultMap,在resultMap当中描述了数据库表的列与Java对象的属性之间的对应关系。在映射关系中,还可以通过resultMap的typeHandler设置实现查询结果值的类型转换。ResultMap不仅可以解决简单的列与属性的映射问题,还可以处理复杂的查询结果,比如联合查询、子查询等。对于这些复杂的查询结果,可以在ResultMap中使用子元素来处理,比如<collection>元素用于处理一对多、一对一的关系,<association>元素用于处理与关联对象的关系。
作用:用于将数据库查询的结果映射到Java对象。ResultMap的主要目的是解决数据库复杂查询和Java对象之间的映射问题。

<resultMap id="userResult" type="com.example.User">  <result property="id" column="id"/>  <result property="name" column="name"/>  <result property="email" column="email"/>  
</resultMap>

1.2)MyBatis的resultType

resultType和resultMap是不能同时存在的
resultType用来指定查询结果集返回的数据类型,当一个select语句查询之后得到结果集,可以使用 resultType 属性来指定查询结果应映射到的 Java 类型。结果集的列名需要和java实体类的属性名一致,不一致的可以使用as关键字给列起别名。
例如:

<select id="getDeviceInfoByDeviceId" resultType="Map">select userCount as usercount,fingerCount as fingercount,faceCount as facecount,attRecordCount as recordcount,lastOnline,state as statusfrom DeviceInfo where deviceId = #{deviceId} and tb_isDelete = 0;
</select>

例如:返回值为int,resultType为int ,java.lang.Integer也可以

<mapper namespace="com.xx.xx.dao.UserMapper"><!-- 返回值为int,resultType为int ,java.lang.Integer也可以--><select id="countUser" resultType="int">select count(*) from user</select>
</mapper>

例如,假设你有一个名为 User 的 Java 类,其中包含 id、name 和 age 等属性。你可以在 MyBatis 的 XML 映射文件中编写以下查询语句:

<select id="getUser" resultType="com.example.User">  SELECT id, name, age FROM users WHERE id = #{id}  
</select>

在上面的示例中,resultType 属性被设置为 com.example.User,这意味着查询结果的一行记录数据将被映射到resultType指定类型的对象 User 类。查询结果中的每一行数据将自动填充到 User 对象中,其中 id 列映射到 User 类的 id 属性,name 列映射到 User 类的 name 属性,以此类推。

resultType和resultMap的区别
resultType不需要配置,但是resultMap要配置一下,将数据库表的字段名和实体bean对象类的属性名一一对应关系,这样的话就算你的数据库的字段名和你的实体类的属性名不一样也没有关系,都会给你对应的映射出来,所以resultMap要更强大一些。
还有一个和resultType不同的地方在于resultMap可以用在复杂联合查询上,而resultType不可以。

1.3)MyBatis的parameterType

指定输入参数类型,mybatis通过parameterType属性用来指定参数类型,parameterType属性是专门用来给sql语句占位符#{}传值的,底层原理使用了反射机制,#{}的大括号当中需要提供实体类的属性名,底层使用属性名拼接get方法来获取属性值,将属性值传递给sql语句。parameterType传输单个简单类型值,${}括号中只能是value。从输入对象中获取参数值拼接在sql中。
这个属性在<insert>、<update>、<delete>和<select>等映射标签中都有使用。通过指定parameterType属性,MyBatis可以获取到输入参数的值,并将其转换为对应的类型后传递给SQL语句执行。
例如,在如下示例中,我们将一个User对象插入到数据库中:parameterType属性指定了输入参数的类型为com.example.User,这意味着我们在执行插入语句时,需要传递一个User对象作为输入参数。MyBatis会根据User类中的属性,将数据库中的值映射到User对象中对应的属性。

<insert id="insertUser" parameterType="com.example.User">  INSERT INTO user(username, password) VALUES(#{username}, #{password})  
</insert>

除了使用类类型作为parameterType属性的值之外,还可以使用别名来指定输入参数的类型。例如,可以使用#{String}来指定输入参数为字符串类型。下面示例中,parameterType属性被设置为int,这意味着传递给查询方法的参数应该是一个整数。MyBatis将自动将传递的参数值绑定到SQL语句中的#{id}占位符。

<select id="getUserById" parameterType="int" resultType="com.example.User">  SELECT * FROM users WHERE id = #{id}  
</select>

1.4)type属性

MyBatis中的type属性用在不同的地方:
①定义SQL语句
当我们在mapper.xml中定义SQL语句时,type属性通常用来指定SQL语句的类型,比如select、insert、update、delete等。
例如:

<insert id="insertUser" parameterType="com.example.User" type="INSERT">  INSERT INTO user(username, password) VALUES(#{username}, #{password})  
</insert>

②用在<resultMap>
当你定义结果映射时,元素的type属性用于指定要映射到的Java类型。例如:

<resultMap id="userResult" type="com.example.User">  <result property="id" column="user_id"/>  <result property="name" column="user_name"/>  <result property="age" column="user_age"/>  
</resultMap>

③别名
为了减少冗余和提高可读性,你可以在MyBatis配置文件中定义别名,然后在映射文件中使用这些别名而不是完整的类名。例如:

<typeAliases>  <typeAlias alias="User" type="com.example.User"/>  
</typeAliases>

定义别名后,你可以在映射文件中使用别名:

<resultMap id="userResult" type="User">  ...  
</resultMap>

1.5)jdbcType属性

MyBatis包含的JdbcType类型,JdbcType类型和Java类型的对应关系主要有下面这些:

JDBC Type           Java Type  
CHAR                String  
VARCHAR             String  
LONGVARCHAR         String  
NUMERIC             java.math.BigDecimal  
DECIMAL             java.math.BigDecimal  
BIT                 boolean  
BOOLEAN             boolean  
TINYINT             byte  
SMALLINT            short  
INTEGER             INTEGER  
BIGINT              long  
REAL                float  
FLOAT               double  
DOUBLE              double  
BINARY              byte[]  
VARBINARY           byte[]  
LONGVARBINARY       byte[]  
DATE                java.sql.Date  
TIME                java.sql.Time  
TIMESTAMP           java.sql.Timestamp  
CLOB                Clob  
BLOB                Blob  
ARRAY               Array  
DISTINCT            mapping of underlying type  
STRUCT              Struct  
REF                 Ref  
DATALINK            java.net.URL

JdbcType类型的作用:MyBatis中的jdbcType属性用于指定参数或结果应该使用的JDBC类型。这个属性对于确保数据正确地传递给JDBC驱动程序非常重要。
在Mybatis明文建议在映射字段数据时需要将JdbcType属性加上,这样相对来说是比较安全的。

<resultMap id="BaseResultMap" type="com.bjpowernode.money.model.BidInfo"><id column="id" jdbcType="INTEGER" property="id" /><result column="loan_id" jdbcType="INTEGER" property="loanId" /><result column="uid" jdbcType="INTEGER" property="uid" /><result column="bid_money" jdbcType="DOUBLE" property="bidMoney" /><result column="bid_time" jdbcType="TIMESTAMP" property="bidTime" /><result column="bid_status" jdbcType="INTEGER" property="bidStatus" /></resultMap>

1.6)javaType属性

javaType:用于指定结果集中某列的Java类型。它可以是Java类的全限定名、别名或简单的类型。通过javaType可以告诉MyBatis将查询结果中的某一列映射为何种Java类型。
在这个例子中,javaType被分别设置为java.lang.String和java.lang.Integer,表示结果集中的name列对应的Java类型是String,age列对应的Java类型是Integer。

<resultMap id="userResultMap" type="com.example.User"><result column="name" property="name" javaType="java.lang.String"/><result column="age" property="age" javaType="java.lang.Integer"/>
</resultMap>

需要注意的是,parameterType和javaType主要用于参数类型和结果集某列的类型指定,而type和ofType主要用于整个结果集或集合元素的类型指定。它们可以根据具体情况灵活地使用,以便完成正确的类型映射和转换。

1.7)ofType属性

ofType:用于告诉MyBatis将查询结果转换为特定类型的集合。通常与resultType或resultMap配合使用。当查询结果是一个集合时,可以通过ofType指定集合中元素的类型。
ofType 示例:在这个例子中,resultType被设置为java.util.List,表示查询结果将被转换为List类型,而ofType被设置为com.example.User,表示List中的元素是User类型。

<select id="getAllUsers" resultType="java.util.List" ofType="com.example.User">SELECT * FROM users
</select>

本文创造有AI参与
参考文章如下:
MyBatis的jdbcType和javaType详解
【MyBatis】mybatis中parameterType、javaType、type和ofType

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

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

相关文章

【k8s】--insecure-registry详解 ( 访问仓库、https、http)

文章目录 一、--insecure-registry是什么二、如何使用--insecure-registry三、--insecure-registry的安全风险四、--insecure-registry的替代方案五、总结参考 一、–insecure-registry是什么 --insecure-registry是docker中用来设置与docker registry通信的安全限制的一个参数…

猫粮哪个牌子好又安全?好又安全的主食冻干猫粮牌子推荐

现在越来越多的铲屎官关注猫咪的食品选择&#xff0c;而冻干猫粮一直是热门话题。其中主食冻干的肉含量很高&#xff0c;富含猫咪成长所需的蛋白质、维生素等营养物质。而且冻干工艺还保留了食材的原始风味&#xff0c;复水后可以恢复鲜肉的口感&#xff0c;猫咪很喜欢吃&#…

人工智能Keras图像分类器(CNN卷积神经网络的图片识别篇)

上期文章我们分享了人工智能Keras图像分类器(CNN卷积神经网络的图片识别的训练模型),本期我们使用预训练模型对图片进行识别:Keras CNN卷积神经网络模型训练 导入第三方库 from keras.preprocessing.image import img_to_array from keras.models import load_model impor…

.net web API的文件传输(上传和下载)客户端winform

防止反复造轮子&#xff0c;直接上代码。 客户端代码如下&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.IO.Compression; using System.Linq; using …

conda channel的镜像设置

目录 前言1 显示所有channel2 移除清华镜像3 添加可用的清华源4 下载opencv5 一些其他的conda指令参考文献 ———————————————— 版权声明&#xff1a;本文为CSDN博主「宇内虹游」的原创文章&#xff0c;遵循CC 4.0 BY-SA版权协议&#xff0c;转载请附上原文出处链…

关于“Python”的核心知识点整理大全27

目录 10.5 小结 第&#xff11;1 章 测试代码 11.1 测试函数 name_function.py 函数get_formatted_name()将名和姓合并成姓名&#xff0c;在名和姓之间加上一个空格&#xff0c;并将它们的 首字母都大写&#xff0c;再返回结果。为核实get_formatted_name()像期望的那样工…

arcgis javascript api4.x加载天地图cgs2000坐标系

需求&#xff1a;arcgis javascript api4.x加载天地图cgs2000坐标系 效果&#xff1a; 示例代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"wid…

《LeetCode力扣练习》代码随想录——双指针法(反转字符串---Java)

《LeetCode力扣练习》代码随想录——双指针法&#xff08;反转字符串—Java&#xff09; 刷题思路来源于 代码随想录 344. 反转字符串 相向双指针 class Solution {public void reverseString(char[] s) {if(s.length1){return;}int left0;int rights.length-1;while(left<r…

Python爬虫-解决使用requests,Pyppeteer,Selenium遇到网站显示“您的连接不是私密连接”的问题|疑难杂症解决(2)

前言 本文是该专栏的第13篇,后面会持续分享python爬虫案例干货,记得关注。 相信很多同学在处理爬虫项目的时候,会遇到一些网站出现如下图所示的情况: 就是当你不论是使用requests进行协议请求,还是使用自动化框架pyppeteer或者selenium都会出现上图中的情况。这相信会或多…

查找书籍(缓冲区)

给定n本书的名称和定价&#xff0c;本题要求编写程序&#xff0c;查找并输出其中定价最高和最低的书的名称和定价。 输入格式: 输入第一行给出正整数n&#xff08;<10&#xff09;&#xff0c;随后给出n本书的信息。每本书在一行中给出书名&#xff0c;即长度不超过30的字…

年度大盘点:AIGC、AGI、GhatGPT震撼登场!揭秘人工智能大模型的奥秘与必读书单

这里写目录标题 前言01 《ChatGPT 驱动软件开发》02 《ChatGPT原理与实战》03 《神经网络与深度学习》04 《AIGC重塑教育》05 《通用人工智能》 前言 在2023年&#xff0c;人工智能领域经历了一场前所未有的大爆发&#xff0c;特别是在语言模型领域。新的概念和英文缩写如AIGC、…

Ngnix之反向代理、负载均衡、动静分离

目录 1. Ngnix 1.1 Linux系统Ngnix下载安装 1.2 反向代理 正向代理&#xff08;Forward Proxy&#xff09;&#xff1a; 反向代理&#xff08;Reverse Proxy&#xff09;&#xff1a; 1.3 负载均衡 1.4 动静分离 1. Ngnix Nginx是一个高性能的开源Web服务器&#xff0…

设备运维管理系统,设备列表管理,设备拓扑图关系图,告警日志运维

个人主页&#xff1a; 左本Web3D&#xff0c;更多案例预览请点击》 在线案例 个人简介&#xff1a;专注Web3D使用ThreeJS实现3D效果技巧和学习案例 &#x1f495; &#x1f495;积跬步以至千里&#xff0c;致敬每个爱学习的你。喜欢的话请三连&#xff0c;有问题请私信或者加微…

C# 图解教程 第5版 —— 第19章 枚举器和迭代器

文章目录 19.1 枚举器和可枚举类型19.2 IEnumerator 接口19.3 IEnumerable 接口19.4 泛型枚举接口19.5 迭代器19.5.1 迭代器块19.5.2 使用迭代器来创建枚举器19.5.3 使用迭代器来创建可枚举类型 19.6 常见迭代器模式19.7 产生多个可枚举类型19.8 将迭代器作为属性19.9 迭代器的…

【vSphere | VM】虚拟机自定义规范Ⅳ —— 使用虚拟机自定义规范创建 Linux 和 Windows VM

目录 5. 使用虚拟机自定义规范创建VM5.1 Linux 虚拟机示例Rocky Linux 9.2&#xff08;1&#xff09;克隆虚拟机&#xff08;2&#xff09;模板部署虚拟机 5.2 Windows 虚拟机示例Windows 10&#xff08;1&#xff09;克隆虚拟机&#xff08;2&#xff09;模板部署 Windows 10 …

恒创科技:云服务器怎么买才便宜有优惠

随着云计算技术的不断发展&#xff0c;云服务器已经成为企业和个人用户的重要选择。然而&#xff0c;在购买云服务器时&#xff0c;价格和优惠成为了很多用户关注的焦点。那么&#xff0c;如何购买云服务器才能获得更优惠的价格呢&#xff1f;下面就为大家介绍一些购买云服务器…

windows10-EMQX与MQTTX的安装及配置使用教程

windows10-EMQX安装及配置使用教程 一、下载安装1.1 下载1.2 安装1.3 设置开机自启动 二、连接MQTT2.1 MQTT下载安装2.1.1 下载2.1.2 安装及配置 三、EMQX常用命令 本文介绍的是在windows10系统下的emqx的安装、配置及使用教程。 一、下载安装 1.1 下载 下载链接&#xff1a…

【漏洞复现】金和OA任意文件读取漏洞

Nx01 产品简介 金和数字化智能办公平台&#xff08;简称JC6&#xff09;是一款结合了人工智能技术的数字化办公平台&#xff0c;为企业带来了智能化的办公体验和全面的数字化转型支持。同时符合国家信创认证标准&#xff0c;支持组织数字化转型&#xff0c;实现业务流程的数字化…

订单未支付30分钟自动取消是如何实现的?

1.借助redis的过期特性 下单时&#xff0c;订单状态是待支付。将订单编号作为key&#xff0c;下单的时间戳作为value&#xff0c;设置过期时间是30分钟。服务器监听redis的key过期事件&#xff0c;如果是订单过期&#xff08;还会有其他key过期&#xff09;&#xff0c;则修改…

编程八股文——C/C++中位域概念并示例

位域 C语言允许在一个结构体中以位为单位来指定其成员所占内存长度&#xff0c;这种以位为单位的成员称为“位段”或称“位域”( bit field) 。利用位段能够用较少的位数存储数据。 一个位段必须存储在同一存储单元中&#xff0c;不能跨两个单元。如果第一个单元空间不能容纳…