hikari连接池+插入数据库百万条记录+查询效率

需要导入包

 

 

 

 

hikari配置properties文件

jdbcUrl=jdbc:postgresql://localhost:5432/jspdb?useUnicode=true&characterEncoding=UTF-8
username=postgres
password=null
maximumPoolSize=30
minimumIdle=5
connectionTestQuery=SELECT 1
autoCommit=true
dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=250
dataSource.prepStmtCacheSqlLimit=2048
dataSource.useServerPrepStmts=true
dataSource.useLocalSessionState=true
dataSource.useLocalTransactionState=true
dataSource.rewriteBatchedStatements=true
dataSource.cacheResultSetMetadata=true
dataSource.cacheServerConfiguration=true
dataSource.elideSetAutoCommits=true
dataSource.maintainTimeStats=false

hikari连接池的使用

public class DBService {
    private static Logger logger = LoggerFactory.getLogger(DBService.class);//使用指定类初始化日志对象,该类不必要
    private final static String driver = "org.postgresql.Driver";

	  private static HikariDataSource dataSource;  
	
	  public static DBService INSTANCE;
	static {
		INSTANCE = new DBService();
	
	}	
	private DBService() {  super();  }
	
	
	private static HikariDataSource setupDataSource() { //建立连接池
		HikariConfig config = new HikariConfig("src/resource/hikari.properties");
		config.getJdbcUrl();
		config.getConnectionTimeout();
		config.getMaximumPoolSize();
		config.getMinimumIdle();
		config.getUsername();
		config.getPassword();
		

		HikariDataSource ds = new HikariDataSource(config);
		return ds;
	}
	public static DBService getInstance() {  
        if (INSTANCE == null) {  
            try {  
                INSTANCE = new DBService();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
        return INSTANCE;  
    }
	//从连接池中获取一个连接
	public Connection getConnection() {
		Connection con = null;
		if (dataSource != null) {
			try {
				con = dataSource.getConnection();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return con;
	

利用连接池插入一百万随机生成数据

public class ConnectionDemo {
	  public static void insertStu() {  
	//public List<Student> getAllStunames() {
	        System.out.println("使用连接池................................");  
	        //开启总计时
	        long beginTime = System.currentTimeMillis(); 
	        
	            
	            Connection conn = HikariManager.getInstance().getConnection(); 
	       
	        	String sql = new String("INSERT INTO student(sno,sname,sex,tel,addr,sgrade,cid) VALUES(?,?,?,?,?,?,?) ");
	        	
	        	
	            try {  
	            	PreparedStatement ps = conn.prepareStatement(sql);
	            	 conn.setAutoCommit(false);
	            	 //默认为自动提交,每执行一个update ,delete或者insert的时候都会自动提交到数据库,无法回滚事务。
	            	 //设置connection.setautocommit(false);只有程序调用connection.commit()的时候才会将先前执行的语句一起提交到数据库,这样就实现了数据库的事务。
	            	 // true:sql命令的提交(commit)由驱动程序负责
	            	// false:sql命令的提交由应用程序负责,程序必须调用commit或者rollback方法 
	            	 //总之就是把数据插入完毕之后程序里的commit才会将其一起提交至数据库,否则会有错误数据残余
	            	 
	            	//一次插入一万条数据,插入十次
 

                           for (int n = 1;n <= 100;n++){
	            		//开启分段计时
	            		// long bTime = System.currentTimeMillis();
	                     Random  rand = new Random();

	                     for (int i = 1;i <=10000;i++){
	                         int a = rand.nextInt(100);
	                         
	                      
	                         ps.setString(1, RandomValue.getSno());
	                         ps.setString(2,  RandomValue.getChineseName());
	                         ps.setString(3, RandomValue.getSex());
	                         ps.setString(4, RandomValue.getTel());
	                         ps.setString(5, RandomValue.getRoad());
	                         ps.setInt(6, a);
	                         ps.setString(7, RandomValue.getCid());
	                         ps.addBatch();
	                     }
	                     ps.executeBatch();
	                     conn.commit();
	            
	                 }
	                 
	            	 Long endTime = System.currentTimeMillis();
	     	        long  time = endTime-beginTime;
	                     System.out.println("插入用时"+time);
	                    
	            }catch (SQLException e) {  
	                e.printStackTrace();  
	            } finally {  
	                try {  
	                    conn.close();  
	                } catch (SQLException e) {  
	                    e.printStackTrace();  
	                }  
	            }  
	
	        }  
	
		public static void main(String[] args) {  
			insertStu();
		
			
		}
	 }

 //默认为自动提交,每执行一个update ,delete或者insert的时候都会自动提交到数据库,无法回滚事务。
	            	 //设置connection.setautocommit(false);只有程序调用connection.commit()的时候才会将先前执行的语句一起提交到数据库,这样就实现了数据库的事务。
	            	 // true:sql命令的提交(commit)由驱动程序负责
	            	// false:sql命令的提交由应用程序负责,程序必须调用commit或者rollback方法 
	            	 //总之就是把数据插入完毕之后程序里的commit才会将其一起提交至数据库,否则会有错误数据残余
	            	 
	            	//一次插入一万条数据,插入十次
 

                           for (int n = 1;n <= 100;n++){
	            		//开启分段计时
	            		// long bTime = System.currentTimeMillis();
	                     Random  rand = new Random();

	                     for (int i = 1;i <=10000;i++){
	                         int a = rand.nextInt(100);
	                         
	                      
	                         ps.setString(1, RandomValue.getSno());
	                         ps.setString(2,  RandomValue.getChineseName());
	                         ps.setString(3, RandomValue.getSex());
	                         ps.setString(4, RandomValue.getTel());
	                         ps.setString(5, RandomValue.getRoad());
	                         ps.setInt(6, a);
	                         ps.setString(7, RandomValue.getCid());
	                         ps.addBatch();
	                     }
	                     ps.executeBatch();
	                     conn.commit();
	            
	                 }
	                 
	            	 Long endTime = System.currentTimeMillis();
	     	        long  time = endTime-beginTime;
	                     System.out.println("插入用时"+time);
	                    
	            }catch (SQLException e) {  
	                e.printStackTrace();  
	            } finally {  
	                try {  
	                    conn.close();  
	                } catch (SQLException e) {  
	                    e.printStackTrace();  
	                }  
	            }  
	
	        }  
	
		public static void main(String[] args) {  
			insertStu();
		
			
		}
	 }

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是现代的Java应用程序框架,为开发人员提供了便捷高效的开发工具,通过自动化配置,可以快速构建各种不同类型的应用程序。在Spring Boot中使用MySQL数据库连接Hikari连接和MyBatis也非常容易,下面我们来简单介绍一下相关配置方法: 第一步:添加MySQL和Hikari依赖 在Spring Boot项目中,添加MySQL和Hikari依赖非常简单。只需在项目的pom.xml文件中添加以下依赖: ```xml <dependencies> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency> </dependencies> ``` 第二步:配置数据源和连接 在Spring Boot中,可以通过配置文件application.yml或application.properties来配置数据源和连接。以下是application.yml的示例配置: ```yml spring: datasource: url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver type: com.zaxxer.hikari.HikariDataSource hikari: pool-name: HikariCP minimum-idle: 5 maximum-pool-size: 20 idle-timeout: 60000 pool-prepared-statements: true max-open-prepared-statements: 10 connection-test-query: SELECT 1 ``` 第三步:配置Mybatis 在Spring Boot项目中,Mybatis可以通过xml配置和注解配置两种方式来使用。下面我们以xml配置为例。 1. 配置mybatis-config.xml 在resources目录下创建mybatis-config.xml,配置Mybatis的全局配置文件,例如开启驼峰命名转换: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> </configuration> ``` 2. 配置mapper 在mapper中定义SQL语句,并与对应的Java接口关联,例如: ```java @Mapper public interface UserMapper { @Select("SELECT * FROM user WHERE id = #{id}") User findById(@Param("id") long id); } ``` 3. 配置SqlSessionFactory 在Spring Boot项目中,可以通过MybatisAutoConfiguration自动配置SqlSessionFactory,也可以手动配置SqlSessionFactory。手动配置SqlSessionFactory的示例代码: ```java @Configuration @MapperScan(basePackages={"com.example.mapper"}) public class MybatisConfig { @Autowired private DataSource dataSource; @Value("${mybatis.type-aliases-package}") private String typeAliasesPackage; @Value("${mybatis.mapper-locations}") private String mapperLocations; @Bean(name = "sqlSessionFactory") public SqlSessionFactoryBean sqlSessionFactoryBean() { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); try { ResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver(); bean.setTypeAliasesPackage(typeAliasesPackage); bean.setMapperLocations(patternResolver.getResources(mapperLocations)); bean.setConfigLocation(new ClassPathResource("mybatis-config.xml")); return bean; } catch (Exception e) { throw new RuntimeException("Failed to configure SqlSessionFactory", e); } } } ``` 以上就是Spring Boot配置MySQL数据库连接Hikari连接和Mybatis的介绍,通过这些配置,可以快速搭建数据库连接和数据管理的系统,提高开发效率和代码可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值