Mybatis别名 动态sql语句 分页查询

news2024/12/22 18:29:31

给Mybatis的实体类起别名

给Mybatis的xml文件注册mapper映射文件

动态sql语句

        1 if

        2 choose

         3 where

        4 foreach

一)if

        查询指定名称商品信息

        语法:

        SELECT * FROM goods     

        where  1=1

                <if test ="gName!=null">

                and g.g_name like concat('%',#{gName},'%')

                </if>

         test中添加判断条件,结果为true内容拼接到where语句中。

         test中形参不用加#{}

         注意没有if else,但可以使用多个if并列,但每个if都要判断拼接

二)choose:从多个分支中选择一个执行 等同if else

        语法:

       SELECT * FROM goods

        where 1=1

         <choose>

        <when test = "gName!=null">

                and g.gname like concat('%',#{gName},'%')

        </when>

        <when test = "gPrice!=null">

                and  g.gPrice<=#{gPrice}

        </when>

        </choose>

        choose语句只会选择唯一一个执行,谁先满足条件先执行谁

        没有满足条件的可以添加<otherwise></otherwise>标签执行拼接内部sql语句。

三)where标签 --->trim(自适应where标签,可以自定义删除关键词)

        语法

        where元素只会在子元素返回任何内容情况下才插入<where>标签

        只有在子元素(如 <if> 标签)返回了具体的内容或结果时,才会在生成的 SQL 中插入 <where> 标签及其内容

        拼接的sql语句开头有and  or  ,where标签也会正确的去除

       SELECT * FROM user

<where>

        <if test="id != null">

                AND id = #{id}

        </if>

        <if test="name != null">

                AND name = #{name}

        </if>

</where>

四)foreach

<delete id="deleteByList">
    delete from goods
    where g_id in
          <foreach item="item" collection="list"
              open = "(" separator="," close=")">
          #{item}
          </foreach>
</delete>

list为传入的形参,

所以在对应mapper接口方法形参为List类型的list

或者写成@Param("list") List list

<delete id="deleteByArray">
    delete from goods
    where g_id in
          <foreach item="item" index="index" collection="array"
              open = "(" separator="," close=")">
          #{item}
          </foreach>
</delete>

Array为传入的形参,

所以在对应mapper接口方法形参为Integer [] 类型的array

或者写成@Param("array") Integer [] array

 分页查询

        1在sql语句中添加limit关键词

                主要数据:pageIndex:当前页码,pageCount:每页的数量

select *
from goods
limit #{index},#{count}

         使用pagehelper的jar工具包进行分页查询

 

            GoodsMapper mapper = SqlSessionUtil.getMapper(GoodsMapper.class);
            PageHelper.startPage(index, count,true,true,true);
            List<Goods> goodsList = mapper.getAll();
            PageInfo<Goods> goodsPageInfo = new PageInfo<>(goodsList);
            SqlSessionUtil.commitSession();
            PageInfo<Goods> goodsByPage = goodsService.getGoodsByPage(1, 3);

        int pages = goodsByPage.getPages();
        long total = goodsByPage.getTotal();
        int pageNum = goodsByPage.getPageNum();
        int size = goodsByPage.getSize();

        System.out.println("总页数"+pages);
        System.out.println("总记录数据条数"+total);
        System.out.println("第几页"+pageNum);
        System.out.println("当前页记录数据数"+size);
           

 pagehelper的几种重载方法

  startPage(int pageNum, int pageSize)
  startPage(int pageNum, int pageSize, boolean count)
  startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) 
  startPage(int pageNum, int pageSize, String orderBy)

  1. startPage(int pageNum, int pageSize): 这个方法指定了要查询的页数和每页的数据量。它用于简单的分页查询。

  2. startPage(int pageNum, int pageSize, boolean count): 这个方法在第二个参数的基础上增加了一个 boolean 类型的参数,用于指示是否进行 count 查询。count 查询是为了获取总记录数,以便于计算总页数。如果传入 true,则会进行 count 查询;如果传入 false,则不进行 count 查询。

  3. startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero): 这个方法除了包含前两个参数外,还可以指定是否启用 "reasonable" 和 "pageSizeZero" 的设置。reasonable 设置表示是否启用合理化参数,默认为 false,表示不启用;pageSizeZero 表示当 pageSize 为 0 时是否返回全部结果,默认为 false,表示不返回全部结果。

  4. startPage(int pageNum, int pageSize, String orderBy): 这个方法还包含一个 orderBy 参数,用于指定结果集的排序方式。orderBy 参数是一个字符串,表示按照哪个字段进行排序,可以包含 ASC(升序)或 DESC(降序)等排序规则。

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

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

相关文章

|行业洞察·手机|《2024手机行业及营销趋势报告-18页》

报告的主要内容解读&#xff1a; 手机行业概述及品牌分布&#xff1a; 2022年&#xff0c;受疫情影响&#xff0c;中国国内手机市场出货量下降22.6%&#xff0c;总计2.72亿部。5G手机市场占有率中&#xff0c;苹果领先&#xff0c;其次是vivo、OPPO和华为。消费者换机时更注重性…

【MagicDrive环境配置】新手配俩星期版

1.创建一个新的环境conda create -n newdrive python3.8 2.激活该环境conda activate newdrive 3.下载MagicDrive源码 git clone --recursive https://github.com/cure-lab/MagicDrive.git&#xff0c;如果出现时间超时八成是网的问题&#xff0c;直接自己下载解压就好 3.我的…

【群智能算法改进】一种改进的同核分子优化算法 IHMO算法【Matlab代码#71】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 原始HMO算法2. 改进HMO算法2.1 改进的距离减小因子2.2 黄金正弦策略扰动 3. 部分代码展示4. 仿真结果展示5. 资源获取说明 【获取资源请见文章第5节&#xff1a;资源获取】 1. 原始HMO算法 同核分子优化算法&#x…

HarmonyOS 应用开发之UIAbility组件生命周期

概述 当用户打开、切换和返回到对应应用时&#xff0c;应用中的UIAbility实例会在其生命周期的不同状态之间转换。UIAbility类提供了一系列回调&#xff0c;通过这些回调可以知道当前UIAbility实例的某个状态发生改变&#xff0c;会经过UIAbility实例的创建和销毁&#xff0c;…

网络原理-传输层-UDP报文结构

本文介绍UDP报文 有很多友友搞不清楚UDP报文的详细结构还有TCP的详细结构,所以专门分开来讲 以免弄混. 首先我们先看一下整个UDP结构,让大家有一个全方面的认识 下面我们来详细解释UDP报 16位源端口号(本机):就是2字节大小,16个二进制位. 16位目的端口号(目的机):也是2字节…

如何构建一台机器学习服务器

系统信息 系统安装 系统安装这里就不再赘述&#xff0c;推荐使用ventory作为PE盘&#xff0c;来安装系统&#xff0c;这样方便快捷&#xff0c;可同时包含多个镜像&#xff0c;无需重复制作&#xff0c;需要注意的是在安装系统的时候需要手动进行分区&#xff0c;我们可以看一下…

uniApp使用XR-Frame创建3D场景(3)光源投影的运用。

上一篇讲解了如何在uniApp中创建xr-frame子组件并创建简单的3D场景。 这篇我们讲解光源在场景中的运用以及相关属性。 在子组件 xr-start的index.wxml文件中我们加入如下代码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr…

睿尔曼超轻量仿人机械臂之复合机器人底盘介绍及接口调用

机器人移动平台是一个包含完整成熟的感知、认知和定位导航能力的轮式机器人底盘产品级平台&#xff0c;产品致力于为各行业细分市场的商用轮式服务机器人提供一站式移动机器人解决方案&#xff0c;让合作伙伴专注在核心业务/人机交互的实现。以下是我司产品双臂机器人以及复合升…

主机安全-德迅卫士

什么是主机安全&#xff1f; 主机安全&#xff0c;其核心内容包括安全应用交付系统、应用监管系统、操作系统安全增强系统和运维安全管控系统。它的具体功能是指保证主机在数据存储和处理的保密性、完整性&#xff0c;可用性&#xff0c;它包括硬件、固件、系统软件的自身安全&…

HCIA-Datacom H12-811 题库补充(3/28)

完整题库及答案解析&#xff0c;请直接扫描上方二维码&#xff0c;持续更新中 OSPFv3使用哪个区域号标识骨干区域&#xff1f; A&#xff1a;0 B&#xff1a;3 C&#xff1a;1 D&#xff1a;2 答案&#xff1a;A 解析&#xff1a;AREA 号0就是骨干区域。 STP下游设备通知上游…

蓝桥杯_day6

文章目录 不同路径不同路径II拿金币珠宝的最高价值 不同路径 【题目描述】 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为…

啥也不会的大学生看过来,这8步就能系统入门stm32单片机???

大家好&#xff0c;今天给大家介绍啥也不会的大学生看过来&#xff0c;这8步就能系统入门stm32单片机&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 对于没有任何基础的大学生来…

GPT:多轮对话并搭建简单的聊天机器人

1 多轮对话 多轮对话能力至关重要&#xff0c;它不仅能深化交流&#xff0c;精准捕捉对方意图&#xff0c;还能促进有效沟通&#xff0c;增强理解。在智能客服、教育辅导等领域&#xff0c;多轮对话更是提升服务质量、增强用户体验的关键。 注意&#xff1a;大模型没有多轮对话…

JAVA使用POI实现Excel单元格合并-02

JAVA使用POI实现Excel单元格合并 实现效果 解释&#xff1a;只要是遇见与前一行相同的数据就合并 引入jar <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></depe…

OpenCV 如何使用 XML 和 YAML 文件的文件输入和输出

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;如何利用OpenCV4.9离散傅里叶变换 下一篇: 目标 本文内容主要介绍&#xff1a; 如何使用 YAML 或 XML 文件打印和读取文件和 OpenCV 的文本条目&#xff1f;如何对 OpenCV …

如何选择合适的充电桩主控制板

充电桩主控制板是充电桩不可或缺的核心元件之一&#xff0c;它的功能多样&#xff0c;包括控制、保护、监测、报警和记录等。随着充电基础设施的不断完善&#xff0c;选择合适的充电桩主控制板成为设计过程中至关重要的一环。然而&#xff0c;在市场上琳琅满目的产品中做出选择…

20221124 kafka实时数据写入Redis

一、上线结论 实现了将用户线上实时浏览的沉浸式视频信息&#xff0c;保存在Redis中这样一个功能。为实现沉浸式视频离线推荐到实时推荐提供了强有力的支持。目前只是应用在沉浸式场景&#xff0c;后续也能扩展到其他所有场景。用于两个场景&#xff1a;&#xff08;1&#xf…

一分钟开服 《幻兽帕鲁》游戏专属服务器by京东云主机

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程&#xff0c;非常简单&#xff0c;京东云推出幻兽帕鲁镜像系统&#xff0c;镜像直接选择幻兽帕鲁镜像即可一键自动部署&#xff0c;不需要手动操作&#xff0c;真正的新手0基础部署幻兽帕鲁&#xff0c;阿腾云atengyun.…

创新指南|如何将人工智能应用于未来的创新管理——并不断付诸实践

ChatGPT 的推出加剧了围绕人工智能的炒作&#xff0c;现在我们看到了前所未有的巨大进展。对于我们这些热衷于创新的人来说&#xff0c;这是一个激动人心的时刻。他们正在共同采取措施&#xff0c;充分利用人工智能进行创新管理。本文将阐述人工智能能为创新管理做什么&#xf…

iptables添加端口映射,k8s主机查询不到端口但能访问。

研究原因&#xff1a;k8s内一台主机使用命令查询没有80端口。但通过浏览器访问又能访问到服务。 查询了资料是使用了hostport方式暴露pod端口。cni调用iptables增加了DNAT规则。访问时流量先经过iptables直接被NAT到具体服务去了。 链接: K8s罪魁祸首之"HostPort劫持了我…