Mybatis模糊查询——三种定义参数方法和聚合查询、主键回填

news2025/1/15 6:26:44

目录

相关导读

一、使用#定义参数

1. 持久层接口添加根据名字内容模糊查询方法

2. UserMapper.xml映射文件添加标签

3. 添加测试方法

4. 运行结果

二、使用$定义参数

1. UserMapper.xml映射文件更改标签内容

2. 修改测试方法

3. 运行结果

三、使用标签定义参数

1. UserMapper.xml映射文件更改标签内容

2. 运行结果

四、聚合查询

1. 持久层接口添加查询所有用户个数方法

2. UserMapper.xml添加标签

3. 添加测试方法

4. 运行结果

五、主键回填

1. 持久层接口添加新增用户方法

2. UserMapper.xml添加标签

3. 添加测试方法

4. 运行结果


相关导读

Mybatis专栏:

Mybatis系列专栏MyBatis入门配置
Mybatis入门案例【超详细】
MyBatis配置文件 —— 相关标签详解
Mybatis模糊查询——三种定义参数方法和聚合查询、主键回填
Mybatis动态SQL查询 --(附实战案例--8888个字--88质量分)
Mybatis分页查询——四种传参方式
Mybatis一级缓存和二级缓存(带测试方法)
Mybatis分解式查询
Mybatis关联查询【附实战案例】
MyBatis注解开发---实现增删查改和动态SQL
MyBatis注解开发---实现自定义映射关系和关联查询

一、使用#定义参数

1. 持久层接口添加根据名字内容模糊查询方法

// 根据名字内容模糊查询
    List<User> findByNameLike(String username);

2. UserMapper.xml映射文件添加标签

<!-- 使用#定义参数 -->
    <select id="findByNameLike" parameterType="string"             
    resultType="com.mybatisstudy.pojo.User">
        select * from user where username like #{name}
    </select>

        我们看到在映射文件中,parameterType的值为 string 而没有写java.lang.String ,这是为什么呢?参数/返回值类型为基本数据类型/包装类/String等类型时,我们可以写全类名,也可以写别名。

        下表就是一些数据类型对应的别名

数据类型

别名
byte_byte
long_long
short_short
int_int
int_integer
double_double
float_float
boolean_boolean
Stringstring
Bytebyte
Longlong
Shortshort
Intergerint / interger
Doubledouble
Floatfloat
Booleanboolean
Datedate
BigDecimaldecimal / bigdecimal
Objectobject
Mapmap
HashMaphashmap
Listlist
ArrayListarraylist
Collectioncollection
Iteratoriterator

3. 添加测试方法

// 测试根据名字模糊查询
    @Test
    public void testFindByNameLike(){
        String like = "%l%";
        List<User> list = userMapper.findByNameLike(like);

        list.forEach(System.out::println);
    }

4. 运行结果

OK,这里是成功查询出来了,并且控制台打印日志也和我们的参数一致 

二、使用$定义参数

模糊查询如果不想在调用方法时参数加%,可以使用拼接参数的方式设置Sql:

1. UserMapper.xml映射文件更改标签内容

<!-- 使用$定义参数 -->
    <select id="findByNameLike" resultType="com.mybatisstudy.pojo.User" parameterType="string">
        select * from user where username like '%${value}%'
    </select>

2. 修改测试方法

// 测试根据名字模糊查询
    @Test
    public void testFindByNameLike(){
        String like = "l";
        List<User> list = userMapper.findByNameLike(like);

        list.forEach(System.out::println);
    }

3. 运行结果

 #和$的区别:

  1. #表示sql模板的占位符,$表示将字符串拼接到sql模板中。
  2. #可以防止sql注入,一般能用#就不用$。
  3. ${}内部的参数名必须写value。

三、使用<bind>标签定义参数

如果使用 # 还不想在调用方法的参数中添加 % ,可以使用 <bind> , <bind> 允许我们在 Sql语句以外创建一个变量,并可以将其绑定到当前的Sql语句中。用法如下:

1. UserMapper.xml映射文件更改标签内容

<!-- 使用<bind>标签定义参数 -->
    <select id="findByNameLike" parameterType="String" resultType="com.mybatisstudy.pojo.User">
        <bind name="likeName" value="'%' + username + '%'"/>
        select * from user where username like #{likeName}
    </select>

2. 运行结果

四、聚合查询

1. 持久层接口添加查询所有用户个数方法

// 查询用户总数
    int findCount();

2. UserMapper.xml添加标签

<!-- 聚合查询 -->
    <select id="findCount" resultType="int">
        select count(id) from user
    </select>

3. 添加测试方法

// 测试聚合查询方法
    @Test
    public void testFindCount(){
        System.out.println(userMapper.findCount());
    }

4. 运行结果

  

还是比较可靠的,确实查询出来了用户总数 

五、主键回填

        有时我们需要获取新插入数据的主键值。如果数据库中主键是自增的,这时我们就需要使用MyBatis的主键回填功能。

1. 持久层接口添加新增用户方法

// 主键回填-新增用户
    void add2(User user);

2. UserMapper.xml添加标签

<!-- 主键回填 -->
    <insert id="add2" parameterType="com.mybatisstudy.pojo.User">
        <!-- keyProperty:主键属性名,keyColumn:主键列名,resultType:主键类型,order:执行时机 -->
        <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
            select last_insert_id();
        </selectKey>
        insert into user(username,sex,address)
        values (#{username},#{sex},#{address})
    </insert>

        SELECT LAST_INSERT_ID():查询刚刚插入的记录的主键值,只适用于自增主键,且必须和insert语句一起执行。

3. 添加测试方法

// 测试主键回填功能
    @Test
    public void testAdd2(){
        User user = new User("Lions","man","Beijing");
        userMapper.add2(user);

        session.commit();
        System.out.println(user.getId());
    }

4. 运行结果

        好,控制台是成功显示添加了,用户id为11,那我们看看表里面是否成功添加了 

        确实是成功添加了,ok,本篇文章到此为止了,感谢小伙伴的浏览,顺便点击下面投一下票囖,看看您是否有学到了呢 

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

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

相关文章

JavaWeb开发 —— MyBatis入门

目录 一、快速入门程序 二、配置SQL提示 三、JDBC 四、数据库连接池 五、lombok工具包 MyBatis是一款优秀的 持久层Dao层 框架&#xff0c;用于简化JDBC的开发。 MyBatis本是 Apache的一个开源项目iBatis, 2010年这个项目由apache迁移到了 google code&#xff0c;并且改…

企业为什么都需要产品手册?

随着科技的不断发展和市场竞争的日益激烈&#xff0c;企业在推广和销售产品时需要给客户提供更多的信息和保障&#xff0c;而产品手册就成为了必不可少的工具之一。本文将从以下几个方面详细介绍企业为什么都需要产品手册。 产品手册的定义和作用 产品手册是一本介绍企业产品…

【C++初阶】:指针空值nullptr

指针空值nullptr 一.空指针二.空指针nullptr 一.空指针 在良好的C/C编程习惯中&#xff0c;声明一个变量时最好给该变量一个合适的初始值&#xff0c;否则可能会出现不可预料的错误&#xff0c;比如未初始化的指针。如果一个指针没有合法的指向&#xff0c;我们基本都是按照如下…

无人机巡检智能一体化解决方案

随着无人机技术的不断发展&#xff0c;无人机应用领域已经越来越生活化&#xff0c;其产品不仅在军事、商业等领域得到了广泛应用&#xff0c;也在普通人的生活中得到了广泛应用。无人机的自动巡检是无人机应用的一个重要方向&#xff0c;具有广阔的发展前景&#xff0c;本文将…

太阳的G2

我已经忘记是怎么喜欢上保罗的 入职腾讯的第一天&#xff0c;同事看到我的英文名cris&#xff0c;就笃信我应该是保罗的球迷。 是的&#xff0c;我是保罗的球迷「当然&#xff0c;不只是保罗的球迷」。 14-15赛季&#xff0c;保罗在的快船跟马刺鏖战7场&#xff0c;硬是在第7场…

NumberPicker分析(二)

NumberPicker分析(二) NumberPicker继承自LinearLayout。一般而言&#xff0c;无论是继承自View&#xff0c;还是继承自ViewGroup&#xff0c;必然会经过如下的几个阶段&#xff1a; onMeasureonLayoutonDraw onMeasure 在onMeasure方法测量当前控件大小&#xff0c;为正式…

Faster RCNN系列2——RPN的真值与预测值概述

Faster RCNN系列&#xff1a; Faster RCNN系列1——Anchor生成过程 Faster RCNN系列2——RPN的真值与预测值概述 Faster RCNN系列3——RPN的真值详解与损失值计算 Faster RCNN系列4——生成Proposal与RoI Faster RCNN系列5——RoI Pooling与全连接层 对于目标检测任务&#xf…

Replicator简介

Replicator 文章目录 ReplicatorReplicator简介合成数据训练背后的理论Replicator核心组件已知的问题 Replicator简介 Omniverse Replicator 是一个高度可扩展的框架&#xff0c;构建在可扩展的 Omniverse 平台上&#xff0c;可生成物理上准确的 3D 合成数据&#xff0c;以加速…

传输线的物理基础(十):特性阻抗的频率变化

到目前为止&#xff0c;我们一直假设传输线的特性阻抗随频率保持不变。正如我们所见&#xff0c;从传输线前端看&#xff0c;输入阻抗与频率密切相关。毕竟&#xff0c;在低频时&#xff0c;远端开路的传输线的输入阻抗看起来像一个电容器&#xff0c;阻抗开始很高&#xff0c;…

JavaScript中的执行上下文和执行栈

执行上下文概念以及理解 执行上下文是评估和执行JavaScript代码环境的抽象概念&#xff0c;但我们在JavaScript中所做的声明变量&#xff0c;声明函数&#xff0c;执行函数。他们都是在执行上下文中运行&#xff0c;也有了所谓的作用域。 执行上下文的类型 执行上下文分为三…

创建vite+vue+electron项目

写在前面的废话 首先&#xff0c;这是一篇缝合文&#xff0c;我的目的就是想用vite、vue结合electron打包一个windows应用&#xff1b;其次&#xff0c;项目只是这三个工具的简单应用&#xff0c;目前还没有往里面添加其他内容。再次&#xff0c;项目过程中参考了google的多篇文…

执行数学的运算

数学是计算机编程的重要能力。遗憾的是&#xff0c;对shell脚本来说&#xff0c;这个处理过程比较麻烦。在shell脚本中两种途径来进行数学运算。 expr命令 最开始&#xff0c;Bourne shell提供了一个特别的命令用来处理数学表达式。expr命令允许在命令行上处理数学数学表达式。…

EMQX vs VerneMQ | 2023 MQTT Broker 对比

引言 EMQX 和 VerneMQ 都是用 Erlang/OTP 开发的高性能、分布式开源 MQTT Broker&#xff0c;以其稳定性、容错性和扩展性著称。 EMQX 是目前全球最受欢迎的 MQTT Broker 之一&#xff0c;而 VerneMQ 项目近年来却没有积极地开发和维护。 本文是《2023 年 MQTT Broker 对比》…

可视化电子标签在仓储管理上的应用

随着经济快速增长和激烈的国内外市场竞争&#xff0c;要求企业运作的每个环节反应要迅速&#xff0c;经济转型要求更趋向改善工作流程、提高作业效率、减低运作成本、增加企业效益成为当务之急。虽然许多企业都有实施库存管理系统&#xff0c;但系统主要以人工盘点和走单据流程…

请收下这些软件测试学习干货,不看后悔一辈子

学习软件测试的过程中会遇到很多很多的困难和挑战&#xff0c;只有跨过这些困难和挑战&#xff0c;才有机会挑战软件测试领域的高薪offer。今天我们就来梳理一下&#xff0c;学习软件测试的过程中&#xff0c;我们一般都会遇到哪些困难&#xff0c;我们又当如何克服这些困难。 …

ChatGPT/大模型+零代码,给中小企业带来哪些机会?

ChatGPT让2023年成了AI之年。正如iPhone在2007年开启了智能手机时代&#xff0c;我们现在正在进入人工智能时代。 新形势下&#xff0c;零代码应如何借势发力&#xff1f;伙伴云“AI零代码”给出了答案。 作为零代码领域的头部平台&#xff0c;伙伴云全量发布【AI零代码应用搭…

暖通空调系统智能化故障检测诊断研究综述与展望

暖通空调系统智能化故障检测诊断研究综述与展望 【摘 要】暖通空调系统智能化化故障检测与诊断对提高运维水平和能源效率具有重要意义。 本文总结了暖通空调故障检测与诊断领域近二十多年来的研究历程&#xff0c;探讨了基于规则、基于模型和基于数据等三类主流方法的优劣&…

一键生成!如何为整个go项目自动添加单测

效果 为go项目中每个go文件生成对应的test文件&#xff0c;为每个接口生成对应的单测接口。 类似于这样&#xff0c;为go项目中每个包都生成一个test文件&#xff0c;单测模板如下&#xff1a; 比如函数接口为func releaseEndpoint(instanceID string, endpointID string) er…

微信小程序中使用 wx.getLocation获取当前详细位置并计算距离

文章目录 前言1&#xff0c;wx.getLocation()2&#xff0c;获取详细地址3&#xff0c;计算距离4&#xff0c;报错信息&#xff1a; getLocation:fail 频繁调用会增加电量损耗5&#xff0c;报错信息&#xff1a; 请求源未被授权 前言 wx.getLocation只能够获取经纬度&#xff0c…

java Maven 的理解

一、maven项目产生的原因 当开发两个Java项目&#xff0c;姑且把它们称为A、B&#xff0c;其中A项目中的一些功能依赖于B项目中的某些类&#xff0c;那么如何维系这种依赖关系的呢&#xff1f; 答&#xff1a;可以将B项目打成jar包&#xff0c;然后在A项目的Library下导入B的ja…