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

mybatis----小细节

1、起别名

在MyBatis中,<typeAliases>元素用于定义类型别名,它可以将Java类名映射为一个更简短的别名,这样在映射文件中可以直接使用别名而不需要完整的类名。

下面是一个示例:

在mybatis核心配置文件中配置typeAliases标签

<typeAliases><typeAlias alias="Acount" type="duhong.entity.Account"/>
</typeAliases>

为duhong.entity.Account类指定了别名Account。

定义了这些别名后,我们可以在映射文件中直接使用这些别名来引用对应的Java类,例如:

<resultMap id="AccountMap" type="Account">

通过使用别名,我们可以简化映射文件中的配置,并提高代码可读性和可维护性。

2、mybatis核心配置文件加载映射文件的其他方式

<package name="duhong.dao"/>

这种声明方式,会使mybatis查找duhong/dao下对应的xml文件,不过这种方式要求xml资源目录与dao层目录一致,而且xml名称要与mapper接口名称一致。

3、#{}与${}的区别

在MyBatis中,#{} 和 ${} 用于处理SQL语句中的参数,但是它们在作用和安全性方面有所不同。

  1. #{} 语法:
    在MyBatis中,当你使用 #{} 来表示一个参数占位符时,MyBatis会在运行时将其替换为一个参数的值,并且会使用预处理语句(PreparedStatement)来处理参数。也就是说,不管参数值是什么,它都会被视为一个字符串值并且正确地转义。
SELECT * FROM some_table WHERE id = #{id}
  1. ${} 语法:
    与 #{} 不同,当你使用 ${} 时,MyBatis会直接将这个位置替换为变量的字面值。也就是说,如果你的变量中包含了特定的SQL关键词或结构,它将不做任何转义直接嵌入SQL语句中。
SELECT * FROM ${tableName} WHERE column = #{value}

测试:

dao层添加接口

//查询所有,按降序排列
List<Account> selectAllByDesc(String key);

mapper中添加查询语句

resultMap id="AccountMap" type="duhong.entity.Account">
<id property="id" column="id"></id>
<result property="accountNumber" column="account_number"></result>
<result property="accountType" column="account_type"></result>
<result property="balance" column="balance"></result>
</resultMap>
<select id="selectAllByDesc" resultMap="AccountMap">select * from account ORDER BY balance ${order};
</select>

添加junit,测试

SqlSession sqlSession= SqlSessionUtil.openSession();@Test
public void test(){AccountDao mapper = sqlSession.getMapper(AccountDao.class);List<Account> account = mapper.selectAllByDesc("DESC");for (Account account1 : account) {System.out.println(account);}}

将${}换成#{},执行出错,原因在于DESC是sql语句的关键字,而#{}会将参数转化为字符串。

4、模糊查询

<select id="selectLikeAll" resultMap="AccountMap">select * from account where account_number like '%${key}%';
</select>
//模糊查询
List<Account> selectLikeAll(String key);
@Test
public void likeTest(){AccountDao accountDao=sqlSession.getMapper(AccountDao.class);List<Account> accounts = accountDao.selectLikeAll("1");System.out.println(accounts);
}

同样直接使用#{}也会出错,#{}在' '中并不会被赋值

改进方式sql中使用concat拼接字符串

<select id="selectLikeAll" resultMap="AccountMap">select * from account where account_number like concat('%',#{key},'%');
</select>

相关文章:

mybatis----小细节

1、起别名 在MyBatis中&#xff0c;<typeAliases>元素用于定义类型别名&#xff0c;它可以将Java类名映射为一个更简短的别名&#xff0c;这样在映射文件中可以直接使用别名而不需要完整的类名。 下面是一个示例&#xff1a; 在mybatis核心配置文件中配置typeAliases标…...

解密Oracle数据库引擎:揭开数据存储的神秘面纱

目录 1、介绍Oracle数据库引擎 1.1 什么是Oracle数据库引擎 1.2 Oracle数据库引擎的作用和功能 1.3 Oracle数据库引擎的历史和发展 2、Oracle数据库引擎的体系结构 2.1 Oracle数据库实例的组成部分 2.2 Oracle数据库引擎的层次结构 2.3 Oracle数据库引擎的关键组件 3、…...

「HDLBits题解」Karnaugh Map to Circuit

本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 相关资料&#xff1a;卡诺图化简法-CSDN博客 题目链接&#xff1a;Kmap1 - HDLBits module top_module(input a,input b,input c,output out );assig…...

由于找不到d3dcompiler_43.dll缺失,无法打开软件的解决方法分享

d3dcompiler43.dll是什么文件&#xff1f;为什么会出现丢失的情况&#xff1f;又该如何解决呢&#xff1f;本文将详细介绍d3dcompiler43.dll的作用和影响&#xff0c;并提供6个有效的解决方法。 一、d3dcompiler43.dll是什么文件&#xff1f; d3dcompiler43.dll是DirectX SDK…...

现阶段Python和Java哪个更吃香?

现阶段Python和Java哪个更吃香&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&…...

基于DNA的密码学和隐写术综述

摘要 本文全面调研了不同的脱氧核糖核酸(DNA)-基于密码学和隐写术技术。基于DNA的密码学是一个新兴领域,利用DNA分子的大规模并行性和巨大的存储容量来编码和解码信息。近年来,由于其相对传统密码学方法的潜在优势,如高存储容量、低错误率和对环境因素的抗性,该领域引起…...

【linux 多线程并发】多线程的控制,挂起线程暂停运行,直到唤醒线程,取消线程运行,可以设置合适的取消点属性避免不安全点被中止

线程运行控制 ​专栏内容&#xff1a; 参天引擎内核架构 本专栏一起来聊聊参天引擎内核架构&#xff0c;以及如何实现多机的数据库节点的多读多写&#xff0c;与传统主备&#xff0c;MPP的区别&#xff0c;技术难点的分析&#xff0c;数据元数据同步&#xff0c;多主节点的情况…...

java转义字符

//转义字符的使用 public class ChangeChar{//编写一个main方法public static void main(String[] args){// \t :一个制表位&#xff0c;实现对齐的功能System.out.println("北京\t天津\t上海");// \n :换行符&#xff0c;实现换行System.out.println("jack\nsm…...

UDP服务器和客户端的创建步骤

UDP服务器的创建步骤&#xff1a; 一、创建用户数据报套接字&#xff08;socket函数&#xff09;&#xff1a;通信域选择IPV4网络协议、套接字类型选择数据报式&#xff1b; int sockfd socket(AF_INET,SOCK_DGRAM,0); 二、填充服务器的网络信息结构体&#xff1a;1.定义网络…...

【问题记录】使用命令语句从kaggle中下载数据集

从Kaggle中下载Tusimple数据集 1.服务器环境中安装kaggle 使用命令&#xff1a;pip install kaggle 2.复制下载API 具体命令如下&#xff1a; kaggle datasets download -d manideep1108/tusimple3.配置kaggle.json文件 如果直接使用命令会报错&#xff1a; root:~# kagg…...

Centos 更换内核

文章目录 一、查看/更换系统内核1.1 查看当前运行环境的内核1.2 查看系统上所有可用内核1.3 切换内核方法一&#xff1a;通过启动菜单更换内核方法二&#xff1a;更换默认启动内核 二、安装内核2.1 使用ELRepo安装2.2 安装指定内核版本参考资料 一、查看/更换系统内核 1.1 查看…...

RestTemplate调用Http方法

场景&#xff1a;前端调用后端的接口完成设备参数的更新&#xff0c;后端在接口代码中需要调用设备端提供的接口来完成设备参数的更新。 RestTemplate 是用于同步client端访问 Restful 服务的一个核心类 默认使用 JDK 提供的包去建立HTTP连接 为每种 HTTP 请求都实现了相关的…...

软考笔记--操作系统-内存管理

任何程序和数据都必须占用内存空间后才能执行&#xff0c;因此&#xff0c;内存管理的好坏直接影响整个操作系统的性能。操作系统的任务之一是尽可能地方便用户使用和提高内存的利用率。同时&#xff0c;内存管理也是多道程序设计系统的关键支撑。内存管理的功能主要包括以下几…...

Spring Boot整合日期转换器(Converter)和拦截器(HandlerInterceptor)

添加日期转换器&#xff08;Converter&#xff09; public class DataConverter implements Converter<String, Date> {Overridepublic Date convert(String s) {try {SimpleDateFormat simpleDateFormat new SimpleDateFormat("yyyy-MM-dd");return simpleD…...

100天精通Python(实用脚本篇)——第112天:图像处理批量给图片添加水印,防盗必备建议收藏!!!(附上脚本代码)

文章目录 专栏导读1. 图片设置水印的意义?2. 需求3. 实现效果4. 添加全屏水印4.1 单张图片添加全屏水印4.2 批量给多张图片添加全屏水印5. 添加指定位置水印5.1 模块介绍5.2 批量添加脚本实现专栏导读 🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零…...

SpringMVC(全局异常处理.动态接收Ajax请求)

1.全局异常处理 1 异常处理器 基于AOP 用户发起请求, SpringMVC接受请求, SpringMVC加载静态资源问题说明 请求过去了,但没有处理 规则说明:静态资源进入SpringMVC框架之后,没有找到要怎样处理静态资源的方法,所以他们就不解决,也就不显示 解决方法:SpringMVC基于Servlet处理…...

【FastAPI】P1 简单实现 a+b

目录 准备工作代码运行 说明&#xff1a;本文通过 FastAPI 实现返回两个参数 ab 的值&#xff1b; 准备工作 默认读者已准备完善 Python IDE工具以及包管理工具。 首先&#xff0c;需要安装 fastapi 和 uvicorn 库&#xff0c;如果没有请使用 pip 进行安装&#xff1a; pip…...

C#设计模式教程(4):单例模式

单例模式(Singleton Pattern)是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个访问它的全局访问点。在C#中实现单例模式通常有几种不同的方法,这里介绍几种典型的实现方式。 C# 单例模式的各种实现方式 1. 懒汉式(线程不安全) public class Singleton {p…...

常用的git diff命令用法汇总和示例

文章目录 1. 查看工作目录和暂存区的差异2. 查看暂存区和最后一次提交的差异3. 查看两个提交之间的差异4. 查看特定文件的更改5. 查看特定文件在两个提交之间的差异6. 查看分支之间的差异7. 查看某次提交的更改8. 限制diff输出的格式9. 查看一定时间范围内的更改 Git的diff命令…...

一键式Excel分词统计工具:如何轻松打包Python脚本为EXE

一键式Excel分词统计工具&#xff1a;如何轻松打包Python脚本为EXE 写在最前面需求分析直接用Python打包为什么大&#xff1f;为什么要使用conda环境&#xff1f; 将Python脚本打包为一个独立的应用程序1. 编写Python脚本&#xff1a;初步功能实现2. 初步图形用户界面&#xff…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...