MyBatis-Plus使用(4)-集成SpringBoot
我这里使用的MyBatis-Plus是当前最新的3.2.0版本,
1. 引入需要的jar,基础jar包括:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.1.6.RELEASE</version>
<scope>test</scope>
</dependency>
<!--阿里数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.14</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<!-- MySQL数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
</dependencies>
2. 配置application.yml文件
spring:
# 数据库连接池
datasource:
druid:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/****?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: ****
password: ****
initialSize: 5
minIdle: 10
maxActive: 20
maxWait: 60000 # 配置MyBatis-Plus打印SQL日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3. 根据数据库表生成mapper.xml,dao,service,controller,大家可以参照代码生成器文章:MyBatis-Plus使用(1)-概述+代码生成器
4. 编写启动类
@MapperScan("com.zh.dao")
@ComponentScan(value = "com.zh")
@SpringBootApplication
public class Application { public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.println(" ====== Application Start ======");
} /**
* MyBatisPlus的分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
} }
以上三个注解简单讲下作用:
@MapperScan是mybatis.spring的注解,作用是指定扫描的dao路径,如果你的每个dao类上都有@Mapper注解,则@MapperScan就可以忽略不写了。
@ComponentScan 是spring注解,用于扫描需要Spring自动装配的文件。
@SpringBootApplication是启动Spring自动装配。
5. 测试
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {Application.class})
public class ServiceTest { @Autowired
private UserInfoService userInfoService; @Test
public void pageTest() {
Page<UserInfo> page = new Page<>();
page.setCurrent(1);
page.setSize(10);
page.setOrders(Lists.newArrayList(OrderItem.asc("username"))); QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
wrapper.eq("gender", 0); IPage<UserInfo> result = userInfoService.page(page, wrapper);
System.out.println(JSON.toJSONString(result));
} }
上面的作用是分页查询,根据username排序,查询gender=0的用户信息,生成的SQL如下:
==> Preparing: SELECT COUNT(1) FROM user_info WHERE (gender = ?)
==> Parameters: 0(Integer)
<== Columns: COUNT(1)
<== Row: 2
==> Preparing: SELECT id, address, gender, username FROM user_info WHERE (gender = ?) ORDER BY username LIMIT ?,?
==> Parameters: 0(Integer), 0(Long), 10(Long)
<== Columns: id, address, gender, username
<== Row: 1, 花果山, 0, 孙悟空
<== Row: 2, 高老庄, 0, 猪八戒
<== Total: 2
注意:我用的MyBatis-Plus是3.2.0版本,已经对分页做了优化,大家如果用以前的版本最好升级到3.2.0版本。
因为之前的3.1.2版本生成的SQL语句效率是有问题的,主要问题在count语句,他是把用子查询把所有符合条件的数据都查询出来,再count,真要优化还需要重写page方法,SQL如下:
SELECT COUNT(1) FROM (SELECT id, address, gender, username FROM user_info WHERE (gender = 0)) AS D
@SpringBootApplication
MyBatis-Plus使用(4)-集成SpringBoot的更多相关文章
- 集成Springboot+MyBatis+JPA
1.前言 Springboot最近可谓是非常的火,本人也在项目中尝到了甜头.之前一直使用Springboot+JPA,用了一段时间发现JPA不是太灵活,也有可能是我不精通JPA,总之为了多学学Spri ...
- MyBatis初级实战之三:springboot集成druid
OpenWrite版: 欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kuber ...
- Spring Maven项目集成Springboot
Maven管理的Spring项目,准备集成Springboot做接口 1.Springboot对Spring有版本要求 我用的Springboot版本:1.4.5.RELEASE,对应Spring的版 ...
- MyBatis原理,Spring、SpringBoot整合MyBatis
1. MyBatis概述 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...
- Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)
当任何时候觉你得难受了,其实你的大脑是在进化,当任何时候你觉得轻松,其实都在使用以前的坏习惯. 通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车 ...
- Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(转)
通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车,开始美好的旅程! 本篇是在SSM框架基础上进行的. 参考文章: 1.Quartz学习——Qua ...
- 因此mybatis最好与spring集成起来使用
单独使用mybatis是有很多限制的(比如无法实现跨越多个session的事务),而且很多业务系统本来就是使用spring来管理的事务,因此mybatis最好与spring集成起来使用. spring ...
- (转) Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)
http://blog.csdn.net/u010648555/article/details/60767633 当任何时候觉你得难受了,其实你的大脑是在进化,当任何时候你觉得轻松,其实都在使用以前的 ...
- 实战:docker搭建FastDFS文件系统并集成SpringBoot
实战:docker搭建FastDFS文件系统并集成SpringBoot 前言 15年的时候,那时候云存储还远远没有现在使用的这么广泛,归根结底就是成本和安全问题,记得那时候我待的公司是做建站开发的,前 ...
- 记一次springboot+mybatis+phoenix在代码集成中的坑
场景: 希望使用phoenix做查询服务,给服务端提供接口 设计: 通过springboot做restful的接口发布,通过mybatis做phoenix的sql处理,因此是springboot+my ...
随机推荐
- The Meaningless Game 思维题
题目描述 Slastyona and her loyal dog Pushok are playing a meaningless game that is indeed very interesti ...
- 小师妹学JVM之:Dirty cards和PLAB
目录 简介 分代收集器中的空间划分 Write barrier和Dirty cards PLAB old space分配对象 总结 简介 分代垃圾回收器在进行minor GC的时候会发生什么操作呢?有 ...
- 论TEMP临时变量与VAR静态变量区别
TEMP临时变量:顾名思义,这种变量类型是临时的,没有固定的存放数据的内存空间.每次扫描结束后则清零,在下个扫描周期开始时,这个变量的值都是不确定的,一般为0.使用临时变量需要遵循一个原则:先赋值再使 ...
- node+express4+multiparty实现简单文件上传
文件上传 var fs = require('fs'); var express = require('express'); var multiparty = require('multiparty' ...
- POJ 1063 Flip and Shift 最详细的解题报告
题目来源:Flip and Shift 题目大意:一个椭圆形的环形容器中有黑色和白色两种盘子,问你是否可以将黑色的盘子连续的放在一起.你可以有以下两种操作: 1.顺时针旋转所有的盘子 2.顺时针旋转3 ...
- python也能玩视频剪辑!moviepy操作记录总结
前几篇文章咱们介绍了一下图片的处理方式,今天咱们说说视频的处理.python能够支持视频的处理么?当然是肯定的,人生苦读,我用python.万物皆可python. moviepy库安装 今天咱们需要使 ...
- Python Ethical Hacking - Intercepting and Modifying Packets
INTERCEPTING & MODIFYING PACKETS Scapy can be used to: Create packets. Analyze packets. Send/rec ...
- 深入浅出Semaphore源码解析
Semaphore通过permits的值来限制线程访问临界资源的总数,属于有限制次数的共享锁,不支持重入. 前提条件 在理解Semaphore时需要具备一些基本的知识: 理解AQS的实现原理 之前有写 ...
- 【翻译】Scriban README 文本模板语言和.NET引擎
scriban Scriban是一种快速.强大.安全和轻量级的文本模板语言和.NET引擎,具有解析liquid模板的兼容模式 Github https://github.com/lunet-io/sc ...
- C++语法小记---函数重载
函数重载 函数重载的本质是对已有功能的扩展 构成重载的三大条件 函数名相同 参数列表不通(与返回值无关) 重载函数的作用域相同 成员函数之间可以重载,成员函数和静态成员函数之间可以构成重载,全局函数之 ...