当前位置:   article > 正文

SpringBoot篇——SpringBoot操作数据库(整合JDBC、Druid和Mybatis,超详细!)_java springboot数据库配置

java springboot数据库配置

整合JDBC

一、首先建立新项目,勾选JDBC和数据库驱动

二、在resources下建立文件application.yaml,配置数据源

  1. spring:
  2. datasource:
  3. username: root
  4. password: root
  5. # serverTimezone=UTC增加时区的配置
  6. url: jdbc:mysql://localhost:3306/mybatis?useSSL=true&characterEncoding=utf8&useUnicode=true&serverTimezone=UTC
  7. driver-class-name: com.mysql.cj.jdbc.Driver

三、了解一下SpringBoot默认数据源
通过下面的操作可以查看系统默认的数据源

  1. class Springboot04DataApplicationTests {
  2. //自动装配数据源,装配后才能使用数据源获取数据库连接,操作数据库等工作
  3. @Autowired
  4. DataSource dataSource;
  5. @Test
  6. void contextLoads() throws SQLException {
  7. //查看默认数据源,调用getClass()方法。现在springboot默认使用com.zaxxer.hikari.HikariDataSource数据源
  8. System.out.println(dataSource.getClass());

了解HikariDataSource:
HikariDataSource号称Java Web当前速度最快的数据源,相比于传统的C3P0、DBCP、Tomcat等连接池更加优秀

四、在需要操作数据库的类中将数据源用@Autowired注解进行自定装配

  1. import org.springframework.beans.factory.annotation.Autowired;
  2. import org.springframework.jdbc.core.JdbcTemplate;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.RestController;
  5. import java.util.List;
  6. import java.util.Map;
  7. @RestController
  8. public class JdbcController {
  9. //SpringBoot帮我们整合了一个jdbc的模板框架,注册了模板的Bean,我们可以直接使用,使用@Autowired注解将JDBC模板自动装配进来即可
  10. @Autowired
  11. JdbcTemplate jdbcTemplate;
  12. //将jdbc模板导入后,就可以使用模板中的方法了
  13. @RequestMapping("/jdbc")
  14. public List<Map<String,Object>> userList() {
  15. //原生的jdbc还需要手动编写sql
  16. String sql = "select * from user";
  17. //调用模板中的查询方法,这个模板中有很多的增删改查的重载方法,按照我们的需求调用即可
  18. List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
  19. //最后将查询到的值返回到浏览器
  20. return maps;
  21. }
  22. }

五、启动服务器,成功将数据库中的数据查出,当然增删改都可以完成。另外,SpringBoot帮我们配置了自动提交事务,增删改不用再进行手动提交事务

整合Druid数据源

一、了解Druid数据源
是阿里巴巴开源的数据库连接池实现,结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控
Druid可以很好的监控DB池链接合SQL的执行情况,天生就是针对监控而生的DB连接池

二、导入方法
1、导入依赖

  1. <!--Druid数据源依赖-->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>druid</artifactId>
  5. <version>1.1.12</version>
  6. </dependency>

2、在application.yaml配置文件中通过type指定需要的数据源

  1. spring:
  2. datasource:
  3. username: root
  4. password: root
  5. # serverTimezone=UTC增加时区的配置
  6. url: jdbc:mysql://localhost:3306/mybatis?userSSL=true&characterEncoding=utf8&useUnicode=true&serverTimezone=UTC
  7. driver-class-name: com.mysql.cj.jdbc.Driver
  8. # 通过type来指定数据源,如果不指定就使用默认的HikariDataSource(优点是快)
  9. type: com.alibaba.druid.pool.DruidDataSource

3、在test中测试是否成功切换了数据源

  1. import org.junit.jupiter.api.Test;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.boot.test.context.SpringBootTest;
  4. import javax.sql.DataSource;
  5. import java.sql.Connection;
  6. import java.sql.SQLException;
  7. @SpringBootTest
  8. class Springboot04DataApplicationTests {
  9. //自动装配数据源,装配后才能使用数据源获取数据库连接,操作数据库等工作
  10. @Autowired
  11. DataSource dataSource;
  12. @Test
  13. void contextLoads() throws SQLException {
  14. //查看默认数据源,现在springboot默认使用com.zaxxer.hikari.HikariDataSource数据源
  15. System.out.println(dataSource.getClass());
  16. //获取数据库连接
  17. Connection connection = dataSource.getConnection();
  18. System.out.println(connection);
  19. //最后用完记得关闭
  20. connection.close();
  21. }
  22. }

控制台打印结果:成功切换成Druid数据源

三、在application.yaml配置文件中扩展Druid配置

列举了比较重要的Druid数据源专有配置

  1. #Spring Boot 默认是不注入这些属性值的,需要自己绑定
  2. #druid 数据源专有配置
  3. initialSize: 5
  4. minIdle: 5
  5. maxActive: 20
  6. maxWait: 60000
  7. timeBetweenEvictionRunsMillis: 60000
  8. minEvictableIdleTimeMillis: 300000
  9. validationQuery: SELECT 1 FROM DUAL
  10. testWhileIdle: true
  11. testOnBorrow: false
  12. testOnReturn: false
  13. poolPreparedStatements: true
  14. #配置监控统计拦截的filters(重点,也是Druid数据源的优点):stat:监控统计、log4j:日志记录、wall:防御sql注入
  15. #如果允许时报错 java.lang.ClassNotFoundException: org.apache.log4j.Priority
  16. #则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
  17. filters: stat,wall,log4j
  18. maxPoolPreparedStatementPerConnectionSize: 20
  19. useGlobalDataSourceStat: true
  20. connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

四、Druid数据源的配置(绑定数据源、配置后台监控、配置过滤器)和使用
1、首先在Springboot04DataApplication启动程序的同级建立config文件夹,新建Druid配置类,在该配置类中做绑定配置文件和自定义的监控配置等

  1. import com.alibaba.druid.pool.DruidDataSource;
  2. import com.alibaba.druid.support.http.StatViewServlet;
  3. import com.alibaba.druid.support.http.WebStatFilter;
  4. import org.springframework.boot.context.properties.ConfigurationProperties;
  5. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  6. import org.springframework.boot.web.servlet.ServletRegistrationBean;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. import javax.servlet.Filter;
  10. import javax.servlet.Servlet;
  11. import javax.sql.DataSource;
  12. import java.util.HashMap;
  13. import java.util.Map;
  14. //Druid核心配置类,用@Configuration注解声明该类为Druid的核心配置类
  15. @Configuration
  16. public class DruidConfig {
  17. //配置Druid数据源,需要注册Bean,并且绑定application.yaml配置文件,这样才能让我们自定义的一些属性生效
  18. @Bean
  19. @ConfigurationProperties(prefix = "spring.datasource")
  20. public DataSource druidDataSource() {
  21. return new DruidDataSource();
  22. }
  23. /*配置Druid后台监控Servlet
  24. *这个配置一般都是固定的,了解原理,将来直接拿着用
  25. * 原理:这个后台监控其实就相当于之前的web.xml,但是现在SpringBoot内置了servlet容器,所以没有web.xml。
  26. * 那么我们现在就是用替代方法,将ServletRegistrationBean用@Bean注册进容器中,被Spring托管,作用等价
  27. * */
  28. @Bean
  29. public ServletRegistrationBean statViewServlet() {
  30. //死代码
  31. ServletRegistrationBean<Servlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
  32. //为了配置后台登陆的账号和密码,定义一个哈希map,里面存放初始化的账号和密码
  33. Map<String, String> initParams = new HashMap<>();
  34. //1、配置账号和密码,注意:loginUsername和loginPassword是固定的参数,不要写错
  35. initParams.put("loginUsername", "admin");
  36. initParams.put("loginPassword", "123456");
  37. //2、配置允许谁能访问,allow是固定的,后面的参数可以配置为空,也可以配置成localhost等情况
  38. initParams.put("allow", "");
  39. //3、配置禁止某ip访问,后面的参数配置那个主机的ip
  40. initParams.put("gh", "192.168.10.50");
  41. //调用setInitParameters方法把初始化的账号和密码存进去,因为这个方法需要一个Map<String, String> initParameters类型的参数,所以上面我new了一个map
  42. bean.setInitParameters(initParams);
  43. return bean;
  44. }
  45. /*配置过滤器filter:同样,因为现在SpringBoot没有web.xml,所以以同样的方式配置过滤器
  46. * */
  47. @Bean
  48. public FilterRegistrationBean webStatFilter(){
  49. FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
  50. //1、设置过滤器,固定方法,使用Alibaba的过滤器
  51. bean.setFilter(new WebStatFilter());
  52. //2、配置可以过滤哪些请求
  53. Map<String, String> initParameters = new HashMap<>();
  54. //配置哪些垃圾请求不进行统计,exclusions是固定的(看源码)
  55. initParameters.put("exclusions","*.js,*.cs,/druid/*");
  56. bean.setInitParameters(initParameters);
  57. return bean;
  58. }
  59. }

2、启动服务器,浏览器中输入localhost:8080/druid,即可直接跳转到Druid的后台登陆页面

3、输入我们配置的账号和密码,进入到Druid的主页

4、当我后台执行一条查询语句,Druid能帮我们监控SQL执行情况
(1)

(2)点击SQL监控,可以查到当前SQL的执行情况

整合Mybatis

一、整合之前回顾当初Spring整合Mybatis时候,需要导入特定的依赖,而如今我们SpringBoot整合Mybatis,也需要导入依赖
1、Spring整合Mybatis

  1. <dependency>
  2. <groupId>org.mybatis</groupId>
  3. <artifactId>mybatis-spring</artifactId>
  4. <version>2.0.2</version>
  5. </dependency>

2、SpringBoot整合Mybatis(注意版本,版本过高不兼容)

  1. <!-- SpringBoot整合Mybatis,导入此启动器-->
  2. <dependency>
  3. <groupId>org.mybatis.spring.boot</groupId>
  4. <artifactId>mybatis-spring-boot-starter</artifactId>
  5. <version>2.1.3</version>
  6. </dependency>

二、创建application.yaml配置文件,配置数据源信息

  1. spring:
  2. datasource:
  3. username: root
  4. password: root
  5. url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC
  6. driver-class-name: com.mysql.cj.jdbc.Driver
  7. type: com.alibaba.druid.pool.DruidDataSource

三、测试数据源是否配置成功

  1. @SpringBootTest
  2. class Springboot05MybatisApplicationTests {
  3. //装配配置好的数据源
  4. @Autowired
  5. DataSource dataSource;
  6. @Test
  7. void contextLoads() throws SQLException {
  8. //查看当前使用数据源
  9. System.out.println(dataSource.getClass());
  10. //查看当前数据库连接地址
  11. System.out.println(dataSource.getConnection());
  12. }
  13. }

控制台打印信息:、

四、编写实体类

  1. @Data
  2. @AllArgsConstructor
  3. @NoArgsConstructor
  4. public class User {
  5. private int id;
  6. private String name;
  7. private String pwd;
  8. }

五、编写mapper接口,注意这两个注解的作用,缺一不可

  1. //使用@Mapper注解,表示这个类是mybatis的一个mapper类,同样也可以在主启动类上加一个@MapperScan("需要扫描的包名")
  2. @Mapper
  3. @Repository
  4. public interface UserMapper {
  5. //查询全部用户
  6. List<User> queryUser();
  7. //根据id查询用户
  8. User queryUserById();
  9. //增加用户
  10. int addUser(User user);
  11. //修改用户
  12. int updateUser(User user);
  13. //删除用户
  14. int deleteUser();
  15. }

六、编写controller类,调用mapper数据层

  1. @RestController
  2. public class UserController {
  3. //想从控制层直接调用Dao,先把dao对象装配进来
  4. @Autowired
  5. private UserMapper userMapper;
  6. //查询全部用户
  7. @RequestMapping("/queryAll")
  8. public String queryUser(){
  9. List<User> users = userMapper.queryUser();
  10. for (User user : users) {
  11. System.out.println(user);
  12. }
  13. return users.toString();
  14. }
  15. }

七、在resources文件下新建一个mybatis文件,再建一个mapper文件,创建mapper接口对应的mapper.xml配置文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--namespace需要和我们的Dao/Mapper接口进行绑定才能产生关联,里面就写接口类就行-->
  6. <mapper namespace="com.guohui.mapper.UserMapper">
  7. <select id="queryUser" resultType="user">
  8. select * from mybatis.user
  9. </select>
  10. </mapper>

八、编写application.yaml配置文件,将来都会整合到一个配置文件中(这一步很关键,不然我们编写的mapper.xml无法被扫描到)

  1. spring:
  2. datasource:
  3. username: root
  4. password: root
  5. url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC
  6. driver-class-name: com.mysql.cj.jdbc.Driver
  7. type: com.alibaba.druid.pool.DruidDataSource
  8. # 整合Mybatis.type-aliases-package是给实体类起别名;mapper-locations配置mapper地址
  9. mybatis:
  10. type-aliases-package: com.guohui.pojo
  11. # classpath:表示resources,":"后面的第一个路径不要加/
  12. mapper-locations: classpath:mybatis/mapper/*.xml

九、启动服务器,测试

  1. @SpringBootApplication
  2. public class Springboot05MybatisApplication {
  3. public static void main(String[] args) {
  4. SpringApplication.run(Springboot05MybatisApplication.class, args);
  5. }
  6. }

控制台打印结果:
成功将数据查询出来了

至此,SpringBoot整合数据源并操作数据库的技术点你已经完全的掌握了,后续还会持续更新,敬请期待!预祝猿朋友早日成为全栈工程师!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/157822
推荐阅读
相关标签
  

闽ICP备14008679号