springboot mybatis 1000000 条数据,怎么删除最快
时间: 2024-02-01 19:15:26 浏览: 45
在删除大量数据时,使用 DELETE SQL 语句的效率会很低,因为它需要逐条执行删除操作,而且需要先查询出所有要删除的记录的主键,这也会消耗大量的时间和资源。为了更高效地删除大量数据,可以使用以下两种方法:
1. 使用 TRUNCATE TABLE 命令:这个命令可以快速删除数据表中的所有记录,但需要注意的是该命令不会触发任何触发器(包括删除触发器)并且不能回滚,所以在使用之前需要确认操作。
2. 使用分段删除:将要删除的数据按照某个条件(例如按照主键范围)分段进行删除,可以避免一次性删除大量数据造成的性能问题。可以使用 MyBatis 的分页插件(如 PageHelper)来实现分段删除,具体实现可参考以下代码:
```
@Mapper
public interface UserMapper {
@Delete("DELETE FROM user WHERE id BETWEEN #{startId} AND #{endId}")
void deleteUsers(@Param("startId") Long startId, @Param("endId") Long endId);
}
```
通过调用 `deleteUsers` 方法,可以批量删除指定范围内的记录。为了进一步提高删除性能,可以将每个范围的记录分配给不同的线程或进程进行删除,以充分利用 CPU 和 IO 资源。
相关问题
详细 介绍springboot mybatis多数据源
Spring Boot 是一个快速开发框架,MyBatis 是一个优秀的 ORM 框架,多数据源是指在一个应用程序中使用多个数据库。Spring Boot 集成 MyBatis 可以很方便地实现多数据源。
首先,在 pom.xml 文件中添加 MyBatis 和数据库驱动的依赖。然后,在 application.properties 文件中配置多个数据源的连接信息,如下所示:
```
# 数据源1
spring.datasource.url=jdbc:mysql://localhost:3306/db1
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 数据源2
datasource2.url=jdbc:mysql://localhost:3306/db2
datasource2.username=root
datasource2.password=123456
datasource2.driver-class-name=com.mysql.jdbc.Driver
```
接下来,创建多个数据源的配置类,如下所示:
```
@Configuration
@MapperScan(basePackages = "com.example.mapper1", sqlSessionTemplateRef = "sqlSessionTemplate1")
public class DataSource1Config {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource1() {
return DataSourceBuilder.create().build();
}
@Bean
public SqlSessionFactory sqlSessionFactory1(@Qualifier("dataSource1") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate1(@Qualifier("sqlSessionFactory1") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
@Configuration
@MapperScan(basePackages = "com.example.mapper2", sqlSessionTemplateRef = "sqlSessionTemplate2")
public class DataSource2Config {
@Bean
@ConfigurationProperties(prefix = "datasource2")
public DataSource dataSource2() {
return DataSourceBuilder.create().build();
}
@Bean
public SqlSessionFactory sqlSessionFactory2(@Qualifier("dataSource2") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate2(@Qualifier("sqlSessionFactory2") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
```
最后,在需要使用数据源的地方注入对应的 SqlSessionTemplate 即可,如下所示:
```
@Autowired
@Qualifier("sqlSessionTemplate1")
private SqlSessionTemplate sqlSessionTemplate1;
@Autowired
@Qualifier("sqlSessionTemplate2")
private SqlSessionTemplate sqlSessionTemplate2;
```
这样就可以在一个应用程序中使用多个数据源了。
详细 介绍springboot mybatis 多数据源 dao
Spring Boot 是一个快速开发框架,MyBatis 是一个优秀的持久层框架,多数据源是指在一个应用程序中使用多个数据源。在 Spring Boot 中使用 MyBatis 实现多数据源的方式有很多种,其中一种常用的方式是使用 Spring Boot 的自动配置功能。
首先,在 pom.xml 文件中添加 MyBatis 和数据库驱动的依赖:
```
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
```
然后,在 application.properties 文件中配置多个数据源:
```
# 主数据源
spring.datasource.url=jdbc:mysql://localhost:3306/main_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 从数据源
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/secondary_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
```
接着,创建多个数据源的配置类:
```
@Configuration
@MapperScan(basePackages = "com.example.demo.mapper.main", sqlSessionTemplateRef = "mainSqlSessionTemplate")
public class MainDataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource mainDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public SqlSessionFactory mainSqlSessionFactory(@Qualifier("mainDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean
public SqlSessionTemplate mainSqlSessionTemplate(@Qualifier("mainSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
@Configuration
@MapperScan(basePackages = "com.example.demo.mapper.secondary", sqlSessionTemplateRef = "secondarySqlSessionTemplate")
public class SecondaryDataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean
public SqlSessionTemplate secondarySqlSessionTemplate(@Qualifier("secondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
```
最后,在 DAO 层中使用 @Qualifier 注解指定使用哪个数据源:
```
@Repository
public interface MainMapper {
@Select("SELECT * FROM main_table")
@Qualifier("mainSqlSessionTemplate")
List<Main> findAll();
}
@Repository
public interface SecondaryMapper {
@Select("SELECT * FROM secondary_table")
@Qualifier("secondarySqlSessionTemplate")
List<Secondary> findAll();
}
```
这样就可以在一个应用程序中使用多个数据源了。