MyBatis-Plus使用(4)-集成SpringBoot
2024-09-04 08:02:21
我这里使用的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
最新文章
- ComponentOne 2016 V3 发布
- why happen ";WaitHandles must be less than or equal to 64";
- Git – Fast Forward 和 no fast foward
- jquery-mobile的页面跳转和iscroll之间的兼容解决方法
- [salesforce] URLFOR function finally
- WinForm输入网址打开源码
- drbd初探及Heartbeat+DRBD+MySQL
- bug
- Import和SQL*Loader这2个工具的异同
- block_dump观察Linux IO写入的具体文件(mysqld)
- Android_Component_example
- 查看EBS R12应用中使用CONTEXT_FILE的版本及路径
- Linux 内核模块程序结构
- quartz 定时任务
- XML的创建、解析-C语言
- ZooKeeper系列(2):ZooKeeper命令行工具zkCli.sh
- 通过Socket实现TCP编程,用户登录之服务器相应客户端,客户端和服务端之间的通信
- 插件使用一顶部消息提示---overhang
- Web容器初始化过程
- 基于matplotlib的数据可视化 - 三维曲面图gca
热门文章
- Java 基础 —— Lambda 表达式
- day03总结
- javascript基础(四): 操作表单
- Linux 通过源代码安装和编译程序
- 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。 一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:我年龄的立方是个4位数。 我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。” 请你推算一下,他当时到底有多年轻。 结果只有一个数。
- day6 python while,for 循环控制
- Cooperative Groups
- 使用recv函数和send函数的技巧
- Qt-操作xml文件
- Java事务解析(事务的基本操作+隔离的等级+事务的四大特性+事务的概念)