【实际开发04】- XxxMapper.xml/java - 批量处理

news2025/3/1 22:59:21

目录

1. Model : XxxMapper.xml

1. IotTypeMapper.xml 基础 × 3 tips

2. Model : XxxMapper.java

1. IotTypeMapper.java 基础 × 3 tips

3. Others info

1. 模糊查询

2. 模糊查询 'name' 导致的异常 --> `name

3. 连接查询 Where 限制主表 , 谨慎 : 使用副表限制 - ★

4. 数据去重 : group by | distinct ( 视情况选择 )

5. 以 map 为查询条件的 API

6. 标签判断处理 : String / 集合 / 基本数据类型参数为 0

7. 将 null 值更新到数据库


1. Model : XxxMapper.xml


1. IotTypeMapper.xml 基础 × 3 tips

    <!-- IotTypeVO查询映射结果 -->
    <resultMap id="IotTypeVOResultMap" type="com.hzcloud.iot.resource.vo.IotTypeVO">
        <result column="id" property="id" />
        <result column="name" property="name" />
        <result column="type" property="type" />
        <result column="attribute" property="attribute" />
        <result column="status" property="status" />
        <result column="create_time" property="createTime" />
        <result column="update_time" property="updateTime" />
        <result column="del_flag" property="delFlag" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id ,  name ,  type ,  attribute ,  status ,  create_time ,  update_time ,  del_flag
    </sql>

    <!-- 无参查询房源类型List -->
    <select id="queryIotTypeList"  resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List" />
        FROM iot_type
        WHERE del_flag = 0 AND status = 0
        ORDER BY create_time DESC
    </select>

    <!-- 条件查询类型字段List -->
    <select id="queryByConditions"  resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List" />
        FROM iot_type
        <where>
            del_flag = 0
            <if test="iotTypeDTO.type != null and iotTypeDTO.type != '' ">
                AND type = #{iotTypeDTO.type}
            </if>
            <if test="iotTypeDTO.status == null or iotTypeDTO.status == '' ">
                AND status in (0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9)
            </if>
            <if test="iotTypeDTO.status != null and iotTypeDTO.status != '' ">
                AND status = #{iotTypeDTO.status}
            </if>
        </where>
        ORDER BY create_time DESC
    </select>

优化纪录

1、查存时增加状态 status 条件 , 启动 status 禁用全局隐藏机制 - 20.10.24


2. Model : XxxMapper.java


1. IotTypeMapper.java 基础 × 3 tips

    /**
     * 无参查询资源类型List
     * @return 资源类型展示对象集合IotTypeVOList
     */
    List<IotTypeVO> queryIotTypeList();

    /**
     * 条件查询资源类型List
     * @param iotTypeDTO 资源类型接收入参DTO
     * @return 资源类型展示对象集合IotTypeVOList
     */
    List<IotTypeVO> queryByConditions(@Param("iotTypeDTO") IotTypeDTO iotTypeDTO);

    /**
     * 条件查询资源类型Page
     * @param page 分页参数
     * @param iotTypeDTO 资源类型接收入参DTO
     * @return 资源类型展示对象集合IotTypeVOList
     */
    IPage<IotTypeVO> queryByConditions(@Param("page")Page page ,  @Param("iotTypeDTO") IotTypeDTO iotTypeDTO);


3. Others info


1. 模糊查询

    <if test="userDTO.name != null and userDTO.name != ''">
        and u.name like CONCAT('%' , #{userDTO.name} , '%')
    </if>

%通配符使用

-- 匹配以"yves"开头的记录:(包括记录"yves")
SELECT * FROM products WHERE products.prod_name like 'yves%';

-- 匹配包含"yves"的记录(包括记录"yves")
SELECT * FROM products WHERE products.prod_name like '%yves%';

-- 匹配以"yves"结尾的记录(包括记录"yves" , 不包括记录"yves " , 也就是yves后面有空格的记录 , 这里需要注意)
SELECT * FROM products WHERE products.prod_name like '%yves';

_ 通配符使用

--匹配结果为: 像"yyves"这样记录.
SELECT * FROM products WHERE products.prod_name like '_yves';

--匹配结果为: 像"yvesHe"这样的记录.(一个下划线只能匹配一个字符 , 不能多也不能少)
SELECT * FROM products WHERE products.prod_name like 'yves__';


2. 模糊查询 'name' 导致的异常 --> `name

         <if test="iotTypeDTO.name != null and iotTypeDTO.name != '' ">
                AND 'name' like CONCAT('%' , #{iotTypeDTO.name} , '%')
            </if>

 导致模糊查询 name 参数失效

API 调用返回结果集 : {}

修改

            <if test="iotTypeDTO.name != null and iotTypeDTO.name != '' ">
                AND name like CONCAT('%' , #{iotTypeDTO.name} , '%')
            </if>


3. 连接查询 Where 限制主表 , 谨慎 : 使用副表限制 - ★

SELECT
img.id ,  img.name ,  img.cause ,  img.tenant_id ,  img.room_id ,  img.compere_id ,  img.preparer_id ,  img.type ,  img.level ,  img.start_time ,  img.end_time , 
img.introduction ,  img.status ,  img.create_time ,  img.update_time ,  img.del_flag ,  irm.structure_id  , irm.name AS roomName
FROM iot_meeting img
LEFT JOIN iot_room irm ON img.room_id = irm.id
WHERE
img.del_flag = 0 AND irm.del_flag = 0
AND to_days(img.start_time) = to_days("2021-04-015 12:00:00")

SELECT
img.id ,  img.name ,  img.cause ,  img.tenant_id ,  img.room_id ,  img.compere_id ,  img.preparer_id ,  img.type ,  img.level ,  img.start_time ,  img.end_time , 
img.introduction ,  img.status ,  img.create_time ,  img.update_time ,  img.del_flag ,  irm.structure_id  , irm.name AS roomName
FROM iot_meeting img
LEFT JOIN iot_room irm ON img.room_id = irm.id
WHERE
img.del_flag = 0 AND irm.del_flag = 0
AND to_days(img.start_time) = to_days("2021-04-015 12:00:00")


4. 数据去重 : group by | distinct ( 视情况选择 )


5. 以 map 为查询条件的 API


6. <if> 标签判断处理 : String / 集合 / 基本数据类型参数为 0


7. 将 null 值更新到数据库

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

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

相关文章

Java程序员如何使用代码来计算最大公约数和最小公倍数?

沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 一、前言 嘿&#xff0c;怎么突然讲到最大公约数了&#xff1f; 因为RSA算法&#xff0c;对于与欧拉结果计算的互为质数的公钥e&#xff0c;其实就需要使用到辗转相除法来计算出最大公约数。…

Java文件IO操作

目录 一、了解什么是文件 狭义的文件&#xff1a; 广义的文件&#xff1a; 二、文件的路径 ①文件的绝对路径 ②文件的相对路径 三、Java对于文件的操作 File类的构造方法 File类的普通方法 四、对于文件的内容操作 ①FileInputStream&#xff08;文件输入流&#xf…

ES索引备份还原

ES索引备份还原一、规划二、备份方案一&#xff1a;备份到集群共享目录方案二&#xff1a;备份到HDFSES还原一、规划 es数据出于线上数据安全考虑&#xff0c;对于es已有的索引数据可以进行安全备份&#xff0c;通常可以将es备份到共享文件目录或者一些其它的数据存储的文件系…

Splashtop Personal 安装教程

splashtop Personal 安装教程1. Splashtop Personal 概述2. splashtop Personal 安装步骤2.1 主控端&#xff08;Splashtop Business app&#xff09;2.2 被控端&#xff08;Splashtop Streamer&#xff09;2.3 打开主控端结束语1. Splashtop Personal 概述 Splashtop Persona…

java跳出循环的几种方式

在java中可以使用break、continue、return语句跳出for循环。break用于完全结束一个循环&#xff0c;跳出循环体&#xff1b;continue只是中止本次循环&#xff0c;接着开始下一次循环&#xff1b;return的功能是结束一个方法。 break语句 break用于完全结束一个循环&#xff0…

4.5 集成运放的种类及选择

一、集成运放的发展概述 集成运放自 20 世纪 60 年代问世以来&#xff0c;飞速发展&#xff0c;目前已经历了四代产品。 第一代产品基本沿用了分立元件放大电路的设计思想&#xff0c;采用了集成数字电路的制造工艺&#xff0c;利用了少量横向 PNP 管&#xff0c;构成以电流源…

Axure 原型设计的三步进阶法

平时跟很多同学朋友的交流过程中&#xff0c;对于axure的需要做到怎样&#xff0c;众说纷纭。总结了一下大家的意见&#xff0c;分别有以下几种&#xff1a; 1、掌握基本的搭建方法即可&#xff0c;不需要做交互&#xff1b; 2、既然做就要做到尽善尽美&#xff0c;页面和交互…

【Python百日进阶-数据分析】Day221 - plotly使用日期类型轴的时间序列 2

文章目录九、具有自定义日期范围的时间序列图9.1 使用plotly.express9.2 使用graph_objects9.3 手动设置日期范围十、带范围滑块的时间序列十一、带范围选择器按钮的时间序列十二、按缩放级别自定义刻度标签格式十三、隐藏周末和假期13.1 隐藏正常周末13.2 隐藏周末和指定日期1…

Windows 11关闭系统更新的方法有哪些?

之前问的最多的就是Win10关闭更新的方法&#xff0c;现在轮到了Windows11&#xff0c;下面我们就具体来看看如何关闭Windows11的系统更新。方案一&#xff1a;使用注册表编辑器关闭Win11更新Windows注册表实质上是一个庞大的数据库&#xff0c;存储着各种各样的计算机数据与配置…

Windows系统下Python安装教程

Python安装环境为Windows10系统&#xff08;64&#xff09; 1.Python下载 选择Python官网进行下载&#xff08;Welcome to Python.org&#xff09;&#xff0c;进入网站&#xff0c;点击Downloads&#xff0c;进入下载模块&#xff0c;鼠标指针放到Download&#xff0c;选择Wi…

聚焦行业,2022巨杉客户案例及产品荣获多项殊荣

2022年&#xff0c;巨杉客户实践案例及产品 广受肯定&#xff0c;荣获多项殊荣 荣誉不仅属于巨杉 它源自于每一位客户的信任和支持 感谢每一位客户对巨杉产品的选择和认可 客户创新实践案例 巨杉联合江阴农商行获评爱分析银行数字化创新实践案例 9月&#xff0c;在“2022…

InstallShield 制作INF驱动安装程序

题外话&#xff1a; 使用INF文件制作经过签名的CAT文件可以参考如下博文&#xff1a; https://blog.csdn.net/qq_29729577/article/details/113537243 回归正题&#xff1a; 本例使用InstallShield 2020版本 驱动文件准备 将INF、CAT、SYS等驱动相关文件放至同一目录下&…

【动态内存管理】C语言

前言&#xff1a; 为什么会存在动态内存分配 我们以前学过的开辟空间的方式有两个特点&#xff1a; 1 空间开辟大小是固定的&#xff1b; 2.数组在申明的时候&#xff0c;必须指定数组的长度&#xff0c;它所需要的内存在编译时分配&#xff1b; 但是对于空间的需求&#xff0c…

Qt基于CTK Plugin Framework搭建插件框架--插件通信【注册接口调用】

文章目录一、前言二、插件完善2.1、添加接口文件2.2、添加接口实现类2.3、服务注册&#xff08;Activator注册服务&#xff09;三、接口调用四、接口 - 插件 - 服务的关系4.1、1对14.2、多对14.3、1对多一、前言 通过Qt基于CTK Plugin Framework搭建插件框架–创建插件一文&am…

解决方案|Keithley吉时利源表测试软件的典型应用及案例介绍

数字源表又称源测量单元(SMU)&#xff0c;是数字万用表(DMM)、电压源、实际电流源、电子负载和脉冲发生器的有用功能集成在仪器中&#xff0c;相当于电压源、电流源、电压表、电流表和电阻表的综合体可以作为四象限电压源或电流源提供精确的电压或电流&#xff0c;同时测量电流…

聚类模型(K-means聚类,系统聚类,DBSCAN算法)

所谓的聚类&#xff0c;就是将样本划分为由类似的对象组成的多个类的过程。聚类后&#xff0c;我们可以更加准确的在每个类中单独使用统计模型进行估计、分析或预测&#xff1b;也可以探究不同类之间的相关性和主要差异。聚类和分类的区别&#xff1a;分类是已知类别的&#xf…

Kafka 生产者

Kafka 生产者 生产者就是负责向 Kafka 发送消息的。 生产者业务逻辑 &#xff08;生产者业务逻辑流程&#xff09; 生产者开发示例 一个正常的生产逻辑流程如下&#xff1a; 配置生产者客户端参数及创建相应的生产者实例 构建待发送的消息 发送消息 关闭生产者实例 生…

CSS权威指南(八)基本元素框

文章目录1.基本元素框2.内边距3.边框4.轮廓5.外边距1.基本元素框 文档中每个元素都会生成一个矩形框&#xff0c;我们称之为元素框。这个框体描述元素在文档布局中所占的空间。因此&#xff0c;元素框之间是有影响的&#xff0c;涉及位置和尺寸。 &#xff08;1&#xff09;宽…

如何在 Excel VBA 中插入行

在本文中,我将解释如何使用VBA(Visual Basic for Applications)在Excel中插入行。VBA 是一种编程语言,适用于在Excel和其他Office程序中工作的人员,因此可以通过编写所谓的宏来自动化Excel中的任务。使用VBA编码,我们可以执行Excel中执行的所有大多数任务,就像复制、粘贴…

【手写 Vue2.x 源码】第十六篇 - 生成 render 函数 - 代码拼接

一&#xff0c;前言 上篇&#xff0c;生成 ast 语法树 - 构造树形结构部分 基于 html 特点&#xff0c;使用栈型数据结构记录父子关系开始标签&#xff0c;结束标签及文本的处理方式代码重构及ast 语法树构建过程分析 本篇&#xff0c;使用 ast 语法树生成 render 函数 - 代…