mybatis常用sql汇总

2023-11-15

select
    sum(case when ismm.smm_type = '1' and ismm .smm_status = '0' then ismm.smm_num else 0 end) as monthPurchaseNum,
    sum(case when ismm.smm_type = '2' and (ismm.smm_status = '0' or ismm.smm_status = '4') then ismm.smm_num else 0 end) as monthSelfNum,
    sum(case when ismm.smm_status = '1' or (ismm.smm_status = '4' and ismm.smm_inventory_status = '2') then ismm.smm_num else 0 end) as monthOutNum,
    sum(case when ismm .smm_status = '2' then ismm.smm_num else 0 end) as monthLoseNum,
    sum(case when ismm .smm_status = '3' then ismm.smm_num else 0 end) as monthReturnNum
from isp_stock_manage_message ismm
left join isp_general_purchase_apply_detail igpad on igpad.id = ismm.smm_apply_detail_id
left join isp_base_supplier ibs on ibs.lifnr = igpad.supplier_id
where ismm.delete_flg = '0' and ismm.smm_approve_status = '1'
<if test="smmVO.startTime != null and smmVO.endTime != null">
    and ismm.create_time between #{smmVO.startTime} and #{smmVO.endTime}
</if>
<if test="smmVO.startTime == null">
    and to_char(ismm.create_time,'yyyy-mm') = to_char(now(),'yyyy-mm')
</if>
<if test="smmVO.smmGoodsCode != null and smmVO.smmGoodsCode != ''">
    and ismm.smm_goods_code LIKE CONCAT('%', #{smmVO.smmGoodsCode},'%')
</if>
<if test="smmVO.applyDetailNo != null and smmVO.applyDetailNo != ''">
    and igpad.apply_detail_no LIKE CONCAT('%', #{smmVO.applyDetailNo},'%')
</if>
<if test="smmVO.supplierName != null and smmVO.supplierName != ''">
    and ibs.name LIKE CONCAT('%', #{smmVO.supplierName},'%')
</if>
<if test="smmVO.contractNo != null and smmVO.contractNo != ''">
    and igpad.contract_no LIKE CONCAT('%', #{smmVO.contractNo},'%')
</if>
<if test="smmVO.min != null and smmVO.min != ''">
    and abs(ismm.smm_num) &gt;= #{smmVO.min}
</if>
<if test="smmVO.max != null and smmVO.max != ''">
    and abs(ismm.smm_num) &lt;= #{smmVO.max}
</if>
===================================================================================
mapper层:
List<OOO> selectDisMsg(@Param(Constants.WRAPPER) QueryWrapper<OOO> ew);
xml层:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aaa.mapper.TableMapper">
    
    <resultMap id="ONUZdgh" type="com.eastcom_sw.cis.cam.entity.statistics.MsgSendRecordZdgh">
        <id column="ID_" property="id" />
    </resultMap>
    <select id="selectDisMsg" resultType="java.util.List" resultMap="ONUZdgh">
        select * from Table where ID_ in (select Max(ID_) from Table group by BATCH_ID)
        <if test="ew.sqlSegment != null and ew.sqlSegment != '' and ew.nonEmptyOfWhere">
            and ${ew.sqlSegment}
        </if>
    </select>
</mapper>

if 标签可以⾃动根据表达式的结果来决定是否将对应的语句添加到 SQL 中,如果条件不成⽴则不添加,
如果条件成⽴则添加。
where 标签可以⾃动判断是否要删除语句块中的 and 关键字,如果检测到 where 直接跟 and 拼接,则
⾃动删除 and,通常情况下 if 和 where 结合起来使⽤。
<select id="findByConditionWithIf" resultType="com.ykq.entity.Account">
         select * from account
        <where>
             <if test="name!=null and name!=''">
                 and name like concat('%',#{name},'%')
             </if>
             <if test="isdeleted!=null">
                  and isdeleted=#{isdeleted}
             </if>
        </where>
    </select>

<select id="findByConditionWithChoose" resultType="com.ykq.entity.Account">
         select * from account
         <where>
             <choose>
                 <when test="name!=null and name!=''">
                     and name like concat('%',#{name},'%')
                 </when>
                 <when test="isdeleted!=null">
                     and isdeleted=#{isdeleted}
                 </when>
                 <otherwise>
                     <![CDATA[and money <1000 ]]>
                 </otherwise>
             </choose>
         </where>
     </select>

=============================================================

<select id="qrySp" resultMap="BaseResultMap">
    select * from BBBB  where 1=1
    <if test="start_time != null and start_time != ''">
        and to_date(REQ_TIME,'yyyy-mm-dd hh24:mi:ss') &gt;= to_date(#{start_time,jdbcType=VARCHAR},'yyyy-mm-ddhh24miss')
    </if>
    <if test="end_time != null and end_time != ''">
        and to_date(REQ_TIME,'yyyy-mm-dd hh24:mi:ss') &lt;= to_date(#{end_time,jdbcType=VARCHAR},'yyyy-mm-ddhh24miss')
    </if>
    <if test="city != null and city != '' and city != '请选择地市'">
        and CITY = #{city,jdbcType=VARCHAR}
    </if>
    <if test="area != null and area != '' and area != '请选择区县'">
        and AREA = #{area,jdbcType=VARCHAR}
    </if>
    order by TIME desc
</select>

======================================================

<select id="queryBa" parameterType="java.lang.String" resultType="java.lang.String">
    select distinct BATCH_ID from BBBB where
    to_char(COLLECT_DATE,'yyyy-mm-dd hh24:mi:ss') like #{month,jdbcType=VARCHAR} and SCENE_ID = #{scene,jdbcType=VARCHAR}
    and SCENE_NAME like #{scene_name,jdbcType=VARCHAR}
</select>

-------------------------------------------------------------------------------------------------------------

  <!-- 下面association中的column:把第一次查询的某一个作为第二次查询的值
          select:的值是为下一个查询语句提供一名暗号,注意看第二个查询语句的id;
          就是这样将两次查询给关联起来
          -->
          <association property="teacher" javaType="Teacher" column="teacher_id" select="findTeacherById">
              <id column="t_id" property="tid"/>
              <result column="t_name" property="tname"/>
          </association>
      </resultMap>
      <select id="findClazzById" resultMap="ClazzMap">
            select * from class where c_id=#{cid}
      </select>

      <select id="findTeacherById" resultType="Teacher">
            select t_id tid,t_name tname from teacher where t_id=#{tid}
      </select>

 

---------------------------------------------------------------------------------------------------------------

 trim 标签中的 prefix 和 suffix 属性会被⽤于⽣成实际的 SQL 语句,会和标签内部的语句进⾏拼接,如果语句前后出现了 prefixOverrides 或者 suffixOverrides 属性中指定的值,MyBatis 框架会⾃动将其删除。
<select id="findByConditionWithChoose" resultType="com.ykq.entity.Account">
          select * from account
                 <trim prefix="where" prefixOverrides="or|and" >
                       <choose>
                           <when test="name!=null and name!=''">
                                and name like concat('%',#{name},'%')
                           </when>
                           <when test="isdeleted!=null">
                               and isdeleted=#{isdeleted}
                           </when>
                           <otherwise>
                             <![CDATA[or money <1000 ]]>
                           </otherwise>
                       </choose>
                 </trim>
    </select>

foreach 标签可以迭代⽣成⼀系列值,这个标签主要⽤于 SQL 的 in 语句。
<select id="findByConditionWithFor" resultType="com.ykq.entity.Account">
         select * from account
         <where>
              <if test="ids!=null and ids.length>0">
                  id in
                  <foreach collection="ids" open="(" close=")" separator="," item="id">
                      #{id}
                  </foreach>
              </if>
         </where>

    </select>

分页插件

<!--pageHelper的依赖-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.11</version>
        </dependency>

(2)使用分页插件 在mybatis配置文件中加入如下代码

 <plugins>
        <!-- com.github.pagehelper为PageHelper类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
        </plugin>
    </plugins>

测试:

AccountDao accountDao = session.getMapper(AccountDao.class);
        PageHelper.startPage(2,2); //设置分页的条件
        List<Account> all = accountDao.findAll();
        PageInfo pageInfo=new PageInfo(all);
        System.out.println("总页码:"+pageInfo.getPages());
        System.out.println("总条数:"+pageInfo.getTotal());
        System.out.println("当前显示的页码:"+pageInfo.getPageNum());
        System.out.println("当前页码的数据:"+pageInfo.getList());

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mybatis常用sql汇总 的相关文章

  • 关于数据库变更的通知

    我正在尝试一种场景 其中我想使用任何用户提交的更改来更新在不同 PC 上运行的桌面 UI 例如 Application1 安装在 PC1 PC2 和 PC3 上 假设所有 PC 都运行此应用程序 假设 PC1 上的用户 1 更改数据并提交到
  • HQL:从 Eager 表中获取连接集合

    我有四张桌子 RootNode Will return multiple root nodes SubNode Will return one sub node per root node SubNodeChildren1 Will ret
  • T-SQL:检查电子邮件格式

    我有这样的场景 我需要物理数据库中的数据完整性 例如 我有一个变量 email address VARCHAR 200 我想检查一下值是否为 email address是电子邮件格式 有人知道如何检查 T SQL 中的格式吗 非常感谢 我使
  • SQL Server 查看主键

    有没有办法在 sql server 中为视图提供主键 我知道在oracle中这是可能的 我不关心更新它的只读视图 但其他人正在 ms access 中使用它 所以我希望显示我知道正确的约束 是的 您可以创建一个索引视图 http msdn
  • 使用递归 CTE 遍历父/子树?

    我被 cte 困住了 我想要一个查询 其中第一个父级为空 上一个父级的子级将成为下一个父级的父级 依此类推 WITH RESULT PARENT CHILD TNAME LEVEL AS anchor SELECT E PARENT GEN
  • 对于 IN 列表中的缺失值返回 NULL

    我有一个这样的表 id val 1 abc 2 def 5 xyz 6 foo 8 bar 和一个像这样的查询 SELECT id val FROM tab WHERE id IN 1 2 3 4 5 返回 id val 1 abc 2 d
  • postgresql to_json() 函数转义所有双引号字符

    我编写了一个 plpgsql 脚本 它在字符串中生成一个 json 对象数组 但是在我使用 to json 方法将带有该字符串的变量传递给它之后 它返回一个带双引号的结果 并且每个双引号字符都被转义 但我需要原样的字符串 jsonResul
  • 如何将子表的删除级联到父表?

    我准备了a fiddle这说明了问题 http sqlfiddle com 15 e25c5 2 CREATE TABLE parent parent id integer primary key CREATE TABLE child ch
  • 如何在条件持续时在Mysql中选择行

    我有这样的事情 Name Value A 10 B 9 C 8 意思是 这些值是按降序排列的 我需要创建一个新表 其中包含占总值 60 的值 所以 这可能是一个伪代码 set Total sum value set counter 0 fo
  • ORACLE SQL 中的 MAX()

    我有一个表 存储已完成的维护任务的记录列表以及完成的日期和时间 我正在尝试执行子查询来提取具有最新日期的每个任务的记录 我的SQL语句是 SELECT ENGINEERING COMPLIANCE EO AS EO ENGINEERING
  • 如何将 SQL 查询结果导出为 csv 样式格式的字符串,然后将其保存到 Oracle 中的 clob 中?

    我有以下问题 我有一个表 Source Data 实际上 有很多不同的源表 我需要将其中的一些数据导出到 Result Table 中 对于每个源表 我都有一些返回数据的 sql 并且需要将其转换为类似 csv 的字符串 例如 Source
  • 是否可以将普通表与临时表进行左外连接?

    我创建 SQL Server 查询并有一个包含记录的普通表 另一方面有一个包含记录的临时表 该表不为空 并且所有字段都没有任何冲突 加入 可以连接这两个不同类型的表吗 SELECT NormalTable Entityname FROM N
  • SQL准备语句如何通过多个可能的菜单选择进行选择?

    所以我有 4 个菜单选择 产品 位置 课程类型和类别 所有这些都可以为空 使用 JSF 编程 但这应该与这个问题无关 因为它是一个 SQL 问题 菜单选择将向托管 bean 发送用户选择的变量 并使用准备好的语句使用用户选择的菜单中的信息
  • MySQL表按时间戳分区

    我已经对表进行了分区 由于内存不足错误 表太大 我已将其分区在时间戳列上 如下所示 CREATE TABLE test fname VARCHAR 50 NOT NULL lname VARCHAR 50 NOT NULL dob time
  • 使用SQL显示组内最小计数和最大计数

    Goal 我正在寻找一种方法来计算等于组的最小值或最大值的项目数 我的物品每隔几天就会收到一次 并且每两周输入一次 我需要查看每个 EntryDate 的最小和最大接收日期 以及最小和最大的项目计数 在 MS Access 中使用 SQL
  • Oracle中“NUMBER”和“NUMBER(*,0)”相同吗?

    在甲骨文中文档 http docs oracle com cd B28359 01 server 111 b28318 datatype htm i22289据说 数字 精度 小数位数 如果未指定精度 则该列将存储给定的值 如果 未指定比例
  • 在插入 SQLite 之前检查表 B 中的日期是否在表 A 中的日期之间

    我有一个名为 项目 的表 其中包含开始日期和结束日期 我还有一个名为 Plan 的表 它有自己的开始日期和结束日期列 但我通过某种方式验证计划开始 结束日期是否在匹配的项目开始 结束日期之间 我不知道在创建表或向计划表中插入行时添加检查是否
  • 如何为基于服务的数据库设置自动增量

    我在这里开始构建我的第一个本地数据库 基于服务的数据库 使用文本框将行写入基于服务的数据库 https stackoverflow com questions 39152801 write line to service based dat
  • 带触发器的物化视图?

    我可以在物化视图上创建触发器吗 我用的是甲骨文10g 是的你可以 请小心 这是什么Oracle 文档 http download oracle com docs cd B19306 01 server 102 b14200 statemen
  • SQL Server 2008中的分割函数

    I have Table1像这样的列 ID Name 1 MSSQL 2 MySQl 3 Oracle In Table2 我有一个像这样的专栏 Databasename 1 3 2 1 2 我的输出应该是 Databasename MSS

随机推荐

  • 【笔记】C++库函数——bitset

    笔记 C 库函数 bitset 看到有大佬掏出这个库函数 一愣 这绝对是未曾想象过的道路 长见识 有时候做题总能碰见稀奇古怪的库函数 每个都令我大开眼界 以后看到感兴趣的都会记录一下 感觉是个好东西 算是学习道路上的小小积累吧 抓紧记录一下
  • VSCode相对路径问题

    习惯了anaconda等环境写程序的同学 在使用VSCode时 遇到的一个问题就是相对路径问题 在anaconda中 相对路径是针对当前的文件的相对路径 在VSCode中 相对路径是针对当前项目文件夹的 如果需要将VSCode内的相对路径设
  • 对不起,其实我是.......

    大家好 最近在后台收到有同学问我 你是哪个学校的 又或者问我你今年大几了 其实 我想这些答案在大家心里面应该早已经有了答案 不过 今天说的不是这些 而是 没错 今天我来给大家推荐一款 马克思原理复习必背的小程序 由我们学校 校级组织 清泽心
  • Linux Top 命令指南

    top 命令允许用户监视 Linux 上的进程和系统资源使用情况 它是系统管理员工具箱中最有用的工具之一 并且在每个发行版中都预装了它 与 ps 等其他命令不同 它是交互式的 我们可以浏览进程列表 终止进程 等等 本文中 我们将了解如何使用
  • 倾斜摄影三维模型五种常见格式

    在倾斜摄影三维数据中 OSGB数据居多 航拍的影像经过建模软件处理产出之时 有很多成果的数据需要我们去选择输出 对于不同的项目需求 我们需要选择合适的输出数据格式 他们之间有什么区别 分别是应用在哪些个领域 今天分别以OSGB OBJ FB
  • ipsec.conf(5) - Linux man pag 中文翻译

    ipsec conf 5 Linux man page 英文网址 https linux die net man 5 ipsec conf 未经许可 禁止转载 请知悉 Name 名称 ipsec conf IPsec配置和连接 Descri
  • Java内存分配介绍

    Java内存分配为 栈 堆 方法区 本地方法栈和寄存器 字节码文件加载时进入的内存方法区 方法运行区域为栈 变量也是存储在栈中 new出来的东西会在堆内存中开辟空间并产生地址 public class ArrayDemo public st
  • esp8266-12f介绍与使用

    nodemcu 体积相对较大 而且价格也相对较高 这时候 esp12f就可以用来代替 使用 nodemcu v2 v3 使用的是esp12e 与esp12f只有布线上有所差别 是esp8266 12的增强版 esp 12F 引脚图 各个引脚
  • 成员函数在类外定义的时候,函数名为啥不能加static

    今天清理手机微信没用的数据 惊人啊 删了1G 的图 再删删其它没用的数据 腾出来3G 的空间 无意间发现了一张以前聊天时候的图 回忆了一下 当时讨论的是 为啥成员函数在类外定义时 函数名不能加static class Point publi
  • (一)python库httprunner4 用法

    4个命令 httprunner V httprunner h hrun xxx 运行yaml json pytest 会内部执行hmake hmake xxx 把yaml json格式转成pytest测试用例 一个yaml用例结构 由一个c
  • 服务器查看系统盘位置,云服务器ecs怎么查看系统盘

    云服务器ecs怎么查看系统盘 内容精选 换一换 本节介绍将Windows操作系统的KVM实例变更为擎天架构实例的操作步骤 KVM实例 参考规格清单 查询对应规格的虚拟化类型 擎天架构实例 选择 通用计算增强型C7 变更规格时不支持修改网络类
  • 小样本目标检测综述 --刘浩宇,王向军 --阅读笔记

    文章目录 1 基本背景 2 大样本与小样本的对比 3 在没有大量数据支持的情况下 小样本检测保证检测效果 有哪些解决方法 3 1 数据域 3 1 1 转化原有数据集 D t D t
  • Intel编译器的强大pragma:unroll_and_jam()/nounroll_and_jam()

    Intel官方文档 Hints to the compiler to enable or disable loop unrolling and jamming These pragmas can only be applied to ite
  • Vim快速移动光标至行首和行尾 、第一行和最后一行

    vi中跳到文件的第一行和最后一行 由于vi编辑器不能使用鼠标 所以一个大文件如果要到最后一行只用键盘下键的话会是一个很痛苦的过程 还好有各种比较快捷的方法归我们使用 1 vi 编辑器中跳到文件的第一行 a 输入 0 或者 1 回车 b 键盘
  • 如何一次性选中WORD文档中的所有表格

    1 将下面的脚本复制 Sub SelectAllTables Dim tempTable As Table Application ScreenUpdating False 判断文档是否被保护 If ActiveDocument Prote
  • B-S模式API数据传输方案

    随着面向服务技术架构的兴起 越来越多的应用系统开始进行分布式设计和部署 系统由原来的单一的技术架构变成了面向服务的多系统架构 原来在一个系统之间就可以完成的业务流程 现在要通过多系统之间的多次交互实现 那么面向服务的多系统架构之间必然有着大
  • 【openwrt】【编译问题】openwrt编译问题

    undefined reference to pthread once 在某次openwrt编译过程中出现了undefined reference to pthread once错误 具体报错信息如下 openwrt staging dir
  • 备战蓝桥杯day2

    23 01 07 蓝桥杯day2 CH2 杂题 一 填空题 所谓杂题是指没有明确的解题算法 通过思考寻找最简单的解题路径 解题方式包括但不限于手算 编程 excel和简单的python程序 对于一些填空题 手算有时候更加方便快捷 当然手快选
  • 虹膜识别论文5:DeepIrisNet2 2019年 学习心得

    DeepIrisNet2 Learning Deep IrisCodes from Scratch for Segmentation Robust Visible Wavelength and Near Infrared Iris Reco
  • mybatis常用sql汇总

    select sum case when ismm smm type 1 and ismm smm status 0 then ismm smm num else 0 end as monthPurchaseNum sum case whe