mybatis plus中如何编写sql语句

 更新时间:2022年11月28日 12:07:50   作者:bosh_rong  
这篇文章主要介绍了mybatis plus中如何编写sql语句,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

sql语句是写在对应的xml文件中

首先要解决maven默认不加载xml文件的问题

1.首先要写入相关配置文件

在pom 导入下面内容

 <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>

在application中写入如下内容

mybatis-plus:
  mapper-locations: classpath*:**/xml/*.xml

2.在对应的serviceimpl中调用baseMapper 接口

应为在mybatis plus 中对应的serviceImpl 接口继承自对应的mapper接口,mapper接口又继承自baseMapper 接口。

比如说

baseMapper.countRegisterDay(day)

3.在mapper文件中编写对应的接口

 Integer countRegisterDay(String day);

4.在对应的xml 中编写sql语句

id 为方法的名字。resultType 为方法返回的类型

<?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.boshrong.ucentor.mapper.UcenterMemberMapper">
    <select id="countRegisterDay" resultType="java.lang.Integer">
        select count(*) from ucenter_member um where DATE (um.gmt_create)=#{day}
    </select>

</mapper>

注意若传入的值有多个参数怎么解决?

比如说方法为

 Integer countRegisterDay(String day,String time1);

sql 中获取多个值的方法可以有两种

1.方法一 ,通过索引获取

#{0} 获取day的值, #{1} 获取time1的值

2.方法二, 通过@Param获取

Integer countRegisterDay(@Param ("aa")String day,@Param ("bb")String time1);
  • #{aa},#{bb} 获取
  • #{} 与 ${} 的区别
  • #{} 是预编译处理,是占位符。 Mybatis 在处理 #{} 时,会将sql 中的#{} 替换成?号,调用PreparedStatement 来赋值。
  • ${} 是字符串替换,是拼接符。就是会将 KaTeX parse error: Expected 'EOF', got '#' at position 30: …Statement 来赋值。 #̲方式能够很大程度防止sql注入…方式。

mybatis plus sql语句集合

获取数据库中某个varchar字段的最大值

max(CONVERT(stat_date,UNSIGNED))

日期格式转换

DATE_FORMAT(update_time,‘%Y-%m-%d %T')

字符串拼接

concat(#{year},‘Y')

查询年份的当前年份的后面一年

DATE_FORMAT(DATE_SUB(CURDATE(),interval -1 year),‘%Y')

查询获取当前年份

DATE_FORMAT(CURDATE(),‘%Y')

left,right函数返回args最左边、右边的length个字符串

right(args, 2)

当前日期的前三个月日期

pay_time <![CDATA[<]]> now() - INTERVAL 3 MONTH AND now()

截取某一个字段中以某个字符开始截取

  • 以从后面开始第一个横杠为分割截取
SUBSTRING_INDEX( dep_name, ‘-',- 1 ) depName
  • 以第一个横杠为分割截取
SUBSTRING_INDEX( dep_name, ‘-',1 ) depName

IFNULL() 函数

IFNULL(expression, alt_value)如果第一个参数的表达式 expression 为 NULL,则返回第二个参数的备用值。

  • 返回列表中的最大值
GREATEST(expr1, expr2, expr3, …)
  • 返回列表中的最小值
LEAST(expr1, expr2, expr3, …)
  • 计算日期 d1->d2 之间相隔的天数
DATEDIFF(d1,d2)
  • 如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。
IF(expr,v1,v2)

find_in_set(str,strlist)

  • find_in_set判断是否包含某个字符串
  • str 要查询的字符串
  • strlist 字段名 参数以”,”分隔 如 (1,2,6,8,10,22)
  • 匹配个字段是否为纯数字 0为匹配纯数字 1为匹配不是纯数字
AND (TRIM(str) REGEXP ‘[^0-9.]') = 0
  • 将字符串转换为int数字类型
CAST(right(yearmth, 2) AS SIGNED)
  • 动态获取数据库某个字段来作为条件
FIND_IN_SET (year_id,(SELECT
GROUP_CONCAT(DISTINCT LEFT(字段, 4))
from table))

locate()函数

  • locate(subStr,string) :函数返回subStr在string中出现的位置
  • 只要找到返回的结果都大于0(即使是查询的内容就是最开始部分),没有查找到才返回0;
// 如果字符串 string 包含 subStr
locate(subStr,string) > 0
// 如果字符串 string 不包含 subStr
locate(subStr,string) = 0

locate()函数实现模糊查询

select * from user where locate('王',name)

假如现在需求是找出所有名字中含有王,但是不姓王的人找出来,我们用下面那种实现方式如下:

select * from user where locate('王',name,2)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java进行Appium自动化测试的实现

    Java进行Appium自动化测试的实现

    这篇文章主要介绍了Java进行Appium自动化测试的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Mybatis在insert插入操作后如何返回主键id问题

    Mybatis在insert插入操作后如何返回主键id问题

    这篇文章主要介绍了Mybatis在insert插入操作后如何返回主键id问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • java多线程三种上锁方式小结

    java多线程三种上锁方式小结

    本文主要介绍了java多线程三种上锁方式小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • SpringBoot发送html邮箱验证码功能

    SpringBoot发送html邮箱验证码功能

    这篇文章主要介绍了SpringBoot发送html邮箱验证码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • Mybatis自定义拦截器和插件开发详解

    Mybatis自定义拦截器和插件开发详解

    这篇文章主要给大家介绍了关于Mybatis自定义拦截器和插件开发的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Java for循环常见优化方法案例详解

    Java for循环常见优化方法案例详解

    这篇文章主要介绍了Java for循环常见优化方法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • SpringBoot整合mybatis-plus实现分页查询功能

    SpringBoot整合mybatis-plus实现分页查询功能

    这篇文章主要介绍了SpringBoot整合mybatis-plus实现分页查询功能,pringBoot分页查询的两种写法,一种是手动实现,另一种是使用框架实现,现在我将具体的实现流程分享一下,需要的朋友可以参考下
    2023-11-11
  • SpringBoot使用PageHelper分页详解

    SpringBoot使用PageHelper分页详解

    这篇文章主要介绍了SpringBoot使用PageHelper分页详解,我们在任何的系统中,分页功能是必不可少的,然而,对于这个功能如果有一种快速开发的实现方式,当然可以节省我们很多的时间了,接下来,我就给大家基于不同的环境来说说如何使用一个分页插件,需要的朋友可以参考下
    2023-10-10
  • 在Mybatis @Select注解中实现拼写动态sql

    在Mybatis @Select注解中实现拼写动态sql

    这篇文章主要介绍了在Mybatis @Select注解中实现拼写动态sql,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Netty的心跳检测解析

    Netty的心跳检测解析

    这篇文章主要介绍了Netty的心跳检测解析,客户端的心跳检测对于任何长连接的应用来说,都是一个非常基础的功能,要理解心跳的重要性,首先需要从网络连接假死的现象说起,需要的朋友可以参考下
    2023-12-12

最新评论