Spring Boot配置数据源
Spring Framework 为 SQL 数据库提供了广泛的支持。从直接使用 JdbcTemplate 进行 JDBC 访问到完全的对象关系映射(object relational mapping)技术-比如 Hibernate。Spring Data 提供了更多级别的功能-直接从接口创建的 Repository 实现-并使用了约定从方法名生成查询。
1、JDBC
1、创建项目-导入需要的依赖
``xml
org.springframework.boot spring-boot-starter-jdbc mysql mysql-connector-java runtime
`
2、配置数据源
`yaml
spring: datasource: username: root password: 123456 url: jdbc:mysql://192.168.85.111:3306/sakila?serverTimezone=UTC&useUnicode=true@characterEncoding=utf-8 driver-class-name: com.mysql.jdbc.Driver
`
3、测试类代码
`java
package com.oi;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import javax.sql.DataSource;import java.sql.Connection;import java.sql.SQLException;@SpringBootTestclass DataApplicationTests { @Autowired DataSource dataSource; @Test void contextLoads() throws SQLException { System.out.println(dataSource.getClass()); Connection connection = dataSource.getConnection(); System.out.println(connection); connection.close(); }}//可以看到默认配置的数据源为class com.zaxxer.hikari.HikariDataSource-我们没有经过任何配置-说明springboot默认情况下支持的就是这种数据源-可以在DataSourceProperties.java文件中查看具体的属性配置
`
4、crud操作
1、有了数据源(com.zaxxer.hikari.HikariDataSource)-然后可以拿到数据库连接(java.sql.Connection)-有了连接-就可以使用连接和原生的 JDBC 语句来操作数据库
2、即使不使用第三方第数据库操作框架-如 MyBatis等-Spring 本身也对原生的JDBC 做了轻量级的封装-即 org.springframework.jdbc.core.JdbcTemplate。
3、数据库操作的所有 CRUD 方法都在 JdbcTemplate 中。
4、Spring Boot 不仅提供了默认的数据源-同时默认已经配置好了 JdbcTemplate 放在了容器中-程序员只需自己注入即可使用
5、JdbcTemplate 的自动配置原理是依赖 org.springframework.boot.autoconfigure.jdbc 包下的 org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration 类
`java
package com.oi.contoller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;import java.util.List;import java.util.Map;@RestControllerpublic class JDBCController { @Autowired JdbcTemplate jdbcTemplate; @GetMapping("/emplist") public List> empList(){ String sql = "select * from emp"; List> maps = jdbcTemplate.queryForList(sql); return maps; } @GetMapping("/addEmp") public String addUser(){ String sql = "insert into emp(empno,ename) values(1111,'zhangsan')"; jdbcTemplate.update(sql); return "success"; } @GetMapping("/updateEmp/{id}") public String updateEmp(@PathVariable("id") Integer id){ String sql = "update emp set ename=? where empno = "+id; String name = "list"; jdbcTemplate.update(sql,name); return "update success"; } @GetMapping("/deleteEmp/{id}") public String deleteEmp(@PathVariable("id")Integer id){ String sql = "delete from emp where empno = "+id; jdbcTemplate.update(sql); return "delete success"; }}
`
2、自定义数据源DruidDataSource
通过源码查看DataSourceAutoConfiguration.java
`java
@Configuration(proxyBeanMethods = false)@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })@EnableConfigurationProperties(DataSourceProperties.class)@Import({ DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class })public class DataSourceAutoConfiguration { @Configuration(proxyBeanMethods = false) @Conditional(EmbeddedDatabaseCondition.class) @ConditionalOnMissingBean({ DataSource.class, XADataSource.class }) @Import(EmbeddedDataSourceConfiguration.class) protected static class EmbeddedDatabaseConfiguration { } @Configuration(proxyBeanMethods = false) @Conditional(PooledDataSourceCondition.class) @ConditionalOnMissingBean({ DataSource.class, XADataSource.class }) @Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class, DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class }) protected static class PooledDataSourceConfiguration { } /** * {@link AnyNestedCondition} that checks that either {@code spring.datasource.type} * is set or {@link PooledDataSourceAvailableCondition} applies. */ static class PooledDataSourceCondition extends AnyNestedCondition { PooledDataSourceCondition() { super(ConfigurationPhase.PARSE_CONFIGURATION); } @ConditionalOnProperty(prefix = "spring.datasource", name = "type") static class ExplicitType { } @Conditional(PooledDataSourceAvailableCondition.class) static class PooledDataSourceAvailable { } }
`
1、添加druid的maven配置
`xml
com.alib