Spring Boot 連接數(shù)據(jù)庫(1---JDBC)

一、Springboot連接數(shù)據(jù)的方式主要有以下三種

  • JDBC
  • Mybatis
  • Spring Data JPA

二、springboot整合JDBC

1.創(chuàng)建項目,引入stater


查看pom.xml,主要依賴已經(jīng)引入

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
 
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

2.編寫yml

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/test2
    driver-class-name: com.mysql.jdbc.Driver

3.修改測試類進(jìn)行測試


@SpringBootTest
class SpringbootJdbcApplicationTests {

    @Autowired
    DataSource dataSource;

    @Test
    void contextLoads() throws SQLException {
        Connection connection = dataSource.getConnection();
        System.out.println("connection:" + connection);
        connection.close();
    }

}

輸出:

connection:HikariProxyConnection@1054913783 wrapping com.mysql.cj.jdbc.ConnectionImpl@79b84841

springboot 默認(rèn)可以支持Dbcp2,Hikari,Tomcat(springboot 2.2.5)等數(shù)據(jù)源
相關(guān)配置在DataSourceConfiguration類中
4.使用JdbcTemplate操作數(shù)據(jù)庫
創(chuàng)建Controller



代碼如下:

@RestController
@RequestMapping("/hello")
public class HelloController {
    @Autowired
    JdbcTemplate jdbcTemplate;

    @GetMapping("/score")
    public Map<String, Object> getScore() {
        List<Map<String, Object>> scoreList = jdbcTemplate.queryForList("SELECT * FROM score");
        return scoreList.get(0);
    }

}

數(shù)據(jù)庫表數(shù)據(jù):



查詢結(jié)果如下:


5.如何修改數(shù)據(jù)源
性能方面 hikari>druid>tomcat-jdbc>dbcp>c3p0 。hikari的高性能得益于最大限度的避免鎖競爭。druid功能最為全面,sql攔截等功能,統(tǒng)計數(shù)據(jù)較為全面,具有良好的擴(kuò)展性。
上面的開發(fā)中可以看到我們使用的數(shù)據(jù)源為hikari,接下來我們要將其修改為durid
(1)首先加入如下依賴

<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.20</version>
</dependency>

(2)修改pom文件,加入type: com.alibaba.druid.pool.DruidDataSource

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/test2
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

(3)測試類進(jìn)行測試

@SpringBootTest
class SpringbootJdbcApplicationTests {

    @Autowired
    DataSource dataSource;

    @Test
    void contextLoads() throws SQLException {
        System.out.println(dataSource.getClass());
    }
}

輸出:

class com.alibaba.druid.pool.DruidDataSource

(4)更全面的連接池配置

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/test2
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    initialSize: 1 #初始化大小
    minIdle: 1 #最小等待連接數(shù)量
    # maxIdle: 5 最大等待連接數(shù)量,已經(jīng)被棄用,報錯:maxIdle is deprecated
    maxActive: 20 #最大連接數(shù)
    maxWait: 60000 #配置獲取連接等待超時的時間
    timeBetweenEvictionRunsMillis: 60000 #間隔多久才進(jìn)行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒
    minEvictableIdleTimeMillis: 300000 # 配置一個連接在池中最小生存的時間,單位是毫秒
    # Oracle必須這樣配置檢查,不了會報檢查錯誤
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: true
    testOnReturn: false
    # 打開PSCache,并且指定每個連接上PSCache的大小
    poolPreparedStatements: false
    maxPoolPreparedStatementPerConnectionSize: 20
    # 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻
    filters: stat,wall,log4j
    # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    # 合并多個DruidDataSource的監(jiān)控數(shù)據(jù)
    useGlobalDataSourceStat: true

druid:
  allow: #允許登陸的IP地址
    ip: 127.0.0.1
  login: #登陸的賬戶密碼
    userName: admin
    password: admin123

為了使上面連接池配置生效,需要添加duridConfig配置文件

@Configuration
public class DuridConfig {
    @Value("${druid.login.userName}")
    private String userName;

    @Value("${druid.login.password}")
    private String password;

    @Value("${druid.allow.ip}")
    private String allowIp;

    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid() {
        return new DruidDataSource();
    }

    //配置durid的監(jiān)控
    //1.配置一個管理后臺的servlet
    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(new StatViewServlet());
        servletRegistrationBean.addUrlMappings("/druid/*");
        Map<String, String> initParameters = new HashMap<>();
        initParameters.put("loginUsername", userName); // 用戶名
        initParameters.put("loginPassword", password); // 密碼
        initParameters.put("resetEnable", "false");    // 禁用HTML頁面上的“Reset All”功能
        initParameters.put("allow", allowIp); // IP白名單 (沒有配置或者為空,則允許所有訪問)
        //initParameters.put("deny", "");// IP黑名單 (存在共同時,deny優(yōu)先于allow)
        servletRegistrationBean.setInitParameters(initParameters);
        return servletRegistrationBean;
    }

    //2.注冊一個web監(jiān)控的filter
    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}

瀏覽器訪問:http://127.0.0.1:8080/druid


重新執(zhí)行請求localhost:8080/hello/score,然后查看監(jiān)控記錄:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容