SpringBoot整合JDBC
-
对于数据访问层,无论是SQL(关系型数据库)还是NOSQL(非关系型数据库),springBoot底层都是采用SpringData
的方式统一处理;
-
springData是springBoot底层统一管理各种数据库的方式,springData也是spring中知名的项目
-
官网:https://spring.io/projects/spring-data
1.创建一个JDBC的spring项目:导入web,jdbc,数据库驱动
<!-- JDBC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- Thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
2.进行配置文件的数据库连接:新建一个application.yml
spring:
datasource:
username: root
password: 123
url: jdbc:mysql://localhost:3306/zhang?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver
连接数据库:
3.test中进行测试,因为很多东西都被springboot进行封装好了,能够直接使用
@SpringBootTest
class JdbcApplicationTests {
@Autowired
// springboot就在dataSource中封装了很多增删改查的方法
DataSource dataSource;
@Test
void contextLoads() {
System.out.println(dataSource.getClass());
}
}
4.Xxx Template:springBoot已经配置好的模板bean,当我们配置好数据源,连接数据库后就可以直接使用:
@RestController
public class JDBCController {
@Autowired
// 封装好的方法
JdbcTemplate jdbcTemplate;
// 进行查询操作
@RequestMapping("/userList")
public List<Map<String,Object>> listUser(){
String sql="select * from t_user";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
return maps;
}
// 删除操作
@RequestMapping("/userinsert")
public int insert(){
String sql="insert into t_user(loginName,loginPassword) values('zhangsansan','111')";
jdbcTemplate.update(sql);
return 1;
}
}
5。更换数据源;源码中,当引入JDBC的依赖后,就会自动导入四个类型数据源;可以通过使用配置文件进行数据源的更换
例如:配置Druid数据源
spring.dataSource.type:com.alibaba.druid.pool.DruidDataSource
6.Druid数据源自带监控日志的功能,还可以及进行后台日志监控权限控制:
-
导入Druid数据源依赖:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency>
-
进行Druid的一些配置:例如,最大连接数量,等待时间,初始化数量…
# springBoot 是不会自动注入这些属性的,需要自己绑定 intitleSize: 5 minIdle: 5 maxActive: 20 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 poolsPreparedStatement: true # 配置监控统计拦截的filter,stat:监控统计,log4j:日志记录(需要依赖),wall:防御SQL注入 filters: stat,wall,log4j maxPoolPerparedStatementPerConnectionSize: 20 useGlobalDataSourceStat: true connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
-
进行Druid数据源的自定义配置:
-
将配置文件和数据源绑定
@Configuration public class DruidConfig { // 这里的spring.datasource是配置文件的开头部分 @ConfigurationProperties(prefix="spring.datasource") @Bean // 放到Bean才会生效 public DataSource druidDataSource(){ return new DruidDataSource(); } }
-
进行Druid设置
// 后台监控,相当于web.xml // 注意:/druid/*一定不要写成:/druid/**,页面会加载不出来 @Bean public ServletRegistrationBean servletRegistrationBean(){ 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","localhost"); bean.setInitParameters(initParameters); return bean; }
设置完成后就会访问druid就会自动跳转到后台监控页面,这里可以对一些数据库的操作进行监控
-
设置过滤器
@Bean public FilterRegistrationBean filterRegistrationBean(){ FilterRegistrationBean bean = new FilterRegistrationBean(); // 创建一个过滤器 bean.setFilter(new WebStatFilter()); HashMap<String, String> initParameters = new HashMap<>(); // 不过滤什么文件 initParameters.put("exclusions","*.js,*.css,/druid/**"); bean.setInitParameters(initParameters); return bean; }
-
druid监控页面
-
定义不过滤什么文件
initParameters.put("exclusions","*.js,*.css,/druid/**");
bean.setInitParameters(initParameters);
return bean;
}
- druid监控页面