Mybatis之使用注解拼装动态sql

Mybatis SQL注解使用场景 阅读详情

方式一:使用脚本
下面是用<script>的方式把XML配置方式的动态SQL照搬过来,用注解来实现。适用于xml配置转换到注解配置

@Select("<script>select * from user <if test=\"id !=null \">where id = #{id} </if></script>")    
public List<User> findUserById(User user);  

方式二:使用相应的Provider注解

@Mapper
public interface ImageMapper {

    @Select("select * from image where isShow=0")
    List<Image> selectAllImage();

    @Insert("insert into image(id, title, remark, url, isShow) values(#{image.id},#{image.title},#{image.remark},#{image.url},#{image.isShow})")
    int insertImage(@Param("image") Image image);

    /**
     * 更新图片的isShow字段,0代表展示,1代表不展示,即删除
     * @param list
     * @return
     */
    @UpdateProvider(type = ImageProvider.class, method = "updateImageIsShow")
    int updateImageIsShow(List<String> list);

    class ImageProvider{
        // 注意:public String updateImageIsShow(List<String> list){
        public String updateImageIsShow(Map map){

            // 注意
            List<String > list = (List<String>) map.get("list");

            StringBuilder builder = new StringBuilder();
            builder.append("update image set isShow=1 where id in (");
            if (list != null && list.size() > 0){
                for (int i = 0; i < list.size(); i++) {
                    if(i+1 == list.size()){
                        builder.append("'"+list.get(i)+"'");
                    }else{
                        builder.append("'"+list.get(i)+"', ");
                    }
                }
                return builder.append(")").toString();
            }
            return null;
        }
    }
}

注意:这是一个最简单的list传参,但是在运行时会报传参错误。这是mybatis内部机制造成的,其参数需要是key/value结构,当遇到这里不是key/value结构的list时,mybatis会自己把它转换成key/value结构,key就是他的名字”list”,value就是他的值List,要正确传参需要使用key/value结构的map

MyBatis 的 @SelectProvider 注解构建动态 SQL 是 MyBatis 提供的一个注解,它允许开发者通过编写 Java 方法来动态构建 SQL 语句。这种方法为开发者提供了更大的灵活性,可以根据业务需求或参数条件来构建复杂的 SQL 语句。首先,开发者需要定义一个 Java 类作为 SQL 提供者,该类中包含一个或多个返回 SQL 语句字符串的方法。// 根据参数动态构建 SQL注意:在上面的示例中,我们使用了 #{name} 和 #{age} 作为参数占位符。MyBatis 会自动将这些占位符替换为实际参数的值。 阅读详情

相关推荐

MyBatis注解开发---实现增删查改和动态SQL

MyBatis注解开发---实现增删查改和动态SQL注解

qq_53317005的博客 2792

02day遇见狂神说--MyBatis

02、CRUD操作及配置解析 1.namespac中包名和mapper名字要一样 2、select 选择查询语句 SQL语句返回值类型。【完整的类名或者别名】 传入SQL语句的参数类型 。【万能的Map,可以多尝试使用】 命名空间中唯一的标识符 接口中的方法名与映射文件中的SQL语句ID 一一对应 id、parameterType、resultType 3、需求:根据id查询用户 1、在UserMapper中添加对应方法 public interface UserMapper { //查询全部用户

qq_38727977的博客 280

Altera下载器驱动配置:手把手教程(从零实现)

详解Altera USB-Blaster驱动安装全过程,从设备识别到软件配置一步一图,解决常见连接问题,确保开发下载器正常工作,适合初学者快速上手FPGA下载调试。

weixin_35751194的博客 988

Mybatis拼接Sql语句异常($与#的区别)

delete TRAIN_INFO where #{sql} 之前这样写一直报SQL错误    将#{sql}改为 ${sql} 编译成功 原来用${} 就不会当成字符串解析 会直接加上去 不过这个要慎用 防止被sql注入 mybatis xml 解析传入参数有2种 #{} 与${} 前面那种会把你传入的参数当成字符串解析 也就是你无论传入什么 都会被加上''号 后面那一种

黑暗之神的博客 1709

从数据到图片:手把手构建FMCW雷达人体行为识别数据集(行走、跌倒、喝水等6类动作)

本文详细解析了如何利用FMCW雷达构建人体行为识别数据集,涵盖行走、跌倒、喝水等6类动作。通过多普勒特征可视化、图像标准化处理和自动化流水线设计,将原始雷达信号转化为高质量时频图像数据集,为智能家居和健康监护等应用提供可靠数据支持。

weixin_30706691的博客 383

uds协议之can总线程序升级

uds协议简介 如何利用uds协议升级 升级流程 uds服务类型介绍

fangye945a的博客 1万+

mysql 动态拼接表字段,值 mybatis 动态获取表字段

mysql 动态拼接表字段,值 mybatis 动态获取表字段 -- 取表所有字段,自动用逗号分开 select GROUP_CONCAT(DISTINCT COLUMN_NAME) from information_schema.columns where table_name='tb1'结果集:  字段1,字段2,字段3,字段4......

weixin_30252709的博客 515

fluent二维叶型仿真_Fluent案例4【自然对流】

自然对流来了!!江苏的高校好多开学了,我啥时候才能开学另外,刚才看了何同学的Mac Pro深度体验视频,我好酸/(ㄒoㄒ)/~~好想拥有一台跑仿真那种sou~sou~sou~的机器。废话不多说了,进入正题!案例题目:一个矩形空腔内有500K恒温小球,矩形空腔充斥空气,边界条件绝热,模型尺寸如下,试模拟空腔内空气流动状态做出温度变化图。(尺寸大小懒得写了,在建模部分里有)操作平台:workbench...

weixin_39724469的博客 3670

MySQL讲义第 42 讲——select 查询之动态查询

MySQL讲义第 42 讲——select 查询之动态查询 在执行查询的过程中,有时需要动态生成 SQL 语句。遇到这种情况可以使用以下方法: step1:把 SQL 语句中动态变化的部分保存到变量中。 step2:使用 CONCAT 函数拼接 SQL 语句,把最终拼接好的 SQL 语句保存到一个变量中。 step3:执行如下命令: SET @string = CONCAT(....); PREPARE stmt FROM @string; EXECUTE stmt; DROP PREPARE stmt;

睿思达DBA 4528

【学前须知】推荐阅读顺序

AUTOSAR学习笔记专栏文章推荐阅读顺序

weixin_47571898的博客 743

全志T527-TP9930-Camera

TP9930 驱动模块主要实现将 4 路的 AHD/TVI/CVBS Camera 的数据转换为 BT656/BT1120 数据,从而实现在 T527 端来对数据进行处理和送显。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 3233

Mybatis 中动态查询

在上述示例中,UserMapper接口定义了一个getUserList方法,用于根据条件查询用户列表。在UserMapper.xml中,使用了where元素来动态拼接WHERE子句,根据传入的name和age参数决定是否添加相应的条件。使用示例代码时,可以通过传入不同的参数来实现动态查询。在Mybatis中,动态查询是指根据不同的条件来构建SQL查询语句。上述代码会查询name为"Alice"的用户列表,不考虑age条件。以上示例代码演示了如何使用Mybatis实现动态查询,根据具体需求调整条件参数即可。

牛肉胡辣汤 2485

OpenClaw Manager Pro - 可视化管理工具

OpenClaw Manager Pro 是一个现代化的 Web 管理界面,用于管理多个 OpenClaw Gateway 实例。🎨美观的界面:深色主题,渐变设计,现代化 UI📡实时监控:WebSocket 实时推送状态和日志🔧完整管理:创建、编辑、删除、启动、停止 Gateway📊多渠道支持:飞书、Telegram、Discord、Slack、微信、钉钉🧩技能管理:可视化配置 61+ 个技能🌍跨平台:支持 macOS、Linux、Windows使用自定义模型系统会自动在中创建},

Maynor的博客 3085

mybatis注解方式扩展查询

在generater自动生成的代码基础上拓展复杂查询方法 一、使用@SelectProvider注解 //此查询结果是一对多的数据,通过自定resultMap进行一对多映射 @SelectProvider(type = BlessingCommentProvider.class, method = "queryBlessing") @ResultMap("resultMap...

yao_00的博客 701

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

MyBatis-Plus 自定义 SQL 和复杂查询

MyBatis-Plus 是 MyBatis 的增强版,提供了许多开箱即用的 CRUD 操作。然而,在实际项目中,开发者常常需要编写自定义 SQL 以处理更复杂的查询需求。MyBatis-Plus 提供了灵活的机制,允许开发者通过注解或 XML 自定义 SQL,同时也能支持复杂查询、动态 SQL 等高级操作。

anzhxu的博客 292

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

mybatis转义反斜杠_MyBatis踩坑之SQLProvider转义字符被删除问题

目录踩坑背景项目架构:Spring Boot + MyBatis + MySQL。使用MyBatis作为ORM框架,jdbc驱动使用的是mariadb-java-client。org.mariadb.jdbcmariadb-java-client2.3.0为了不使用xml形式的配置文件,MyBatis使用接口映射器,并使用映射器注解方式编写SQL语句。@Mapperpublic interface...

weixin_39622084的博客 767

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

mybatis3中@SelectProvider的使用技巧

mybatis3中增加了使用注解来配置Mapper的新特性,本篇文章主要介绍其中几个@Provider的使用方式,他们是:@SelectProvider、@UpdateProvider、@InsertProvider和@DeleteProvider。 1.使用@SelectProvider @SelectProvider是声明在方法基本上的,这个方法定义在Mapper对应的的interface上。 public interface UserMapper { @SelectProvi.

编写博客,学习交流 688

Mybatis 注解开发 + 动态SQL

Hello 大家好我是橙子同学,今天分享注解Mybatis注解开发+动态sql 目录 每文一铺垫(今天有小插曲哦) 注解开发 添加@Insert 删除@Delete 查询@Select 修改@Update 实现结果集封装@Result 实现一对一结果集封装@one 实现多对多结果集封装 @Many 动态SQL 标签<set> <if> 标签<wher...

m0_65729948的博客 1万+

Mybatis使用注解实现复杂动态SQL

Mybatis使用注解实现复杂动态SQL

小张的博客 2961

【MyBatis从入门到入土】注解开发和动态SQL快速入门

本文介绍了MyBatis的注解开发和动态SQL功能。在注解开发部分,展示了如何使用@Select、@Insert、@Update、@Delete等注解替代XML配置进行CRUDframework操作。(v1)动态SQL部分重点讲解了if标签的条件判断和trim标签的灵活运用,包括prefixOverrides、suffixOverrides、prefix、suffix等属性的使用方式。(v2)此外还介绍了where标签的简写功能,它能自动处理SQL语句中的and/or前缀。这些特性使MyBatis能够根据参

先做到 再看见 1457

使用MyBatis的动态SQL注解实现实体的CRUD操作

在使用MyBatis进行数据库操作时,动态SQL注解提供了一种优雅的方式来编写动态SQL语句。MyBatis 3.x 版本提供了以下四个CRUD的高级注解: @SelectProvider:用于构建动态查询SQL @InsertProvider:用于构建动态新增SQL @UpdateProvider:用于构建动态更新SQL。 @DeleteProvider:用于构建动态删除SQL。 此外,我们将与MyBatis Plus中的`@Select`注解进行对比,展示MyBatis动态SQL注解的优势和灵活性。

后端开发 2525

Mybatis 通过注解的方式实现动态SQL

Mybatis 动态SQL 实现方式 第一种方式 在 mapper 的 interface类中使用注解的方式实现: 需要使用 <script></script> 标签包裹 可以正常的使用在 XML 的动态SQL 标签 @Select("<script> SELECT * FROM AREA WHERE 1 = 1 " + "<if...

Wayfreem的博客 5837

MyBatis 注解和Provider注解(动态构建SQL)使用

MyBatis 是一个 XML 驱动的框架。配置信息是基于 XML 的,到了MyBatis 3 有了基于注解配置,Java 注解的的表达力和灵活性十分有限,项目中有看到使用注解,简单记录下 参考文档:https://mybatis.org/mybatis-3/zh/java-api.html# 注解可以简化Mapper映射文件,但是动态Sql依然使用mapper文件。...

Charge8的博客 6795

mybatis注解实现动态sql

  在整合ssm的时候,遇到一个多表联合(多表,多条件组合,分页)查询的问题,需要自定义mapper.xml,  但本人又比较反感写xml文件,总感觉配置文件没有注解来的简洁,于是用到了 “注解实现动态sql” ,所以总结一下供日后回顾。 //简单的查询   第一步:定义一个实体类Student用作映射。 public class Student { private Integer i...

qq_43494025的博客 8032
上一篇: SpringBoot之上传文件
下一篇: SpringBoot之缓存
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值