springboot 数据访问之 JDBC

不管是 SQL 还是 NOSQL,springboot 都默认采用整合 spring data 的方式进行统一处理,添加了大量自动配置,我们只需进行简单的配置即可使用。
以下示例使用 springboot 2.1.4,mysql 8.0.16

JDBC 在 springboot 中的使用

引入 jdbc 依赖和 mysql 驱动

  	<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>

配置数据源

## 配置数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3307/boot?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=mysql

注意: springboot 2.1 使用的 mysql 驱动与之前版本不一样(可能是从2.0开始就不一样了),而且 url 必须指定时区,%2B 表示 +

测试用例

@RunWith(SpringRunner.class)
@SpringBootTest
public class JDBCTest {
    
    
	
	@Autowired
	DataSource datasource;
	
	@Test
	public void testJdbc() throws SQLException {
    
    
		System.out.println(datasource.getClass());
		
		Connection connection = datasource.getConnection();
		System.out.println(connection);
		connection.close();
	}
}

运行结果如下,获取数据库连接成功,默认使用的是 com.zaxxer.hikari.HikariDataSource 数据源。
在这里插入图片描述
运行时执行 sql 脚本文件
如果是建表语句,可以把 .sql 的脚本文件命名为 sechema.sql 或 sechema-all.sql ;如果是操作数据,则命名为 data-*.sql ;并且把脚本文件放在根路径下。当然,如果是自定义的命名、自定义的文件位置,我们也可以在配置文件中指定

## 配置初始化数据库
spring.datasource.initializationMode=always
## schema 属性是一个 list,用 , 分割多个路径
spring.datasource.schema=classpath:books.sql,classpath:/sql/departments.sql

启动项目,即可执行 sql 脚本文件

JdbcTemplate 使用
在数据库表中插入一条数据,在 controller 中,使用 JdbcTemplate 进行查询

	@Autowired
	JdbcTemplate jdbcTemplate;
	
	@ResponseBody
	@RequestMapping("/getBooks")
	public Map<String, Object> getBooks() {
    
    
		List<Map<String,Object>> list = jdbcTemplate.queryForList("select * from books");
		return list.get(0);
	}

启动项目,输入 /getBooks 请求,可查询出相应记录
在这里插入图片描述
整合 druid 数据源,配置 druid 监控
引入 druid 依赖

	<!-- 引入 druid -->
	<dependency>
	    <groupId>com.alibaba</groupId>
	    <artifactId>druid</artifactId>
	    <version>1.1.16</version>
	</dependency>

在配置文件 application.properties 中加入配置

# 指定 druid 数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 配置数据源属性,以下属性需要另外绑定才能生效
spring.datasource.initialSize=10
spring.datasource.minIdle=5
spring.datasource.maxActive=20
spring.datasource.maxWait=50000
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙  
spring.datasource.filters=stat,wall

创建一个 druid 配置类,绑定数据源属性

@Configuration
public class DruidConfig {
    
    

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

配置 druid 监控,需要在配置类中加入相关的 servlet 和 filter

	// 配置 druid 的监控
	// 配置管理后台的 servlet
	@Bean
	public ServletRegistrationBean<StatViewServlet> statViewServlet(){
    
    
		ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");
		HashMap<String, String> initParameters = new HashMap<>();
		initParameters.put("loginUsername", "admin");
		initParameters.put("loginPassword", "123");
		initParameters.put("allow","");   // 为空默认是允许所有访问
		initParameters.put("deny", "192.168.0.101");
		bean.setInitParameters(initParameters);
		return bean;
	}
	
	// 配置监控的 filter
	@Bean
	public FilterRegistrationBean<WebStatFilter> webStatFilter(){
    
    
		FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<>();
		bean.setFilter(new WebStatFilter());
		HashMap<String, String> initParameters = new HashMap<>();
		initParameters.put("exclusions", "/druid/*,*.js,*.css");
		bean.setInitParameters(initParameters);
		ArrayList<String> list = new ArrayList<String>();
		list.add("/*");
		bean.setUrlPatterns(list);
		return bean;
	}

启动项目,输入 /druid 请求,来到监控登录页面,输入配置的用户名和密码即可进入
在这里插入图片描述在这里插入图片描述再执行一次 /getBooks 请求,可发现监控页面已经监控到了相关记录
在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Alias_fa/article/details/89815025
今日推荐