Mybatis-Plus -04 条件构造器与代码生成器
Mybatis-Plus--条件构造器与代码生成器
- 1 条件构造器
- 1.1 > < =
- 1.2 in notin
- 1.3 between...
- 1.4 orderBy...
- 1.5 like...
- 2 代码生成器
- 2.1 引入依赖
- 2.2 生成器代码
1 条件构造器
通过条件构造器可以更加轻松的完成条件查询与更新(底层就是动态SQL)
1.1 > < =
- ge 小于 <
- 例:
lt("age", 18)
—>age < 18
- gt 大于 >
- 例:
gt("age", 18)
—>age > 18
- eq 等于 =
- 例:
eq("name", "老王")
—>name = '老王'
@Test
public void test1(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();//查询年龄大于24岁用户,姓名为tomqueryWrapper.ge("age",24).eq("name","tom");List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);
}
1.2 in notin
in
in(R column, Collection<?> value) in(boolean condition, R column, Collection<?> value)
- 字段 IN (value.get(0), value.get(1), …)
- 例:
in("age",{1,2,3})
—>age in (1,2,3)
in(R column, Object... values) in(boolean condition, R column, Object... values)
- 字段 IN (v0, v1, …)
- 例:
in("age", 1, 2, 3)
—>age in (1,2,3)
notIn
otIn(R column, Collection<?> value) notIn(boolean condition, R column, Collection<?> value)
- 字段 NOT IN (value.get(0), value.get(1), …)
- 例:
notIn("age",{1,2,3})
—>age not in (1,2,3)
notIn(R column, Object... values) notIn(boolean condition, R column, Object... values)
- 字段 NOT IN (v0, v1, …)
- 例:
notIn("age", 1, 2, 3)
—>age not in (1,2,3)
@Test
public void test2(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();//查询id为1,3,5queryWrapper.in("id",1,3,5);List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);
}
1.3 between…
between
between(R column, Object val1, Object val2) between(boolean condition, R column, Object val1, Object val2)
- BETWEEN 值1 AND 值2
- 例:
between("age", 18, 30)
—>age between 18 and 30
notBetween
notBetween(R column, Object val1, Object val2) notBetween(boolean condition, R column, Object val1, Object val2)
- NOT BETWEEN 值1 AND 值2
- 例:
notBetween("age", 18, 30)
—>age not between 18 and 30
@Test
public void test3(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();//查询年龄在20~28之间queryWrapper.between("age",20,28);List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);
}
1.4 orderBy…
orderByAsc
orderByAsc(R... columns) orderByAsc(boolean condition, R... columns)
- 排序:ORDER BY 字段, … ASC
- 例:
orderByAsc("id", "name")
—>order by id ASC,name ASC
orderByDesc
orderByDesc(R... columns) orderByDesc(boolean condition, R... columns)
- 排序:ORDER BY 字段, … DESC
- 例:
orderByDesc("id", "name")
—>order by id DESC,name DESC
orderBy
orderBy(boolean condition, boolean isAsc, R... columns)
- 排序:ORDER BY 字段, …
- 例:
orderBy(true, true, "id", "name")
—>order by id ASC,name ASC
@Test
public void test4(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();//查询按照年龄降序,如果年龄相等按照姓名降序queryWrapper.orderByDesc("age","name");List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);
}
@Test
public void test5(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();//查询姓名中包含%S%//queryWrapper.like("name","s");//查询姓名中包含%S//queryWrapper.likeLeft("name","s");//查询姓名中包含S%queryWrapper.likeRight("name","s");List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);
}
1.5 like…
like
like(R column, Object val) like(boolean condition, R column, Object val)
- LIKE ‘%值%’
- 例:
like("name", "王")
—>name like '%王%'
notLike
notLike(R column, Object val) notLike(boolean condition, R column, Object val)
- NOT LIKE ‘%值%’
- 例:
notLike("name", "王")
—>name not like '%王%'
likeLeft
likeLeft(R column, Object val) likeLeft(boolean condition, R column, Object val)
- LIKE ‘%值’
- 例:
likeLeft("name", "王")
—>name like '%王'
likeRight
likeRight(R column, Object val) likeRight(boolean condition, R column, Object val)
- LIKE ‘值%’
- 例:
likeRight("name", "王")
—>name like '王%'
notLikeLeft
notLikeLeft(R column, Object val) notLikeLeft(boolean condition, R column, Object val)
- NOT LIKE ‘%值’
- 例:
notLikeLeft("name", "王")
—>name not like '%王'
notLikeRight
notLikeRight(R column, Object val) notLikeRight(boolean condition, R column, Object val)
- NOT LIKE ‘值%’
- 例:
notLikeRight("name", "王")
—>name not like '王%'
isNull
isNull(R column) isNull(boolean condition, R column)
- 字段 IS NULL
- 例:
isNull("name")
—>name is null
isNotNull
isNotNull(R column) isNotNull(boolean condition, R column)
- 字段 IS NOT NULL
- 例:
isNotNull("name")
—>name is not null
@Test
public void test6(){UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();//修改姓名中不包含s的用户updateWrapper.notLike("name","s");User user = new User();user.setName("尼古拉斯");userMapper.update(user,updateWrapper);
}
2 代码生成器
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
2.1 引入依赖
- 代码生成器依赖
- 模板引擎 依赖
- 日志依赖
<!-- 代码生成器依赖 -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version>
</dependency>
<!-- 模板引擎 依赖 -->
<dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version>
</dependency>
<!-- 日志依赖 -->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.30</version>
</dependency>
2.2 生成器代码
- 代码生成器相关诶之
- 数据源配置
- 包配置
- 策略配置
- 其他配置
public class CodeGenerator {public static void main(String[] args) {// 代码生成器AutoGenerator mpg = new AutoGenerator();// 全局配置GlobalConfig gc = new GlobalConfig();//获取当前路径String projectPath = System.getProperty("user.dir");//设置生成代码位置gc.setOutputDir(projectPath + "/src/main/java");//设置代码文件头作者gc.setAuthor("ying");//设置是否在资源管理器打开gc.setOpen(false);//设置生成代码是否覆盖gc.setFileOverride(true);//设置去除生成代码接口中的Igc.setServiceName("%sService");mpg.setGlobalConfig(gc);// 数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql:///java11");dsc.setDriverName("com.mysql.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("123456");mpg.setDataSource(dsc);// 包配置PackageConfig pc = new PackageConfig();//设置模块名称//pc.setModuleName("shopping");pc.setParent("com.ying");pc.setEntity("pojo");pc.setMapper("mapper");pc.setService("service");pc.setController("controller");mpg.setPackageInfo(pc);// 策略配置StrategyConfig strategy = new StrategyConfig();//表名 下划线转驼峰strategy.setNaming(NamingStrategy.underline_to_camel);//字段名 下划线转驼峰strategy.setColumnNaming(NamingStrategy.underline_to_camel);//实体类是否使用lombokstrategy.setEntityLombokModel(true);//Controller是否使用RESTful风格(RestController)strategy.setRestControllerStyle(true);//设置逻辑删除字段(数据库中需要有deleted字段)strategy.setLogicDeleteFieldName("deleted");//设置乐观锁注解(数据库中需要有version字段)strategy.setVersionFieldName("version");//设置生成的表名strategy.setInclude("user");mpg.setStrategy(strategy);mpg.execute();}
}
相关文章:
Mybatis-Plus -04 条件构造器与代码生成器
Mybatis-Plus--条件构造器与代码生成器 1 条件构造器1.1 > < 1.2 in notin1.3 between...1.4 orderBy...1.5 like... 2 代码生成器2.1 引入依赖2.2 生成器代码 1 条件构造器 通过条件构造器可以更加轻松的完成条件查询与更新(底层就是动态SQL) 1.1 > < ge 小于 &l…...

MapReduce高级篇——全局计数器
MapReduce Counter 计数器 概念 在执行MapReduce程序的时候,控制台输出日志中通常下面片段,可以发现输出信息中的核心词是counter,中文叫做计数器 在执行MapReduce城西过程中,许多时候,用户希望了解程序的运行情况,H…...

轻松掌握K8S目录持久卷PV/PVC的kubectl操作知识点04
1、介绍 在docker中可以将容器中的目录挂载出来,在k8s中pod可以部署在不同节点,假如该节点的机器宕机了,k8s可能就会将此Pod转移到其他机器,就不是原先的机器了。k8s有自己的一套挂载方案,如下图所示, 原…...

Appuploader证书申请教程
转载:IOS证书制作教程 点击苹果证书 按钮 点击新增 输入证书密码,名称 这个密码不是账号密码,而是一个保护证书的密码,是p12文件的密码,此密码设置后没有其他地方可以找到,忘记了只能删除证书重新制作&…...

acwing17给了一个头节点,从尾到头输出链表的元素,顺便练练容器
方法一 建立一个数组,从头到尾遍历一遍链表,然后将链表的每个元素的值赋给数组 犯了一个错误 新建的vector容器是一个可变长的数组,要想像数组下标那样访问前提是这个下标所指向的元素得存在,这也就跟那个声明一维数组得写出长度来…...

Linux 性能优化大全!
性能指标 高并发和响应快对应着性能优化的两个核心指标:吞吐和延时 应用负载角度:直接影响了产品终端的用户体验 系统资源角度:资源使用率、饱和度等 性能问题的本质就是系统资源已经到达瓶颈,但请求的处理还不够快࿰…...

精通 TensorFlow 2.x 计算机视觉:第一部分
原文:Mastering Computer Vision with TensorFlow 2.x 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,…...
mulesoft MCIA 常用词汇、知识点汇总
mandate 授权 carry out 执行 subscriptions 订阅 stakeholders 利益相关者 periodically 定期地 Idempotent 幂等的 on-premises 本地 mutual 相互 two-way 双向的 arbitrary 任意的 mandatory 强制性的 round-robin 循环 replicate 复制 compensating actions 补…...
Python 单样本学习实用指南:1~6 全
原文:Hands-On One-shot Learning with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关心如…...
心血管疾病数据探索分析
心血管疾病数据探索分析 初步数据分析 首先,导入挑战所需模块: import pandas as pd import numpy as np import seaborn as sns import matplotlib import matplotlib.pyplot as plt import matplotlib.ticker from matplotlib import rcParams import warnings warnings…...
Pandas的应用-1
Pandas是一个开源的数据分析工具,它提供了高性能、易于使用的数据结构和数据分析工具。其中,Series是Pandas中最基本的数据结构之一,它是一种类似于一维数组的对象,可以储存任何数据类型。在本文中,我们将介绍Series的…...

【状态估计】电力系统状态估计的虚假数据注入攻击建模与对策(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
【Spring】Spring @Import注解的使用和源码分析
文章目录 介绍Import导入bean的三种方式普通类ImportSelector接口ImportBeanDefinitionRegistrar接口 源码解析总结 介绍 今天主要介绍Spring Import注解,在Spring中Import使用得比较频繁,它得作用是导入bean,具体的导入方式有多种ÿ…...

C++中的类与对象
类与对象 我们在C语言中自定义的struct 叫做结构体,而在C中我们把struct升级为了类,并且还加入了一个class,也称为类,那么我们今天就来看一下结构体和类的不同和相同 1.结构体与类 我们在C语言中的结构体是struct,而…...
探索Qt图像处理的奥秘:从入门到精通
探索Qt图像处理的奥秘:从入门到精通(Exploring the Secrets of Qt Image Processing: From Beginner to Expert) 引言:Qt图像处理的概述和应用(Introduction: Overview and Applications of Qt Image Processing&#…...

springboot+vue企业人事人力资源管理系统java公司员工出差考勤办公OA系统
“简易云”是这个系统的名字 (6)系统管理:主要下拉分为角色管理、菜单管理; 角色管理:此页面可对角色进行增删改查操作,可修改不同角色的权限; 菜单管理:此页面可配置系统可展示的菜…...
设计模式-模板模式在Java中的使用示例
场景 模板模式 模板模式又叫模板方法模式(Template Method Pattern),是指定义一个算法的骨架,并允许子类为一个 或者多个步骤提供实现。 模板模式使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为型设计模式。 模…...
回溯算法及其应用
回溯是一种常见的算法思想,用于解决许多优化问题。该算法的核心思想是穷举所有可能的解决方案,然后通过剪枝来减少不必要的计算,以获得最优解。 回溯算法常用于求解组合、排列、子集和等问题。通常情况下,回溯算法需要递归地搜索…...
如何一步步打造完美的成绩查询系统平台?
想要搭建一个高效的在线发布成绩查询系统平台,首先需要了解哪些技术和工具是必备的。本文将为您介绍一些主流的技术和工具,帮助您快速搭建一个稳定、安全、易用的成绩查询系统。 想要制作在线成绩查询系统平台有两种方式,第一种是直接使用易…...
P1026 [NOIP2001 提高组] 统计单词个数
题目描述 给出一个长度不超过 200200 的由小写英文字母组成的字母串(该字串以每行 2020 个字母的方式输入,且保证每行一定为 2020 个)。要求将此字母串分成 �k 份,且每份中包含的单词个数加起来总数最大。 每份中包含…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
Python爬虫实战:研究Restkit库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...
JavaScript 标签加载
目录 JavaScript 标签加载script 标签的 async 和 defer 属性,分别代表什么,有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …...