springboot 使用jdbc + Druid整合
新建一个springboot项目
打开New Project > 选择Spring initializr 然后next
需要导入webmvc导入依赖
<!--web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
新建一个application.yml配置文件
spring:
datasource:
username: root
password: 123456
# 假如市区报错了,就增加一个时区的配置就ok了 serverTimezone=UTC
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.jdbc.Driver
测试一下数据源
@SpringBootTest
class Springboot04DataApplicationTests {
@Autowired
DataSource dataSource;
@Test
void contextLoads() throws SQLException {
//查看默认的数据源
System.out.println(dataSource.getClass());
//获取数据库连接
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
}
}
数据库
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(20) auto_increment,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES ('1', '李倩', '123123');
INSERT INTO `user` VALUES ('2', '张三', '123456');
INSERT INTO `user` VALUES ('3', '李四', '123456');
INSERT INTO `user` VALUES ('4', '赵柳', '1234556');
INSERT INTO `user` VALUES ('6', 'libai', '123456');
INSERT INTO `user` VALUES ('7', 'lisi', '123123');
INSERT INTO `user` VALUES ('8', '聊吧', '123123');
增删改查
@RestController的使用
https://www.cnblogs.com/rzkwz/p/12936806.html
@RestController
public class JDBCController {
@Autowired
JdbcTemplate jdbcTemplate;
//查询数据库的所有信息
//没有实体类,数据库中的东西,怎么获取 Map
@GetMapping("/userList")
public List<Map<String,Object>> userList(){
String sql="select * from user";
List<Map<String, Object>> list_maps = jdbcTemplate.queryForList(sql);
return list_maps;
}
@GetMapping("addUser")
public String addUser(){
String sql = "insert into user(id,name,pwd) values(10,'小妞','123123')";
jdbcTemplate.update(sql);
return "update-ok";
}
@GetMapping("/updateUser/{id}")
public String updateUser(@PathVariable("id") int id){
String sql = "update user set name=?,pwd=? where id="+id;
//封装
Object[] objects = new Object[2];
objects[0] ="小明";
objects[1] ="11111";
jdbcTemplate.update(sql,objects);
return "update-ok";
}
@GetMapping("/delUser/{id}")
public String delUser(@PathVariable("id") int id){
String sql = "delete from user where id = ?";
jdbcTemplate.update(sql,id);
return "update-ok";
}
}
启动主入口
测试
@SpringBootApplication
Druid
导入依赖
<!--Druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<!--log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
在application.yml配置文件配置Druid
spring:
datasource:
username: root
password: 123456
# 假如市区报错了,就增加一个时区的配置就ok了 serverTimezone=UTC
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
#Spring Boot 默认是不注入这些属性值的,需要自己绑定
#druid 数据源专有配置
initialSize: 5 # 初始化大小
minIdle: 5 # 最小连接数
maxActive: 20 # 最大连接数
maxWait: 60000 # 取连接等待超时的时间
timeBetweenEvictionRunsMillis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
minEvictableIdleTimeMillis: 300000 # 配置一个连接在池中最小生存的时间,单位是毫秒
validationQuery: SELECT 1 FROM DUAL # 验证连接有效与否的SQL,不同的数据配置不同
testWhileIdle: true
# 这里建议配置为TRUE,防止取到的连接不可用
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
#如果允许时报错 java.lang.ClassNotFoundException: org.apache.log4j.Priority
#则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
测试一下数据源
@SpringBootTest
class Springboot04DataApplicationTests {
@Autowired
DataSource dataSource;
@Test
void contextLoads() throws SQLException {
//查看默认的数据源
System.out.println(dataSource.getClass());
//获取数据库连接
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
}
}
可以看到SpringBoot已经帮我们换成了Druid数据源了
编写一个DruidConfig配置类
在rzk包下新建一个config包,在config包下新建一个DruidConfig类
@Configuration
@Configuration
public class DruidConfig {
/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = "spring.datasource" : 将配置文件中的"spring.datasource"下面的所有属性一一对应
*/
@ConfigurationProperties(prefix = "spring.datasource")//这样就可以和application.yml里面的spring.datasource下的属性进行一一对应
//如果在application.yml 配置Druid也没有用,因为没有跟配置文件绑定产生交互就起不来作用,需要加@Bean
@Bean
public DataSource druidDateSource(){
return new DruidDataSource();
}
//后台监控
@Bean
public ServletRegistrationBean a(){
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
//后台需要有人登陆,账号密码配置
HashMap<String,String> initParameters = new HashMap<>();
//增加配置
//登陆key 是固定的 Username 和 Password
initParameters.put("loginUsername","admin");
initParameters.put("loginPassword","123456");
//允许谁可以访问 如果vlue为空意思就为所有人都可以访问
initParameters.put("allow","");
//禁止谁能访问
// initParameters.put("xx",192.168.11.10);
bean.setInitParameters(initParameters);
return bean;
}
//filter
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
bean.setFilter(new WebStatFilter());
//可以过滤哪些请求呢?
HashMap<String, String> initParameters = new HashMap<>();
//这些东西不进行统计
initParameters.put("exclusions","*.css,*.js,/druid/*");
bean.setInitParameters(initParameters);
return bean;
}
}
启动进行测试
在网页打开http://localhost:8080/druid/basic.json
在config配的账号密码输入进去
如图:
可以看到在config配的属性
进行一条查询
可以看到查询的语句会被Druid进行监控