Mybatis动态sql语句及模糊查询札记

Mybatis--模糊查询--分页查询--动态sql语句 Mybatis学习02 一、模糊查询 1、mapper接口层 package com.java.mapper; import com.java.model.EmpEntity; import java.util.List; import java.util.Map; public interface EmpMapper { /** * 参数为String类型的模糊查询 ... 阅读详情

1 单条件模糊查询

  • sql中字符串拼接模糊匹配
<select id="getComponentByName" parameterType="String" resultMap="component">
	SELECT * FROM dmp_component WHERE name like CONCAT(CONCAT('%',#{name}),'%')
</select>
  • 忽略大小写匹配
<select id="getComponentByName" parameterType="String" resultMap="component">
	SELECT * FROM dmp_component where upper(code_name) like CONCAT(CONCAT(‘%’,upper(#{codeName})),’%’)
</select>

这里稍微岔开话题,Mysql默认的字符检索策略:utf8_general_ci,表示不区分大小写;此情况下,当用户认证系统中若查询字段是关键字时,大小写可能都能登录成功,如下语句返回的结果也是一样。

select * from user where username = 'admin' and password = 'admin';
select * from user where username = 'Admin' and password = 'admin';
select * from user where username = 'ADMIN' and password = 'admin';

因此我们在创建表时,应设置表的collate属性为utf8_general_cs或者utf8_bin;如果已经创建表,则直接修改字段的Collation属性为utf8_general_cs或者utf8_bin。utf8_general_cs表示区分大小写,utf8_bin表示二进制比较,同样也区分大小写 。(Mysql5.6.10版本不支持utf8_genral_cs)

2 多条件查询动态sql语句

多条件查询的要点是判断查询条件是否为空,再拼接sql语句。在mybatis中提供了if标签和where 标签。两种标签的用法如下:

  • if标签
    mybatis 中的if标签有些类似于EL表达式的使用,test中可以直接写入类中的属性或者key值。
<select id="selectComponentByNameAndType" resultMap="component"> 
	SELECT 
	* 
	FROM 
	dmp_component 
	WHERE 1=1 
	<if test="name != null and name != ''"> 
		and name = #{name} 
	</if> 
	<if test="type != null and type != ''"> 
		and type = #{type} 
	</if> 
</select> 
  • where标签
    where标签 替换了上述代码中的 WHERE 1=1 。 mybatis中的where 标签会判断标签内是否有内容, 如果有内容则自动生成where 并把 where 后面的第一个and 和一个空格,or和一个空格 去掉。
<select id="selectFIleByNameAndType" resultMap="HdfsFile">
   SELECT 
   * 
   FROM
   dmp_hdfs_file
   <where>
	   <if test="name != null and name != ''">
	   	and name = #{name}
	   </if>
	   <if test="type != null and type != ''">
	   	and type= #{type}
	   </if>
   </where>
  </select>
  • choose , when 和 otherwise 标签
    当所有条件不满足时,执行otherwise标签的内容。
<select id="selectComponentCat" resultMap="componentCategory">
   SELECT 
   * 
   FROM
   dmp_component_category
   <where>
   <choose>
    <when test="category_id != null and category_id != ''">
       and category_id = #{categoryId}
    </when>
    <when test="name != null and name != ''">
       and name = #{name}
    </when>
    <otherwise>
      category = #{category}
    </otherwise>
   </choose>
   </where>
  </select>

choose跟 JAVA 中的if-else(也有说switch)效果差不多,是按照条件的顺序进行匹配,当 when 中有条件满足的时候,就会跳出 choose,即所有的 when 和 otherwise 条件中,只有一个会输出,当所有的when条件都不满足时,输出 otherwise 中的内容。所以上述语句的意思非常简单。

  • set标签
    set标签常用于update操作,并且会自动过滤其他无关字段
 <update id="updateComponent" >
  UPDATE 
  dmp_component
  <set>
    <if test="codeName != null and codeName != ''">
       codeName = #{codeName }
    </if>
    <if test="platform != null and platform != ''">
       , platform = #{platform}
    </if>
  </set>
  WHERE id = #{id} 
  </update>
  • foreach标签
    foreach 用于处理数组或者list集合,下面是一个批量更新List的例子
<update id="updateModel">
    <foreach separator=";" collection="list" item="meta" index="index">
        update dmp_model
        <set>
           expriment_id=#{meta.exprimentId}
        </set>
           where id =#{meta.id}
    </foreach>
</update>

注,如果运用了set语法,mysql的批量更新是要我们主动去配置数据库连接的,连接地址需加上&allowMultiQueries=true
如:

type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/dmp_experiment?characterEncoding=utf-8&allowMultiQueries=true
username: root
password: 123456

批量添加例子如下:

<insert id="insertParameter">
  INSERT INTO 
  dmp_parameter
  (tab, label, value_name, value_type, value_note, value_data) 
  VALUES
  <foreach collection="list" item="meta" separator=","> 
   (#{meta.tab},#{meta.label},#{meta.valueName},#{meta.valueType},#{meta.valueNote},#{meta.valueData})
  </foreach>
</insert>

若参数为数组, 则collection只能为“array” ;参数为List集合,则collection只能为 “list” ,item指代集合中的每一个对象,上述写作meta。separator=”,”的含义是每条数据以 , 分割。 其他动态语句中有属性 open 和 close, 其含义是指在遍历开始和结束时分别添加其内容。

MyBatis-Plus 自定义大写字母格式化策略 MyBatis-Plus 是一款便捷、高效、低耦合的 MyBatis 扩展工具,它扩展了 MyBatis 的功能,简化了 CRUD 操作,并提供了很多实用的功能。在实际开发中,我们经常需要对数据库表、字段等进行命名规范,而通常命名规范中有的是下划线命名,有的是驼峰命名。MyBatis-Plus 默认是使用下划线命名的,但是可以通过自定义大写字母格式化策略来适应不同的命名规范。我们需要实现接口,自定义大写字母格式化策略。@Override@Override/*** 下划线转驼峰*/ 阅读详情

相关推荐

查询插件,支持模糊查询,忽略大小写,多个关键字

查询插件,支持模糊查询,忽略大小写,多个关键字

mybatis-plus的一些使用案例

在创建和修改的时候,需要判断库名是否重复,而库名是全英文,所以要忽略字母大小写,大小写不同被认为是相同的字母。把数据库里的字段,还有要查的条件字段,都转成小写或者大写,然后再判断是否相同。

weixin_44823875的博客 9014

基于Ansys Fluent 的颗粒分离/过滤解决方案

过滤是指通过特殊装置将颗粒移除,将流体提纯净化的过程。过滤的方式很多,应用的物系也很广泛,固-液、固-气、大颗粒-小颗粒等。

sh_djoin的博客 1855

Java:62-Mybatis高级介绍

多条件查询(三种) : 使用 #{arg0}-#{argn} 或者 #{param1}-#{paramn} 获取参数 使用注解,引入 @Param() 注解获取参数 使用pojo 对象传递参数 模糊查询 : 方式一: 方式二 : #{}:表示一个占位符号 通过 #{} 可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换,# {}可以有效防止sql 注入 #{} 可以接收简单类型值或 pojo 属性值 如果 parameterTyp

qq_59609098的博客 3863

IEEE Access投稿全流程解析:从初次提交到最终接收的完整指南

本文详细解析了IEEE Access期刊从初次投稿到最终接收的全流程,包括ORCID注册、论文投稿七步法、回稿再投流程及最终版提交等关键步骤。特别强调了4-6周快速同行评审的特点,为研究者提供了一份实用的投稿指南,帮助高效完成IEEE Access期刊投稿。

weixin_29273849的博客 916

扣子(coze)案例^第22期:零代码打造小红书竞品监控系统+AI自动生成运营策略建议

本文详细介绍了如何利用扣子(coze)平台零代码搭建小红书竞品监控系统。该系统通过自动化工作流抓取竞品笔记数据,并存入飞书多维表格,结合AI能力自动生成包含可视化分析报告在内的运营策略建议,帮助运营者高效进行数据驱动的市场分析。

weixin_29313239的博客 1007

mybatis或mybatis-plus查询时忽略大小写方法,不用写xml文件

修改数据库中字段类型即可: utf8_bin 将字符串中的每一个字符用二进制数据存储,区分大小写。 utf8_genera_ci 不区分大小写,ci为case insensitive的缩写,即大小写不敏感。 utf8_general_cs 区分大小写,cs为case sensitive的缩写,即大小写敏感。 ...

m0_52789121的博客 7690

cocos creator接入微信登陆sdk ios篇

cocos creator接入微信登陆sdk ios篇 背景已经在Android篇里面交代过了,有兴趣的朋友可以再看看Android篇 步骤 去微信开放平台下载ios平台所需要的sdk 在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序id 在“info”标签栏的“LSApplicationQueriesSchemes“添加weixin 将SDK文件中...

凤小鹿的博客 6363

快速上手MybatisPlus

快速入手MybatisPlus –1:概念 国产开源框架,封装mybatis。 核心功能:简化mybatis开发,提高效率。 1:快速上手 引入mybatis-plus以及数据库驱动的依赖: <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version>

kehan666的博客 3964

GBT 27930-2015/2023国标充电协议A类CAN报文ID说明

国标充电CAN的ID,仅供学习参考。

qqq080的博客 7820

5 分钟上手 Kimi Work:安装、配置、跑通第一个任务

这篇文章提供了Kimi Work的快速入门指南,帮助用户在5分钟内完成从安装到运行第一个任务的全过程。主要内容包括: 安装步骤: macOS用户下载.dmg文件并拖入Applications Windows用户下载.exe安装包,需注意中文路径问题 初始设置: 使用现有Kimi账号登录 检查任务配额和文件访问权限 首个任务推荐: 建议从简单的本地文件整理开始(如按类型分类桌面文件) 详细说明了任务执行流程和审批机制 常见问题: 计划生成卡顿的解决方法 文件无变化的排查步骤 进阶建议: 提供难度递增的后续任务

sg_knight的专栏 2804

MyBatis动态SQL+模糊查询

满足条件的语句

m0_64481525的博客 1516

华为 MetaERP 财务模块的核心业务对象,按子模块与架构维度分类,以表格呈现,适配架构设计与实施落地

华为MetaERP财务模块基于4A架构(业务/应用/数据/技术)与TOGAF框架,实现业财一体化与全球合规。业务架构涵盖组织模型与核心流程,应用架构支撑财务操作,数据架构确保数据一致性,技术架构提供高性能技术底座。模块覆盖总账、应收应付、资产等子模块,支持多组织、多币种、多准则核算,通过实时会计引擎实现"交易即核算"。4A架构与TOGAF框架对应,实现业务能力、应用组件、数据模型与技术栈的深度融合,为华为全球化财务核算提供核心支撑。

金牌架构师 444

MyBatis动态语句且如何实现模糊查询及resultType与resultMap的区别---详细介绍

本文章详细讲述了MyBatis的动态语句且如何实现模糊查询及MyBatis的结果映射,感兴趣的小伙伴可了解本文章

m0_73192864的博客 1901

组态王的日历时间控件脚本

日期时间控件中的脚本中在小于10的月份和天数前必须要加上0,这是由首字符对比机制规定的,首字母相同,就不再不做对比了,比如1和11,是一样的。首字母不同,再比较下一位。 float Ayear1; float Amonth1; float Aday1; string temp1; Ayear1=sd.Year; Amonth1=sd.Month; Aday1=sd.Day; temp1=StrFromInt( Ayear1, 10 ); if(Amonth1<10) temp1=temp1+"-0"+

逍遥子的博客 5718

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Mybatis系列(二)之动态SQL和模糊查询

Mybatis动态SQL和模糊查询

lijie1025的博客 1692

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

myBatis 动态sql、模糊查询及分页

1).动态SQL,通过MyBatis提供的各种标签对条件作出判断以实现动态拼接SQL语句,主要是where部分有变化。2).常用的动态SQL标签有、、、等。3).MyBatis的动态SQL语句,与JSTL标签中的语句非常相似。4).动态SQL应用场景主要用于解决查询条件不确定的情况。在程序运行期间,根据用户提交的查询条件进行查询。提交的查询条件不同,执行的SQL语句不同。若将每种可能的情况都由程序员逐一列出,......

weixin_62322136的博客 1703

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

详解Mybatis模糊查询和动态sql语句的用法

Mybatis 模糊查询和动态sql语句 模糊查询 对数据库最常用的操作就是查询了,但是如何使用Mybatis进行模糊查询呢?下面先看一个简单的模糊查询 <select id="select01" resultMap="BasicResultMap"> SELECT * FROM oa_employee WHERE emp_name LIKE #{asd} </select> 这是一条伪模糊查询, 因为没有实现真正的模糊 “%”。参数为字符

weixin_51495453的博客 1896

MyBatis进阶:掌握MyBatis动态SQL与模糊查询、结果映射,让你在面试中脱颖而出!!

本文将从进阶的角度出发,详细介绍MyBatis的动态SQL和模糊查询,同时也会讲解结果映射的技巧。通过学习本文,你将能够更加熟练地使用MyBatis,提高自己的开发效率,为面试增添信心。快来学习吧!如果你正在寻找一份高薪稳定的工作,那么掌握MyBatis动态SQL与模糊查询、结果映射是必不可少的技能。这些技能可以让你在面试中展现出自己的实力,从而获得更好的职业发展机会。所以不要犹豫了,赶快来学习吧!

万维网连五洲,二进制写尽天下事,喜欢结识新伙伴寻找志同道合的朋友,欢迎一起探讨学习 1736

mybatis/mybatis-plus模糊查询语句特殊字符转义拦截器

在开发中,我们通常会遇到这样的情况。用户在录入信息是录入了‘%’,而在查询时无法精确匹配‘%’。究其原因,‘%’是MySQL的关键字,如果我们想要精确匹配‘%’,那么需要对其进行转义。 1.使用mybatis提供的拦截器拦截所有的查询请求。 具体实现在代码中均有注释 import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.executor.Executor;

u010044936的博客 8256

mybatis动态SQL之foreach、模糊查询、分页

前言 之前我们讲过了mybatis的sql语句是由我们手动编写的,但是我们的mybatis逆向工程生成的xxMapper.xml中会自动生成一部分动态的sql 什么叫做动态SQL? 根据用户提供的参数,动态决定查询语句依赖的查询条件或SQL语句的内容。 这篇博客主要讲述mybatis的动态SQL以及其中的分页。 为什么要将分页特意做一遍? Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量offset和边界limit取结果),在大数据量的情况下这样的分页基本上是没有用的。 解析myba

JiangHu_Java的博客 1560

MyBatis的动态SQL语句

MyBatis的动态SQL语句

二哈喇子! 1051

Mybatis单表操作之普通操作、模糊查询、分页查询、动态SQL

目录 前言 1、构建数据库 2、 普通操作 3、模糊查询 4、分页查询 ​5、动态SQL 前言 最近有点学累了,很久没有学习新东西了,花了一个晚上的时间归纳和整理了Mybatis对表的操作,主要是对单表进行操作,包括基本的单表操作CRUD,以及模糊查询、分页查询及动态SQL等 。后面会陆续把一对多,多对一查询及多表查询整理一下。 1、构建数据库 在学习之前,你首先要先建一个数据库,本文用NaviCat建了一个数据库ssmbuild,里面放了一张books表。然后,把核心配置文件、..

静水流深,沧笙踏歌 2965

MyBatis进阶:掌握MyBatis动态SQL与模糊查询、结果映射

本文将介绍MyBatis中的动态SQL、模糊查询和结果映射等特性,帮助大家更好地使用MyBatis进行数据库操作。模糊查询是在数据库查询中常见的需求之一。动态SQL是指根据不同的条件生成不同的SQL语句,以适应不同的查询需求。在使用MyBatis中拥有多个场景,返回的结果是多样的,resultType/resultMap。①返回单表的对应的实体类,仅有一个查询结果,可以用resultType/resultMap。②返回单表的对应的实体类,有多个查询结果,可以用resultType/resultMap。

m0_74018330的博客 995

关于mybatis动态SQL语句的写法

由于mybatis是一个轻量级的框架,SQL语句shi自己写的,可以不断的优化SQL语句,提高查询的效率,近来用到了动态SQL,写了一些简单的SQL语句,如下所示: car_id, car_name, car_color, car_price, car_desc selec

XXSession的博客 1822

Mybatis之动态SQL(带你了解动态SQL的魅力)

MyBatis中的动态SQL是一种在SQL语句中根据条件动态生成不同部分的技术。它允许我们根据不同的条件来构建不同的SQL语句,从而实现更灵活的查询和更新操作。在MyBatis中,我们可以使用动态SQL来处理各种情况,例如根据不同的条件拼接WHERE子句、根据条件选择不同的列、根据条件判断是否包含某个元素等等。MyBatis提供了一些标签和函数来实现动态SQL,其中最常用的是if、choose、when、otherwise和foreach标签。

weixin_74352229的博客 2324
上一篇: 百度坐标转换,以及国测局、WGS84(GPS)坐标系之间的转换札记
下一篇: TCP/IP粘包拆包现象及netty解决方案
zhg_vincent
博客等级 码龄12年 93粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值