性能分析插件p6spy
在平时的使用中会遇到一些比较慢的sql
作用:性能分析拦截器,用于输出每条 SQL 语句及其执行时间
p6spy原理
p6spy将应用的数据源给劫持了,应用操作数据库其实在调用p6spy的数据源,p6spy劫持到需要执行的sql或者hql之类的语句之后,他自己去调用一个realDatasource,再去操作数据库
pom.xml导入p6spy坐标
<!-- 性能分析插件 -->
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.0</version>
</dependency>
application.yaml配置文件中
#配置相关信息
spring:
datasource:
# driver-class-name: com.mysql.cj.jdbc.Driver
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
#
url: jdbc:p6spy:mysql://localhost:3306/mybatisplus?useSSL=false&serverTimezone=GMT%2B8
# url: jdbc:mysql://localhost:3306/mybatisplus?serverTimezone=UTC
username: root
password: 123456
在resource新建spy.properties
driverlist=com.mysql.cj.jdbc.Driver
logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat
#logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
databaseDialectDateFormat=yyyy-MM-dd HH:mm:ss
appender=com.p6spy.engine.spy.appender.StdoutLogger
测试代码
// 测试批量查询!
@Test
public void testSelectByBatchId(){
List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
users.forEach(System.out::println);
}
运行结果
条件查询器wrapper
官网查看mp条件构造器
isNotNull匹配不为空的
@SpringBootTest
public class TestWrapper {
@Autowired
private UserMapper userMapper;
@Test
public void test1(){
QueryWrapper<User> wrapper=new QueryWrapper<>();
//查询name字段不为空,且年龄大于等于15的
//wrapper返回的还是对象,所以可以直接.操作
wrapper.isNotNull("name").ge("age", 15);
userMapper.selectList(wrapper);
}
}
运行结果,条件构造器的本质就是省sql语句的编写,可以用来做些判断
eq匹配相等
@Test
public void test2(){
QueryWrapper<User> wrapper=new QueryWrapper<>();
//查询name为kongchao的
wrapper.eq("name", "kongchao");
userMapper.selectOne(wrapper);
}
between查询区间
@Test
public void test3(){
QueryWrapper<User> wrapper=new QueryWrapper<>();
//查询年龄在10-18岁的(闭区间)
wrapper.between("age", 10, 18);
userMapper.selectList(wrapper);
}
like模糊匹配
@Test
public void test4(){
QueryWrapper<User> wrapper=new QueryWrapper<>();
//名字中不含o,邮箱是以t开头 (t%)
wrapper.notLike("name", "o").likeRight("email", "t");
userMapper.selectList(wrapper);
}
insql子查询
@Test
public void test5(){
QueryWrapper<User> wrapper=new QueryWrapper<>();
wrapper.inSql("id", "select id from user where age>=20");
userMapper.selectList(wrapper);
}
orderByDesc排序
@Test
public void test6(){
//id降序排序
QueryWrapper<User> wrapper=new QueryWrapper<>();
wrapper.orderByDesc("id");
userMapper.selectList(wrapper);
}