SpringBoot下Mybatis-注解动态sql开发的坑

SpringBoot集成Groovy、Mybatis注解 实现动态SQL,帮你摆脱繁琐的XML配置 SpringBoot的超简洁配置,为我们省去了宝贵的配置时间。 Mybatis3在这方面也提供了很好的支持,通过注解让我们摆脱了繁琐的mapper xml,写DAO层的时候再也不用在java接口和xml配置来回切换了,无疑提升了代码的可读性。 但很不幸,Mybatis3在复杂的动态SQL方面的支持,需要再写**Provider来构建SQL语句,这样的设计感觉有点顾此失彼,本来好端端的通过注解省去了... 阅读详情

比较简单篇:众所周知,Mybatis支持动态标签编写sql,编写简单sql时方式简单的不要不要的,但是当遇到复杂的sql语句时遇到的坑就比较难受了:

坑点1:if 标签下 < 号会出错!!!识别不了识别不了

所以必须转换


    &gt;            对应             >

    &gt;=         对应              >=

    &lt;             对应              <(会报错  相关联的 "test" 属性值不能包含 '<' 字符)

    &lt;=          对应               <=(会报错  相关联的 "test" 属性值不能包含 '<' 字符)

 

注:转义字符 总是在你最需要的时候出现

坑点2:当需要用到注解 去写动态标签时,需要加上<script></script> 标签,不然也会报错

坑点3: 编写注解动态sql时 有俩种方式

1.坑2所述 添加script标签写就好了,此举写的话 坏处就是 后面做扩容或修改比较麻烦,因为一大串字符串 不是那么容易改动的

2.使用mybatis提供的 SqlProvider方法,进行定制化语句编写,有点就是灵活,分解性强,坏处就是 又要多写一个方法!!!

提供截图参考:即dao层写明provider,再指定 类以及类的方法名,,而方法中实现sql注入方式类似hibernate的复杂编写,当我们尝试1的方法却不能成功时,不如就退一步海阔天空把~~,多写个方法呗

坑点4:提供一些常用的动态标签结构

 

MyBatis:动态SQL高级标签使用方法指南 本文介绍了Springboot项目中SQL映射方式、动态SQL和支持动态SQL的核心标签.MyBatis的动态SQL功能允许开发者根据不同条件灵活构建SQL语句,避免手动拼接字符串,另外,常用查询列和查询SQL还可以借助动态SQL实现复用,提高XML中SQL代码的可维护性和安全性。 阅读详情

相关推荐

5.2 Mybatis快速入门,轻松学会常用12种注解开发

通过 《上文》,我们完成了SpringBoot整合Mybatis,那么接下来,我们就来使用Mybatis访问MySQL数据库!MyBatis的强大在于它的语句映射,它提供了注解和XML映射两种方式,都是为了减少我们的使用成本,屏蔽JDBC代码细节,节省代码,从而让我们更专注于SQL代码!本文主要使用注解方式实现登录接口DAL层的UserMapper代码,并借此示例讲解Mybatis常用的12种注解用法,让新手轻松学会常用12种注解开发。

天罡gg的专栏 1434

mybatis注解sql <script></script> 报错提示:元素内容必须由格式正确的字符数据或标记组成

mybatis在使用标签时,{<、>、<=、>=}等符号需要转译否则不认报错; 原符号 <、 <=、 >、 >=、 &、 '、 "、 替换符号 &lt;、 &lt;=、 &gt;、 &gt;=、 &amp;、 &apos;、 &quot;、 例如:sql如下: create_date_time &gt;= #{startTime} and create_date_time &lt;

白小飞的博客 2273

SpringBoot + MyBatis 注解实现高效后端开发

在现代的软件开发中,自定义注解被广泛用于简化代码并提供清晰的业务语义。通过在代码中使用注解,开发者可以更直观地理解某个类或方法的作用,同时减少配置文件的使用。在MyBatis框架中,注解更是与SQL语句的编写和执行紧密相关。本章节将深入探讨自定义注解在MyBatis中动态生成SQL的过程和实现机制。注解是Java 5之后引入的一种机制,它本质上是一个接口,被定义在包中。注解可以被编译器读取,通常用于提供代码信息,如说明性描述、编译器检查、编译器指令、部署配置等。

weixin_42583683的博客 1148

mybatis注解sql <script></script>标签注意事项 报错提示:元素内容必须由格式正确的字符数据或标记组成

1、mybatis坑惨了,注意加<script></script>,【<、>、<=、>=】符号需要转译否则不认报错; 第一种写法(1): 原符号 <、 <=、 >、 >=、 &、 '、"、 替换符号 &lt;、 &lt;=、 &gt;、 &gt;=、 &amp;、 &apos;、 &quot;、 例如:sql如下: create_date_time &gt;=.

hanjiaqian的博客 3375

CS224W图神经网络实战:如何用Motifs和Graphlets分析社交网络结构?

本文基于斯坦福CS224W课程,深入探讨了如何利用网络模体(Motifs)和图元(Graphlets)分析社交网络的微观结构。通过实战代码演示,文章介绍了如何识别具有统计显著性的关键连接模式,计算节点的图元度向量以刻画局部拓扑特征,并将这些结构洞见应用于社区发现、影响力分析及图神经网络的节点特征工程,从而提升模型在虚假账号检测等任务中的性能。

2w3e4r5t6y的博客 911

Java 处理地理信息数据[DEM TIF文件数据获取高程]

EPSG 是一个国际标准,用于唯一标识地理坐标系和投影坐标系。

两点 1281

Springboot整合Mybatis报错大集合(保姆式排错)

Springboot整合Mybatis报错大集合

黑桃A的博客 4720

别再手动续期SSL证书了!用acme.sh配合阿里云DNS API,实现全自动HTTPS证书管理

本文详细介绍了如何使用acme.sh配合阿里云DNS API实现SSL/TLS证书的全自动管理,彻底解决手动续期带来的风险与不便。通过自动化部署流程,包括环境准备、API集成、多域名证书申请等关键步骤,帮助运维人员构建高效、可靠的HTTPS证书管理体系,显著提升安全性和运维效率。

weixin_29200485的博客 271

在mybatis 的@Select注解中使用<script>导致的报错问题

原代码如下如下 @Select({"<script>SELECT " + "IFNULL( sum( CASE WHEN dispose_type = 1 THEN 1 ELSE 0 END ), 0 ) AS misinformation, " + "IFNULL( sum( CASE WHEN dispose_type = 2 THEN 1 ELSE 0 END ), 0 ) AS fault, " + "IFNULL( sum( CASE WHE

三良的博客 8576

Unity Shader实战:用Matcap给你的低模角色快速换上‘次世代’材质(附完整Shader代码)

本文详细介绍了Unity中Matcap技术的实战应用,通过Shader代码实现低模角色的次世代材质表现。Matcap技术利用预烘焙光照贴图,显著提升材质质感同时保持极低性能消耗,特别适合移动游戏和独立开发。文章包含完整Shader代码、平面模型着色优化方案及动态环境反射增强技巧,帮助开发者快速提升低模视觉效果。

weixin_28718755的博客 385

【知识分享】IBIS 建模指南 03

本文介绍了差分缓冲器的数据提取方法,重点分析了差分系统与单端系统的核心差异。文章详细阐述了差分接收机和驱动器的结构特点、工作原理及建模方法,指出全差分结构具有优异的电源噪声抑制能力。针对IBIS建模规范,作者提出了三维I-V曲面数据提取技术,并介绍了共模/差模电流分离、片上端接处理以及V-T表生成的解决方案。文章还探讨了差分电容(C_diff)的测量方法和数据简化策略,为复杂差分缓冲器的精确建模提供了系统化的技术路径。

一只豌豆象的博客 1282

MyBatis使用报错原因及解决办法 ##The error occurred while setting parameters

解决mybatis问题

qingnian2016的博客 2万+

【网络与爬虫 62】小程序爬虫终极攻略:微信支付宝小程序数据采集完全指南

本文深入解析微信和支付宝小程序的爬虫技术,从基础架构分析到高级逆向工程,涵盖WXML/AXML模板解析、API接口拦截、网络流量分析等核心技术。通过实战案例和代码示例,帮助开发者掌握小程序数据采集的完整技术栈。

熵数实验室 3418

SpringBoot整合通用Mapper实战:从入门到精通,避坑指南与性能优化

在Java后端开发中,ORM框架是数据持久层的核心技术,它通过对象关系映射简化了数据库操作。MyBatis作为主流ORM框架,以其灵活性著称,但手动编写大量SQL语句仍显繁琐。通用Mapper(tk.mybatis)基于MyBatis,通过注解和接口继承自动生成SQL,显著提升了单表CRUD的开发效率。其技术价值在于遵循约定大于配置的原则,减少了重复代码,但同时也引入了动态SQL生成和复杂查询支持等挑战。在实际应用场景中,开发者常面临配置细节、方法误用及性能问题。本文聚焦于通用Mapper的高频使用场景,深

weixin_34199405的博客 421

【实战教程】OpenClaw接入MySQL数据库实战指南

本文介绍了在虚拟机Ubuntu中访问宿主机Win11中MySQL数据库的配置方法,重点包括创建远程用户、权限配置和安全设置。首先在MySQL中创建具有只读权限的用户并刷新权限,然后调整服务器设置允许远程连接。文章还提供了某金融机构财富管理系统的数据库设计方案,包含理财产品表、客户表和份额表的核心结构,其中金额字段使用DECIMAL类型确保精度,并设置唯一键约束。文末强调测试环境配置完成后应恢复安全更新模式以保障生产环境安全。

海兰 8700

uniapp [安卓苹果App端] - 实现支付宝支付功能+拉起支付宝app付款支付后返回跳转到原页面,详解uniApp如何唤起本机支付宝并跳转到支付页面全流程及示例源码(APP端支付宝支付,支持打包

全网最详细的uniapp支付宝支付教程,uniapp支付宝支付流程,uni-app项目在APP端使用支付宝支付功能,uniapp前端实现支付宝支付,uniapp中唤醒支付宝进行支付并返回app,uniApp调起支付宝支付失败报错,uniapp app端调支付宝支付接口,uniapp开发安卓App对接支付宝支付,uniapp苹果ios唤起支付宝支付,uniapp调用支付宝支付uniapp开发app-调用支付宝支付,uniapp开发安卓苹果app如何接入支付宝支付,UniApp中实现支付宝支付功能,支付报错,调

🏆 前端领域优质创作者 1万+

SpringBoot MyBatis注解-动态SQL(if test)

需求场景: 在一个表中有id,name,email我们查询的时候,希望name不为null的时候,作为查询条件,如果email不为null的时候,作为查询条件。 实现过程: (1)name,email and 关系 如果name和email只是并且的关系的话,那么我们会这么写: @Select("Select * from Demo where name =#{name} and email=#...

Smile yourlife 5532

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MyBatis使用动态SQL注解@SelectProvider、@InsertProvider、@UpdateProvider、@DeleteProvider

MyBatis 3.x 版本提供了以下4个CRUD的高级注解。 @SelectProvider:用于构建动态查询SQL。 @InsertProvider:用于构建动态新增SQL。 @UpdateProvider:用于构建动态更新SQL。 @DeleteProvider:用于构建动态删除SQL。 动态SQL注解主要用于编写动态SQL。这里以@SelectProvider为例,它主要包含两个注解属性,其中,type表示工具类,method表示工具类的某个方法(用于返回具体的SQL语句)。 【示例】使

pan_junbiao的博客 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

企业培训笔记:SpringBoot+MyBatis项目中实现动态SQL操作

动态 SQL 是 MyBatis 的核心特性之一,允许你在 XML 或注解中编写灵活的 SQL 语句,根据不同条件动态生成 SQL。它通过标签(如ifwhereforeachifwhereforeach等)和 OGNL 表达式实现条件判断、循环等逻辑,避免硬编码 SQL,提高代码复用性和可维护性。可替代<where><set>,通过属性灵活控制前缀、后缀。

梁辰兴的博客 1157

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

MyBatis 注解实现动态SQL

在 Mybatis 中,使用注解可以很方便的进行sql操作,但很多动态 SQL 都是由 xml 配置实现的。而随着 SpringBoot的逐渐发展,越来越多的配置由配置文件转成注解的形式。其中包括动态 SQL 。 Mybatis 的注解中,使用太过长的sql语句看起来很不美观。 @Select("SELECT title from book_tbl where id = #{id}") 如果想要在 mapper 中进行非必要关键字的查询时就需要使用动态 SQL,与 xml 配置不同的是,@Select.

~ 7801

SpringBoot + MyBatis 注解开发入门实践

通过本篇博客的实践,我们完成了一个简单的 SpringBoot + MyBatis 注解开发的项目。整个过程充分体现了 SpringBoot 简化配置、快速开发的优势,以及 MyBatis 注解开发在数据访问层的便捷性。依赖管理:借助 Maven 高效管理项目依赖。配置简化集中配置数据库和 MyBatis 相关信息。注解驱动:MyBatis 的@Mapper@Select等注解,让 DAO 层开发无需编写 XML 映射文件;Spring 的@Autowired等注解,简化了 Web 层和组件注入的开发。

m0_74230209的博客 1499

Springboot2注解使用Mybatis动态SQL

知识点: (1)注解写动态SQL,用(2)SQL的拼接可以使用+号,也可以使用逗号。我这里使用的是逗号,要使用+号可以把(2)实现IN查询中 > 符号需要转义为 > ,其中foreach的collection直接写成@param中的值即可。 (3)这是一种使用注解完全替代XML的方法,稍微复杂的SQL语句推荐使用XML方式。 1.简单的sql //从***数据表获取统计数据 @Sele...

chshyuxyz的博客 614

Mybatis基于注解与XML开发

Spring Boot 是一个快速开发的框架,它简化了基于 Spring 框架的应用程序的初始化和配置过程。MyBatis 是一个流行的持久层框架,它可以帮助我们更便捷地与关系型数据库进行交互。

m0_72568513的博客 1408

MyBatis——#{} 和 ${} 的区别和动态 SQL

动态更新操作也是,当后面有值的时候就更新,没有值的时候就不更新,<set> 标签的作用和 where 类似,也是后面有值的话就生成 set 关键字并且去除右边的逗号,但是后面设置的内容也不能全部是空,此时就算没有生成 set 标签,但是前面还有一个 update 关键字,最后的 SQL 语句还是有问题。我们在填一些表单的时候应该会见到下面这种,有的是必填项,有的是选填项,对于选填项来说,如果没有填,肯定是需要赋一个默认值的,比如 null,那么就需要动态 SQL 来实现这样的功能。

2202_76097976的博客 4150

springboot 整合 mybatis 注解 sql 语句

springboot 整合 mybatis,使用注解写 sql 语句,具体如下 1、创建 springboot 项目,添加 jar 包 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or...

悟世君子的博客 4145

Mybatis全注解开发——动态SQL

前言 以前使用Mybatis的时候,使用XML文件来实现sql语句的书写。但是使用SpringBoot替代SSM以后,所有关于spring和其他的配置,SpringBoot全部默认配置好了。所以有没有一种方法来替代Mybatis的XML文件呢?那肯定是有的,就是mybatis自带的关于SQL的注解。但是有时候是需要根据不同的参数拼接SQL语句的,所以本篇主要介绍mybatis注解开发中的动态SQ...

小哥哥的博客 5319
下一篇: Mysql开发中的坑点
wllmp520
博客等级 码龄9年 6粉丝 32原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值