一、Spring Boot基础知识
Spring Boot是一个基于Spring框架的开发框架,它旨在简化Spring应用程序的开发和部署过程。Spring Boot通过自动配置和约定优于配置的原则,使得开发者可以更加便捷地创建独立的、生产级别的Spring应用程序。
Spring Boot的特点包括:
- 自动配置:Spring Boot根据项目的依赖自动配置应用程序,减少了繁琐的配置工作。
- 独立运行:Spring Boot应用程序可以作为独立的Java应用程序运行,不需要依赖外部的Web容器。
- 内嵌容器:Spring Boot内置了Tomcat和Jetty等Web容器,可以方便地进行应用程序的部署和测试。
- 简化Maven配置:Spring Boot提供了一些约定的Maven配置,简化了项目的构建过程。
二、MyBatis Plus基础知识
MyBatis Plus是一个基于MyBatis的增强工具,它提供了一系列的增强功能,使得MyBatis的使用更加方便和高效。MyBatis Plus可以自动生成SQL语句和Mapper接口的实现,大大减少了开发人员的工作量。
MyBatis Plus的特点包括:
- 自动生成代码:MyBatis Plus可以根据数据库表结构自动生成实体类、Mapper接口和XML映射文件。
- CRUD操作简化:MyBatis Plus提供了一系列的通用Mapper接口和方法,可以方便地进行增删改查操作。
- 分页查询支持:MyBatis Plus提供了分页查询的支持,可以方便地进行分页查询。
- 条件构造器:MyBatis Plus提供了灵活的条件构造器,可以方便地构造复杂的查询条件。
三、Spring Boot和MyBatis Plus的整合
Spring Boot和MyBatis Plus的整合非常简单,只需要在项目的配置文件中配置数据库连接信息和MyBatis Plus的相关配置,然后在项目中使用注解和配置进行开发即可。
首先,在pom.xml文件中添加MyBatis Plus和相关依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
然后,在application.yml中配置数据库连接信息和MyBatis Plus的相关配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis_plus_demo?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.demo.entity
最后,在项目中使用注解和配置进行开发,例如:
@Mapper
public interface UserMapper extends BaseMapper<User> {
List<User> selectUserList();
}
这样,就完成了Spring Boot和MyBatis Plus的整合,可以方便地进行数据库操作了。
四、Spring Boot和MyBatis Plus的扩展知识
Spring Boot和MyBatis Plus提供了很多扩展功能
1、多数据源支持
Spring Boot和MyBatis Plus支持多数据源的配置和使用,可以方便地处理多个数据库的操作。
操作步骤:
(1)、 添加依赖
首先,在项目中添加Spring Boot和MyBatis Plus的相关依赖。
(2)、 配置多数据源
在application.yml
或application.properties
文件中,可以配置多个数据源。每个数据源都需要一个唯一的名称,以便在应用中进行引用。
例如:
spring:
datasource:
primary:
url: jdbc:mysql://localhost:3306/db_primary
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
secondary:
url: jdbc:mysql://localhost:3306/db_secondary
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
(3)、创建数据源配置类
接下来,我们需要创建一个配置类来定义这两个数据源,并为它们创建对应的SqlSessionFactory
、DataSource
和MapperScannerConfigurer
。
例如:
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "primarySqlSessionFactory")
public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
// 设置其他属性,如mapper位置等
return bean.getObject();
}
// 同样为secondary数据源配置SqlSessionFactory, MapperScannerConfigurer等...
}
(4)、使用多数据源
我们可以在Service或Mapper层面通过使用@Qualifier
注解来指定要使用的数据源。例如:
@Service
public class MyService {
private final MyPrimaryMapper primaryMapper;
private final MySecondaryMapper secondaryMapper;
public MyService(@Qualifier("primarySqlSessionFactory") MyPrimaryMapper primaryMapper,
@Qualifier("secondarySqlSessionFactory") MySecondaryMapper secondaryMapper) {
this.primaryMapper = primaryMapper;
this.secondaryMapper = secondaryMapper;
}
}
或者在Mapper接口上使用@Mapper
注解并指定对应的SqlSessionFactory
:
@Mapper(sqlSessionFactoryRef = "primarySqlSessionFactory")
public interface MyPrimaryMapper { ... }
2、分页插件
MyBatis Plus的分页插件为开发者提供了一种高效、简洁的方式来实现分页查询功能,无需编写复杂的SQL语句。以下是关于这个分页插件的扩展内容:
分页插件的工作原理:MyBatis Plus的分页插件通过拦截SQL语句,自动为原始SQL添加对应的分页参数,如LIMIT
和OFFSET
,从而实现分页功能。这种拦截和处理是在MyBatis的执行器层面完成的,因此对开发者来说是透明的。
使用分页插件
(1)、添加依赖
在项目中添加MyBatis Plus分页插件的依赖。
(2)、配置分页插件
在Spring Boot的配置类中,需要配置分页插件的bean。例如:
@Configuration
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
(3)、使用分页功能
在Mapper或Service层面,我们可以很方便地使用分页功能。以下是一个示例:
@Service
public class MyService {
private final MyMapper myMapper;
public MyService(MyMapper myMapper) {
this.myMapper = myMapper;
}
public Page<MyEntity> getEntitiesByPage(int current, int size) {
// 创建分页条件对象
Page<MyEntity> page = new Page<>(current, size);
// 执行查询,分页插件会自动处理分页逻辑
myMapper.selectPage(page, null); // 这里null可以是您的查询条件对象
return page;
}
}
分页插件的自定义配置
除了默认的分页功能,MyBatis Plus的分页插件还提供了很多自定义配置选项,以满足不同的业务需求。例如,您可以设置是否进行count查询、设置默认的每页大小、自定义分页SQL的注入等。这些配置都可以在PaginationInterceptor
中进行。
注意事项和优化建议
- 性能考虑:虽然分页插件可以方便地进行分页查询,但在处理大量数据时,频繁的count查询可能会影响性能。您可以考虑关闭count查询或使用其他方式进行优化。
- SQL注入风险:由于分页插件是通过拦截和修改原始SQL来实现分页功能的,因此在使用时需要确保所有的输入都已经过充分的验证和过滤,以防止SQL注入攻击。
- 与其他插件的兼容性:如果您在项目中使用了其他MyBatis插件,需要确保分页插件与其他插件的兼容性。在某些情况下,可能需要调整插件的执行顺序或进行其他配置。
3、代码生成器
MyBatis Plus 的代码生成器是一个强大的工具,它可以根据数据库表结构自动生成对应的实体类、Mapper接口以及XML映射文件。这极大地减少了开发人员的工作量,提高了开发效率,同时确保了代码的一致性和准确性。
工作原理
代码生成器通过分析数据库中的表结构,提取出表名、字段名、字段类型等信息,然后使用模板生成对应的Java代码和XML配置。这个过程是自动化的,开发人员只需要指定数据库连接信息和生成代码的输出目录,代码生成器就可以完成剩下的工作。
(1)、 添加依赖
首先,在项目中添加MyBatis Plus代码生成器的依赖。
(2)、配置数据库连接信息
在配置文件中,指定要连接的数据库的信息,包括URL、用户名、密码等。
(3)、 配置生成策略
我们可以选择哪些表需要生成代码,以及生成代码的策略。例如,可以选择只生成实体类和Mapper接口,不生成XML映射文件;或者可以选择只生成某些指定的表,而不是数据库中的所有表。
(4)、运行代码生成器
运行代码生成器,它会自动连接到数据库,提取表结构信息,然后根据配置的策略生成代码。生成的代码会被输出到你指定的目录中。
(5)、集成生成的代码到你的项目中
将生成的实体类、Mapper接口和XML映射文件添加到你的项目中,然后就可以像使用普通的MyBatis代码一样使用它们了。
自定义模板
MyBatis Plus的代码生成器还支持自定义模板,我们可以根据自己的需要修改生成的代码的样式和结构。例如,可以修改实体类的命名规则、添加注释、改变字段的访问修饰符等。
注意事项和优化建议
- 保持数据库结构清晰:虽然代码生成器可以处理复杂的数据库结构,但是保持数据库表结构清晰和规范化可以使生成的代码更加简洁和易于理解。
- 验证生成的代码:虽然代码生成器可以自动生成代码,但是在集成到项目中之前,你应该仔细检查和测试生成的代码以确保其正确性和完整性。
- 持续维护:如果数据库表结构发生了变化,你需要重新运行代码生成器以更新生成的代码。为了保持代码的同步和一致性,建议将代码生成器作为项目的一部分进行持续维护。
五、总结
Spring Boot和MyBatis Plus的整合可以极大地简化Spring应用程序的开发和部署过程,并提供了一系列增强功能,如自动生成代码和简化CRUD操作。通过配置数据库连接信息和相关配置,我们可以方便地进行数据库操作。同时,Spring Boot和MyBatis Plus支持多数据源配置和使用、分页插件和代码生成器等扩展功能,进一步提高了开发效率和代码质量。