赞
踩
准备数据表:
编写测试用例:
【示例 1】:查询 User 数据表中 name 不为空的用户,并且邮箱不为空的用户,年龄大于等于 25 的数据;
@Test
public void wrapperSelect1(){
//查询name不为空的用户,并且邮箱不为空的用户,年龄大于等于25
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper
.isNotNull("name")
.isNotNull("email")
.ge("age", 25);
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
}
【示例 2】:查询年龄为 22 的用户数据;
@Test
public void wrapperSelect2(){
//查询年龄是22的用户数据
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age","22");
List<User> users = userMapper.selectList(wrapper);
System.out.println(users);
}
【示例 3】:查询数据表中年龄在 20-25 之间的用户数据;
@Test
public void wrapperSelect3(){
//查询年龄在20-25岁之间的用户
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.between("age",20,30); //区间
Integer count = userMapper.selectCount(wrapper);
System.out.println(count);
}
【示例 4】:查询数据中 name 中不包含 “o”,且邮箱 email 中以 “com” 结尾的数据记录;
@Test
public void wrapperSelect4(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper
.notLike("name","o")
.likeLeft("email","com");
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
}
【示例 5】:inSql 子查询查找数据记录;
@Test
public void wrapperSelect5(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
// id 在子查询中查出来
wrapper.inSql("id","select id from user where id < 4");
List<Map<String, Object>> list = userMapper.selectMaps(wrapper);
list.forEach(System.out::println);
}
【示例 6】:通过年龄 age 进行数据排序;
@Test
public void wrapperSelect6(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
//通过age进行排序
wrapper.orderByAsc("age");
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
}
关于 MyBatis-Plus 的条件构造器的使用方法可以参考官网:https://baomidou.com/pages/10c804/
上面介绍的内容都是关于单表数据的增删改查操作,如何自定义 SQL、编写不同查询业务的接口呢?这里就用到了多表关联查询,我们先准备了如下两张数据表。
1、编写映射结果集的 POJO;
package com.trainingl.entity;
import lombok.Data;
// 映射结果集的实体类
@Data
public class OrderVO {
private Integer pid;
private String productName;
private Integer count;
private Integer uid;
private String userName;
}
2、mapper 持久化接口中自定义接口和 SQL 语句;
package com.trainingl.repository; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.trainingl.entity.OrderVO; import com.trainingl.entity.User; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface UserMapper extends BaseMapper<User> { //自定义接口 @Select("select p.*, u.name userName from product p,user u where u.id = p.uid and u.id = #{id}") List<OrderVO> SelectUerPro(Integer id); //传入用户id }
3、测试接口
@Test
public void test1(){
//根据用户的id查询该用户购买的商品
List<OrderVO> orderVOS = userMapper.SelectUerPro( 1);
for (OrderVO orderVO : orderVOS) {
System.out.println(orderVO);
}
}
性能分析组件的作用用于输出每条 SQL 语句及其执行时间,该功能依赖 p6spy
组件,支持 MyBatis-Plus 3.1.0 版本以上。
1、pom.xml 中引入 p6spy 依赖;
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>
2、application.yml 配置;
spring:
datasource:
# driver-class-name 为 p6spy 提供的驱动类
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
# url 前缀为 jdbc:p6spy 跟着冒号为对应数据库连接地址
url: jdbc:p6spy:mysql://localhost/user?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
...
3、resources 文件下添加 spy.properties 配置;
#MP 3.2.1以上使用 modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory #3.2.1以下使用或者不配置 #modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory # 自定义日志打印 logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger #日志输出到控制台 appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger # 使用日志系统记录 sql #appender=com.p6spy.engine.spy.appender.Slf4JLogger # 设置 p6spy driver 代理 deregisterdrivers=true # 取消JDBC URL前缀 useprefix=true # 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset. excludecategories=info,debug,result,commit,resultset # 日期格式 dateformat=yyyy-MM-dd HH:mm:ss # 实际驱动可多个 #driverlist=org.h2.Driver # 是否开启慢SQL记录 outagedetection=true # 慢SQL记录标准 2 秒 outagedetectioninterval=2
控制台打印日志时,输出当前执行 SQL 语句的执行时间和当前时间;
该插件有性能损耗,不建议生产环境使用,仅用于测试环境。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。