当前位置: 首页 > news >正文

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

相关文章:

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

目录 第一章、1.1&#xff09;MyBatis中resultMap标签1.2&#xff09;MyBatis的resultType1.3&#xff09;MyBatis的parameterType1.4&#xff09;type属性1.5&#xff09;jdbcType属性1.6&#xff09;javaType属性1.7&#xff09;ofType属性 友情提醒: 先看文章目录&#xff…...

android Retrofit2.0请求 延长超时操作

import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory;public class MyApiClient {private static final String BASE_URL "https://api.example.com/";// 创建 OkHttpClient&#xff0c;并设置超时时间…...

Axure之动态面板轮播图

目录 一.介绍 二.好处 三.动态面板轮播图 四.动态面板多方式登录 五.ERP登录 六.ERP的左侧菜单栏 七.ERP的公告栏 今天就到这了哦&#xff01;&#xff01;&#xff01;希望能帮到你了哦&#xff01;&#xff01;&#xff01; 一.介绍 Axure中的动态面板是一个非常有用的组…...

一文读懂算法中的时间复杂度和空间复杂度,O(1)、O(logn)、O(n)、O(n^2)、O(2^n) 附举例说明,常见的时间复杂度,空间复杂度

时间复杂度和空间复杂度是什么 时间复杂度&#xff08;Time Complexity&#xff09;是描述算法运行时间长短的一个度量。空间复杂度&#xff08;Space Complexity&#xff09;是描述算法在运行过程中所需要的存储空间大小的一个度量。 时间复杂度和空间复杂度是衡量算法性能…...

LWIP热插拔功能实现

0 工具准备 1.lwip 1.4.1 2.RTOS&#xff08;本文使用rt-thread&#xff09;1 使能连接变化回调功能 打开lwipopts.h&#xff0c;将宏定义LWIP_NETIF_LINK_CALLBACK的值设为1&#xff0c;如下&#xff1a; #define LWIP_NETIF_LINK_CALLBACK 1这个宏定义被使能后会将…...

android下的app性能测试应主要针对那些方面,如何开展?

如何开展安卓手机下的App性能测试&#xff0c;对于优秀的测试人员而言&#xff0c;除了要懂得性能测试的步骤流程外&#xff0c;还应该懂的性能测试的一些其他知识&#xff0c;比如性能测试指标、各指标的意义&#xff0c;常用的性能测试工具、如何查看结果分析等等知识。所以本…...

【深度学习】注意力机制(二)

本文介绍一些注意力机制的实现&#xff0c;包括EA/MHSA/SK/DA/EPSA。 【深度学习】注意力机制&#xff08;一&#xff09; 【深度学习】注意力机制&#xff08;三&#xff09; 目录 一、EA&#xff08;External Attention&#xff09; 二、Multi Head Self Attention 三、…...

学习黑马vue

项目分析 项目下载地址&#xff1a;vue-admin-template-master: 学习黑马vue 项目下载后没有环境可参考我的篇文章&#xff0c;算是比较详细&#xff1a;vue安装与配置-CSDN博客 安装这两个插件可格式化代码&#xff0c;vscode这个软件是免费的&#xff0c;官网&#xff1a;…...

gdb本地调试版本移植至ARM-Linux系统

移植ncurses库 本文使用的ncurses版本为ncurses-5.9.tar.gz 下载地址&#xff1a;https://ftp.gnu.org/gnu/ncurses/ncurses-5.9.tar.gz 1. 将ncurses压缩包拷贝至Linux主机或使用wget命令下载并解压 tar-zxvf ncurses-5.9.tar.gz 2. 解压后进入到ncurses-5.9目录…...

《Linux C编程实战》笔记:实现自己的ls命令

关键函数的功能及说明 1.void display_attribute(struct stat buf,char *name) 函数功能&#xff1a;打印文件名为name的文件信息&#xff0c;如 含义分别为&#xff1a;文件的类型和访问权限&#xff0c;文件的链接数&#xff0c;文件的所有者&#xff0c;文件所有者所属的组…...

Python个人代码随笔(观看无益,请跳过)

异常抛错&#xff1a;一般来说&#xff0c;在程序中&#xff0c;遇到异常时&#xff0c;会从这一层逐层往外抛错&#xff0c;一直抛到最外层&#xff0c;由最外层把错误显示在用户终端。 try:raise ValueError("A value error...") except ValueError:print("V…...

Unity中实现ShaderToy卡通火(总结篇)

文章目录 前言一、把卡通火修改为后处理效果1、在Shader属性面板定义属性接收帧缓存纹理2、在片元着色器对其纹理采样后&#xff0c;与卡通火相加输出请添加图片描述 二、我们自定义卡通火1、修改 _CUTOFF 使卡通火显示在屏幕两侧2、使火附近屏幕偏红色 前言 在之前的文章中&a…...

等保2.0的变化

1法律地位得到确认 《中华人民共和国网络安全法》第21条规定“国家实行网络安全等级保护制度”&#xff0c;要求“网络运营者应当按照网络安全等级保护制度要求&#xff0c;履行安全保护义务”&#xff1b;第31条规定“对于国家关键信息基础设施&#xff0c;在网络安全等级保护…...

漏洞复现-网神SecGate3600防火墙敏感信息泄露漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…...

ArkTS入门

代码结构分析 struct Index{ } 「自定义组件&#xff1a;可复用的UI单元」 xxx 「装饰器&#xff1a;用来装饰类结构、方法、变量」 Entry 标记当前组件是入口组件&#xff08;该组件可被独立访问&#xff0c;通俗来讲&#xff1a;它自己就是一个页面&#xff09;Component 用…...

JS中for循环之退出循环

我为大家介绍一下退出循环的两种方法 1.continue 退出本次循环&#xff0c;一般用于排除或者跳过某一个选项的时候&#xff0c;可以使用continue for(let i 0;i<5;i){if(i 3){continue}// 跳过了3console.log(i) //0 1 2 4}2.break 退出整个for循环&#xff0c;一般用于…...

《Global illumination with radiance regression functions》

总结一下最近看的这篇结合神经网络的全局光照论文。 论文的主要思想是利用了神经网络的非线性特性去拟合全局光照中的间接光照部分&#xff0c;采用了基础的2层MLP去训练&#xff0c;最终能实现一些点光源、glossy材质的光照渲染。为了更好的理解、其输入输出表示如下。 首先…...

华南理工C++试卷

诚信应考 , 考试作弊将带来严重后果&#xff01; 《C程序设计试卷》 注意事项&#xff1a;1. 考前请将密封线内填写清楚&#xff1b; 2. 所有答案请答在试卷的答案栏上&#xff1b; 3&#xff0e;考试形式&#xff1a;闭卷 4. 本试卷共 五 大题&#xff0c;满分100分&#xff…...

0001.WIN7(64位)安装ADS1.2出现L6218错误

用了十多年的笔记本电脑系统出现问题&#xff0c;硬件升级重装以后安装ADS1.2。在编译代码的时候出现L6218错误。如下&#xff1a; 图片是从网上找的&#xff0c;我编译出错的界面没有保留下来。 首先&#xff0c;代码本身没有任何问题 &#xff0c;代码在win7(32位)下编译没有…...

HBuilderX 配置 夜神模拟器 详细图文教程

在电脑端查看App的效果&#xff0c;不用真机调试&#xff0c;下载一个模拟器就可以了 --- Nox Player&#xff0c;夜神模拟器&#xff0c;是一款 Android 模拟器。他的使用非常安全&#xff0c;最重要的是完全免费。 一. 安装模拟器 官网地址&#xff1a; (yeshen.com) 二.配…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...