SpringBoot整合JdbcTemplate

参考文章
主要内容
  • JdbcTemplate其实就是用来操作数据库的,是最基本的Spring JDBC模板,是对JDBC很轻的封装,具有较高的执行效率(基于jdbc的数据操作要比hibernate那些效率都高,尤其批量处理),一般用于系统数据库并发操作压力大的项目中。
  • Spring数据访问模板:在数据库操作过程中,有很多重复工作,如事务控制、资源管理和异常处理等,Spring的模板类封装了这些固定部分。
  • 主要包含以下四类方法:
    • execute():执行任何sql语句,一般用于执行ddl语句。
    • update()、batchUpdate():执行(批量执行新增、修改、删除语句。
    • query()、queryForXxx():执行查询语句。
    • call():执行存储过程、函数等语句;当然,前面的三种方法其sql语句都可以带函数。
  • 参考文章
  • 首先操作数据库需要添加以下依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    
  • 在application.properties中配置数据源

    spring.datasource.url = jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf-8
    spring.datasource.username = root
    spring.datasource.password = root
    spring.datasource.driver-class-name = com.mysql.jdbc.Driver
    
  • spring-boot-starter-jdbc默认使用tomcat-jdbc数据源,推荐使用其他数据源尤其是阿里巴巴的数据池管理,请额外添加以下依赖

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.0.19</version>
    </dependency>
    
  • 连接池详情参见笔记:连接池
  • 然后在Application.java配置DataSource,这里介绍两种方式
  • 第一种:application.properties只配置jdbc驱动,数据池配置则全写在入口类

    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
        //Environment这个类是用来加载application.properties文件中的属性的
        @Autowired
        private Environment env;
    
        //destroy-method="close"的作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用.
        @Bean(destroyMethod =  "close")
        public DataSource dataSource() {
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setUrl(env.getProperty("spring.datasource.url")); //引用配置文件的变量
            dataSource.setUsername(env.getProperty("spring.datasource.username"));//用户名
            dataSource.setPassword(env.getProperty("spring.datasource.password"));//密码
            dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
            dataSource.setInitialSize(2);//初始化时建立物理连接的个数
            dataSource.setMaxActive(20);//最大连接池数量
            dataSource.setMinIdle(0);//最小连接池数量
            dataSource.setMaxWait(60000);//获取连接时最大等待时间,单位毫秒。
            dataSource.setValidationQuery("SELECT 1");//用来检测连接是否有效的sql
            dataSource.setTestOnBorrow(false);//申请连接时执行validationQuery检测连接是否有效
            dataSource.setTestWhileIdle(true);//建议配置为true,不影响性能,并且保证安全性。
            dataSource.setPoolPreparedStatements(false);//是否缓存preparedStatement,也就是PSCache
            return dataSource;
        }
    }
    
  • 第二种:在application.properties中写全部配置,在入口类用@Configu