MyBatisPlus_查询篇_入门试炼_01

文章目录

      • 1、数据库 Schema 脚本如下:
      • 2、数据库 Data 脚本:
      • 3. 实战

现有一张 User 表,其表结构如下:

idnameageemail
1Jone18test1@gblfy.com
2Jack20test2@gblfy.com
3Sandy28test3@gblfy.com
4Jone21test4@gblfy.com
5Billie24test5@gblfy.com

1、数据库 Schema 脚本如下:

DROP TABLE IF EXISTS user;CREATE TABLE user
(id BIGINT(20) NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT(11) NULL DEFAULT NULL COMMENT '年龄',email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',create_time DATETIME DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (id)
);

2、数据库 Data 脚本:

DELETE FROM user;INSERT INTO user (id, name, age, email, create_time) VALUES
(1, 'Jone', 18, 'test1@gblfy.com','2019-01-11 14:20:20'),
(2, 'Jack', 20, 'test2@gblfy.com','2019-02-05 11:12:22'),
(3, 'Tom', 28, 'test3@gblfy.com','2019-02-14 08:31:16'),
(4, 'Sandy', 21, 'test4@gblfy.com','2019-01-14 09:15:15'),
(5, 'Billie', 24, 'test5@gblfy.com','2019-01-14 09:48:16');

3. 实战


package com.gblfy.springboot.mybatisplus.mapper;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.gblfy.springboot.mybatisplus.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@Slf4j
public class UserSelectTest {@Autowiredprivate UserMapper userMapper;@Testpublic void selectList() {//1.测试是否联通数据库 查询所有List<User> userList = userMapper.selectList(null);//2.断言 查询的数据是否是5条Assert.assertEquals(5, userList.size());//3.循环打印数据到控制台userList.forEach(System.out::println);}@Testpublic void insert() {User user = new User().builder().name("gblfy").age(2).email("gblfy@qq.com").build();int rows = userMapper.insert(user);log.info("影响数据库的条数: {}", rows);}/*** 通过主键id查询用户信息*/@Testpublic void selectUserById() {User user = userMapper.selectById(1238735228017610754l);System.out.println("通过主键id查询用户信息:" + user);}/*sql形式: SELECT id,name,age,email FROM user WHERE id=?*//*** 通过多个主键id查询多个用户信息*/@Testpublic void selectBatchIds() {List<Long> ids = Arrays.asList(1238735228017610754l, 1238735794525503489l);List<User> userList = userMapper.selectBatchIds(ids);userList.forEach(System.out::println);}/*sql形式: SELECT id,name,age,email FROM user WHERE id IN ( ? , ? )*//*** 通过map查询一个用户信息*/@Testpublic void selectByMap() {Map<String, Object> map = new HashMap<>();map.put("name", "Tom");map.put("age", 28);List<User> userList = userMapper.selectByMap(map);userList.forEach(System.out::println);}/*sql形式: SELECT id,name,age,email FROM user WHERE name = ? AND age = ?*//*** 通过map查询多个用户信息*/@Testpublic void selectByMap2() {Map<String, Object> map = new HashMap<>();map.put("age", 2);List<User> userList = userMapper.selectByMap(map);userList.forEach(System.out::println);}/*sql形式:SELECT id,name,age,email FROM user WHERE age = ?*///    ---------------------------------------进阶------------------------------------/*** 1. 名字包含雨并且年龄小于40* sql:name like '%雨%' and age < 40* like '%值%'* it <* le =<* gt >* ge >=*/@Testpublic void selectByWrapper() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like("name", "雨").lt("age", 40);List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);}/*sql形式:SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age < ?*//*** 2. 名字包含雨并且年龄大于等于20且小于等于40并且邮箱不为空* sql:name like '%雨%' and age between 20 and 40 and email is not null*/@Testpublic void selectByWrapper2() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like("name", "雨").between("age", 20, 28).isNotNull("email");List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);}/*sql形式: SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL*//*** 3. 名字为郭姓或者年龄大于等于25,按照年龄降序排列,年龄相同的按照id升序排列* sql:name like '郭%' or age >= 25 order by age desc,id asc*/@Testpublic void selectByWrapper3() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.likeRight("name", "郭").or().ge("age", 25).orderByDesc("age").orderByAsc("id");List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);}/*sql形式: SELECT id,name,age,email FROM user WHERE (name LIKE ? OR age >= ?) ORDER BY age DESC,id ASC*//*** 7. (年龄小于40或者邮箱不为空)并且名字为郭姓* sql:(age < 40 or email id not null) and name like '郭%'*/@Testpublic void selectByWrapper7() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.nested(wq -> wq.lt("age", 40).or().isNotNull("email")).likeRight("name", "郭");List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);}/*sql形式: SELECT id,name,age,email FROM user WHERE ((age < ? OR email IS NOT NULL) AND name LIKE ?)sql执行原则:1. 正常sql中,先执行and后执行or2. sql中存在括号(),先执行括号()里面的sql再执行,括号()外边的sql场景1:SELECT id,name,age,email FROM user WHERE age < ? OR email IS NOT NULL AND name LIKE ?)场景2:SELECT id,name,age,email FROM user WHERE ((age < ? OR email IS NOT NULL) AND name LIKE ?)SELECT id,name,age,email FROM user WHERE (age < ? OR email IS NOT NULL) AND name LIKE ?*//*** 8. 年龄为30、31、34、35* age in (30、31、34、35 )*/@Testpublic void selectByWrapper8() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.in("age", Arrays.asList(18, 20, 22, 28));List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);}/*sql形式: SELECT id,name,age,email FROM user WHERE (age IN (?,?,?,?))*///    -------------------------------------------Select语句中不列出全部字段---------------------------------------------------/*** 1. 名字包含雨并且年齡小于30* sql:name like '%雨%' and age < 30*/@Testpublic void selectByWrapperSupper() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like("name", "雨").lt("age", 30);List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);}/*sql形式:SELECT id,name,age,email FROM user WHERE (name LIKE ? AND age < ?)这种情况,你查询什么列,如果有值就会查询出来,没查询的列的值默认为null*//*** 用like的Condition* <p>* 当点击查询按钮时,查询搜索框中默认为null,也支持传入条件* 当传入的条件不为null或者不为空""时,会拼接在where 的后边当做条件** @param name* @param email*/private void condition(String name, String email) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like(StringUtils.isNotEmpty(name), "name", name).like(StringUtils.isNotEmpty(email), "email", email);List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);}/*sql形式:SELECT id,name,age,email FROM user WHERE (name LIKE ?)*//*** 测试Condition*/@Testpublic void testCondition() {String name = "郭";String email = "";condition(name, email);}//    ---------------------------------建议使用LambdaQueryWrapper,防误写-------------------------------------/*** 这样写的好处防误写* 查询用户名字中包含雨并且年龄小于40*/@Testpublic void selectLambda() {LambdaQueryWrapper<User> lambdaQuery = Wrappers.<User>lambdaQuery();lambdaQuery.like(User::getName, "雨").lt(User::getAge, 40);List<Object> userList = userMapper.selectObjs(lambdaQuery);userList.forEach(System.out::println);}/*** sql形式:* SELECT id,name,age,email FROM user WHERE (name LIKE ? AND age < ?)*//*** 5. 名字为郭姓并且(年龄小于40或者邮箱不为空)* sql:name like '郭%' and (age < 40 or email is not null)* 只返回第一个字段的值 id*/@Testpublic void selectLambda2() {LambdaQueryWrapper<User> lambdaQuery = Wrappers.<User>lambdaQuery();lambdaQuery.likeRight(User::getName, "郭").lt(User::getAge, 40).isNotNull(User::getEmail);List<Object> userList = userMapper.selectObjs(lambdaQuery);userList.forEach(System.out::println);}/*** sql形式:* SELECT id,name,age,email FROM user WHERE (name LIKE ? AND age < ? AND email IS NOT NULL)*/@Testpublic void selectLambda3() {List<User> userList = new LambdaQueryChainWrapper<User>(userMapper).like(User::getName, "雨").ge(User::getAge, 20).list();userList.forEach(System.out::println);}/*** sql形式:* SELECT id,name,age,email FROM user WHERE (name LIKE ? AND age < ? AND email IS NOT NULL)*///    --------------------------------自定义sql------------------------------/*** 自定义sql*/@Testpublic void selectMy() {LambdaQueryWrapper<User> lambdaQuery = Wrappers.<User>lambdaQuery();lambdaQuery.likeRight(User::getName, "郭").and(lqw -> lqw.lt(User::getAge, 40).or().isNotNull(User::getEmail));//调用自定义sqlList<User> userList = userMapper.selectAll(lambdaQuery);userList.forEach(System.out::println);}
//    select * from user WHERE (name LIKE ? AND (age < ? OR email IS NOT NULL))}

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

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

相关文章

表达祝福与喜悦的数字资产——平安夜的特别礼物华为云DAC

平安夜的街灯光闪烁&#xff0c;人们沉浸在节日气氛中&#xff0c;忙着购买礼物&#xff0c;准备晚餐&#xff0c;相互传递感恩与祝愿。华为云DAC数字资产创意平台锁住美好&#xff0c;用数字艺术的形式制作专属节日记忆&#xff0c;有创意的礼物总让人难忘。 独一无二的礼物—…

qt生成无ui界面动态库,有ui界面的动态库,以及含有资源文件和qss文件的动态库

提要 此文分别就qt生成纯代码的动态库&#xff0c;含有ui文件的动态库以及含有资源文件qss文件和切图的动态库。 实现 1.纯代码的生成qt库。即没有ui文件的项目。 打开QtCreate&#xff0c;新建文件&#xff0c;选择library. 接下来填写项目的名称&#xff0c;选择生成的路…

太形象了!什么是边缘计算?最有趣的解释没有之一!

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;云计算就像是天上的云&#xff0c;看得见摸不着&#xff0c;像章鱼的大脑&#xff0c;…

qt中使窗口的大小随窗口的内容大小进行调整

提要 窗口用于显示文本信息&#xff0c;当窗口的文本信息变长&#xff0c;原有窗口的大小不足以显示文本信息。这时就需要一个能够根据窗口要显示的文本信息的长度来调整窗口大小的窗口。 示例 效果图&#xff1a; 窗口内容少的时候提示窗口大小&#xff0c;当窗口要显示的…

MyBatisPlus_查询分页篇_入门试炼_02

文章目录1. mapper接口2. 映射文件3. 实战分页1. mapper接口 package com.gblfy.springboot.mybatisplus.mapper;import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.…

看完这篇买车不用坐引擎盖哭啦

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;Kying转自&#xff1a;数据森麟作者介绍&#xff1a;Kying&#xff0…

Qt关闭程序的时候创建json文件,再次启动时重新加载到界面上

提要 当程序关闭后再次打开程序需要加载上一次的按钮名称设置。 思路 关闭程序的时候保存此刻界面按钮的文本&#xff0c;正常情况下只需在程序退出时调用的析构函数的内部实现&#xff0c;将界面所有的按钮文本生成一个文件&#xff0c;在程序下一次启动的时候&#xff0c;…

MyBatis-Plus_快速入门0222

文章目录一、配置1.1、Spring Boot 工程&#xff1a;配置 MapperScan 注解1.2 Spring MVC 工程&#xff1a;配置 MapperScan1.2.1 调整 SqlSessionFactory 为 MyBatis-Plus 的 SqlSessionFactory一、配置 MyBatis-Plus 的配置异常的简单&#xff0c;我们仅需要一些简单的配置即…

什么是云计算基础设施? | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;云计算基础设施是内部系统和公共云之间的软件和硬件层&#xff0c;其融合了许多不同的…

如何将本地代码推送至远程仓库_命令简化版本

如何将本地代码推送至远程仓库&#xff1f; 文章目录一、新仓库1. 初始化README.md2. 初始化Git仓库3. 将工作区的代码添加至暂存区4. 将暂存区的变更文件提交到本地仓库5. 将本地仓库和远程仓库建立连接6. 将本地代码push至远程仓库7. 先拉去代码&#xff0c;在push8. 强制推送…

K8S精华问答 | Kubernetes用的是Docker的容器?

kubernetes&#xff0c;简称K8s&#xff0c;是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;目标是让部署容器化的应用简单并且高,并提供了应用部署&#xff0c;规划&#xff0c;更新&#xff0c;维护的一种机制。今天&#xff0c;我们就来看看…

qt中生成含有中文的json文件和解析json文件

提要 生成的json文件在程序加载解析时出现上述错误&#xff0c;究其原因是生成json文件过程中编码问题。qt编译器默认的编码格式为utf-8&#xff0c;而windows一般为gbk编码&#xff0c;所以就需要在生成本地json文件的时候将utf-8编码转换为gbk编码。读取json文件的时候&…

MyBatis-Plus_断言

MyBatis-Plus 之断言 文章目录1. 断言代码&#xff1a;2. 源码&#xff1a;3. 释义&#xff1a;4. 举个栗子&#xff1a;5. 异常信息&#xff1a;6. 控制台输出定位7. 查看数据库&#xff1a;1. 断言代码&#xff1a; Assert.assertEquals(5, userList.size());2. 源码&#x…

Twitter 宣布抛弃 Mesos,转向 Kubernetes;全球关键5G专利我国占34%;华为面试要改革?...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go2019伯克希尔股东大会&#x…

qt鼠标进入窗体后,窗体自动置顶

提要 鼠标进入窗体后&#xff0c;窗体自动置顶&#xff0c;鼠标移开窗体后&#xff0c;窗体恢复之前的状态。 示例 运行效果如下&#xff1a; 程序刚启动的效果如下&#xff1a; 鼠标放在某一个窗口上的效果如下&#xff1a; 可实现鼠标放在某一个窗口上该窗口置顶&#x…

MyBatis-Plus_入门试炼03

排除非表字段的3种方式 常见编程场景&#xff1a; 实体类中某个变量不对应数据库的表中的任何字段&#xff0c;用于暂时保存临时数据或者通过某种方式计算或组装的数据。 文章目录一、举个栗子&#xff1a;1.1 在User实体类中&#xff0c;添加remark属性1.2 执行插入操作&#…

SaaS路线图 | 时光机

戳蓝字“CSDN云计算”关注我们哦&#xff01;时光机&#xff1a;搭载这部时光机&#xff0c;带您回顾《程序员》大量优秀文章&#xff0c;重温经典技术干货&#xff0c;我们发现硬核技术永不过时&#xff0c;对于get要点、solve难题、提高自我&#xff0c;仍有非凡意义。作者&a…

qt将光标相对于桌面的位置转换为相对于窗口的位置

提要 鼠标光标获取的位置cursor().pos()是相对于整个屏幕坐标的&#xff0c;鼠标进入窗口的范围内&#xff0c;判断光标是否在窗口中某控件的范围内&#xff0c;就需先将相对于整个电脑屏幕的鼠标位置&#xff0c;转换为相对于当前程序的窗口的位置&#xff0c;然后判断这个坐…

MyBatisPlus_通用service篇_入门试炼_05

文章目录1. service和impl2. 实战1. service和impl package com.gblfy.springboot.mybatisplus.service;import com.baomidou.mybatisplus.extension.service.IService; import com.gblfy.springboot.mybatisplus.entity.User;public interface UserService extends IService&…

SpringCloud微服务如何优雅停机及源码分析 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;Trust_FreeDom转自&#xff1a;码农沉思录本文主要讨论的是微服务注册…