一、首先建立新项目,勾选JDBC和数据库驱动
二、在resources下建立文件application.yaml,配置数据源
spring: datasource: username: root password: root # serverTimezone=UTC增加时区的配置 url: jdbc:mysql://localhost:3306/mybatis?useSSL=true&characterEncoding=utf8&useUnicode=true&serverTimezone=UTC driver-class-name: com.mysql.cj.jdbc.Driver
三、了解一下SpringBoot默认数据源
通过下面的操作可以查看系统默认的数据源
class Springboot04DataApplicationTests { //自动装配数据源,装配后才能使用数据源获取数据库连接,操作数据库等工作 @Autowired DataSource dataSource; @Test void contextLoads() throws SQLException { //查看默认数据源,调用getClass()方法。现在springboot默认使用com.zaxxer.hikari.HikariDataSource数据源 System.out.println(dataSource.getClass());
了解HikariDataSource:
HikariDataSource号称Java Web当前速度最快的数据源,相比于传统的C3P0、DBCP、Tomcat等连接池更加优秀
四、在需要操作数据库的类中将数据源用@Autowired注解进行自定装配
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.Map; @RestController public class JdbcController { //SpringBoot帮我们整合了一个jdbc的模板框架,注册了模板的Bean,我们可以直接使用,使用@Autowired注解将JDBC模板自动装配进来即可 @Autowired JdbcTemplate jdbcTemplate; //将jdbc模板导入后,就可以使用模板中的方法了 @RequestMapping("/jdbc") public List
五、启动服务器,成功将数据库中的数据查出,当然增删改都可以完成。另外,SpringBoot帮我们配置了自动提交事务,增删改不用再进行手动提交事务
一、了解Druid数据源
是阿里巴巴开源的数据库连接池实现,结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控。
Druid可以很好的监控DB池链接合SQL的执行情况,天生就是针对监控而生的DB连接池
二、导入方法
1、导入依赖
com.alibaba druid1.1.12
2、在application.yaml配置文件中通过type指定需要的数据源
spring: datasource: username: root password: root # serverTimezone=UTC增加时区的配置 url: jdbc:mysql://localhost:3306/mybatis?userSSL=true&characterEncoding=utf8&useUnicode=true&serverTimezone=UTC driver-class-name: com.mysql.cj.jdbc.Driver # 通过type来指定数据源,如果不指定就使用默认的HikariDataSource(优点是快) type: com.alibaba.druid.pool.DruidDataSource
3、在test中测试是否成功切换了数据源
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; @SpringBootTest class Springboot04DataApplicationTests { //自动装配数据源,装配后才能使用数据源获取数据库连接,操作数据库等工作 @Autowired DataSource dataSource; @Test void contextLoads() throws SQLException { //查看默认数据源,现在springboot默认使用com.zaxxer.hikari.HikariDataSource数据源 System.out.println(dataSource.getClass()); //获取数据库连接 Connection connection = dataSource.getConnection(); System.out.println(connection); //最后用完记得关闭 connection.close(); } }
控制台打印结果:成功切换成Druid数据源
三、在application.yaml配置文件中扩展Druid配置
列举了比较重要的Druid数据源专有配置
#Spring Boot 默认是不注入这些属性值的,需要自己绑定 #druid 数据源专有配置 initialSize: 5 minIdle: 5 maxActive: 20 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true #配置监控统计拦截的filters(重点,也是Druid数据源的优点):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
四、Druid数据源的配置(绑定数据源、配置后台监控、配置过滤器)和使用
1、首先在Springboot04DataApplication启动程序的同级建立config文件夹,新建Druid配置类,在该配置类中做绑定配置文件和自定义的监控配置等
import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.servlet.Filter; import javax.servlet.Servlet; import javax.sql.DataSource; import java.util.HashMap; import java.util.Map; //Druid核心配置类,用@Configuration注解声明该类为Druid的核心配置类 @Configuration public class DruidConfig { //配置Druid数据源,需要注册Bean,并且绑定application.yaml配置文件,这样才能让我们自定义的一些属性生效 @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource druidDataSource() { return new DruidDataSource(); } /*配置Druid后台监控Servlet *这个配置一般都是固定的,了解原理,将来直接拿着用 * 原理:这个后台监控其实就相当于之前的web.xml,但是现在SpringBoot内置了servlet容器,所以没有web.xml。 * 那么我们现在就是用替代方法,将ServletRegistrationBean用@Bean注册进容器中,被Spring托管,作用等价 * */ @Bean public ServletRegistrationBean statViewServlet() { //死代码 ServletRegistrationBeanbean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*"); //为了配置后台登陆的账号和密码,定义一个哈希map,里面存放初始化的账号和密码 Map initParams = new HashMap<>(); //1、配置账号和密码,注意:loginUsername和loginPassword是固定的参数,不要写错 initParams.put("loginUsername", "admin"); initParams.put("loginPassword", "123456"); //2、配置允许谁能访问,allow是固定的,后面的参数可以配置为空,也可以配置成localhost等情况 initParams.put("allow", ""); //3、配置禁止某ip访问,后面的参数配置那个主机的ip initParams.put("gh", "192.168.10.50"); //调用setInitParameters方法把初始化的账号和密码存进去,因为这个方法需要一个Map initParameters类型的参数,所以上面我new了一个map bean.setInitParameters(initParams); return bean; } /*配置过滤器filter:同样,因为现在SpringBoot没有web.xml,所以以同样的方式配置过滤器 * */ @Bean public FilterRegistrationBean webStatFilter(){ FilterRegistrationBean bean = new FilterRegistrationBean<>(); //1、设置过滤器,固定方法,使用Alibaba的过滤器 bean.setFilter(new WebStatFilter()); //2、配置可以过滤哪些请求 Map initParameters = new HashMap<>(); //配置哪些垃圾请求不进行统计,exclusions是固定的(看源码) initParameters.put("exclusions","*.js,*.cs,/druid/*"); bean.setInitParameters(initParameters); return bean; } }
2、启动服务器,浏览器中输入localhost:8080/druid,即可直接跳转到Druid的后台登陆页面
3、输入我们配置的账号和密码,进入到Druid的主页
4、当我后台执行一条查询语句,Druid能帮我们监控SQL执行情况
(1)
(2)点击SQL监控,可以查到当前SQL的执行情况
一、整合之前回顾当初Spring整合Mybatis时候,需要导入特定的依赖,而如今我们SpringBoot整合Mybatis,也需要导入依赖
1、Spring整合Mybatis
org.mybatis mybatis-spring2.0.2
2、SpringBoot整合Mybatis(注意版本,版本过高不兼容)
org.mybatis.spring.boot mybatis-spring-boot-starter2.1.3
二、创建application.yaml配置文件,配置数据源信息
spring: datasource: username: root password: root url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource
三、测试数据源是否配置成功
@SpringBootTest class Springboot05MybatisApplicationTests { //装配配置好的数据源 @Autowired DataSource dataSource; @Test void contextLoads() throws SQLException { //查看当前使用数据源 System.out.println(dataSource.getClass()); //查看当前数据库连接地址 System.out.println(dataSource.getConnection()); } }
控制台打印信息:、
四、编写实体类
@Data @AllArgsConstructor @NoArgsConstructor public class User { private int id; private String name; private String pwd; }
五、编写mapper接口,注意这两个注解的作用,缺一不可
//使用@Mapper注解,表示这个类是mybatis的一个mapper类,同样也可以在主启动类上加一个@MapperScan("需要扫描的包名") @Mapper @Repository public interface UserMapper { //查询全部用户 ListqueryUser(); //根据id查询用户 User queryUserById(); //增加用户 int addUser(User user); //修改用户 int updateUser(User user); //删除用户 int deleteUser(); }
六、编写controller类,调用mapper数据层
@RestController public class UserController { //想从控制层直接调用Dao,先把dao对象装配进来 @Autowired private UserMapper userMapper; //查询全部用户 @RequestMapping("/queryAll") public String queryUser(){ Listusers = userMapper.queryUser(); for (User user : users) { System.out.println(user); } return users.toString(); } }
七、在resources文件下新建一个mybatis文件,再建一个mapper文件,创建mapper接口对应的mapper.xml配置文件
八、编写application.yaml配置文件,将来都会整合到一个配置文件中(这一步很关键,不然我们编写的mapper.xml无法被扫描到)
spring: datasource: username: root password: root url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource # 整合Mybatis.type-aliases-package是给实体类起别名;mapper-locations配置mapper地址 mybatis: type-aliases-package: com.guohui.pojo # classpath:表示resources,":"后面的第一个路径不要加/ mapper-locations: classpath:mybatis/mapper/*.xml
九、启动服务器,测试
@SpringBootApplication public class Springboot05MybatisApplication { public static void main(String[] args) { SpringApplication.run(Springboot05MybatisApplication.class, args); } }
控制台打印结果:
成功将数据查询出来了
至此,SpringBoot整合数据源并操作数据库的技术点你已经完全的掌握了,后续还会持续更新,敬请期待!预祝猿朋友早日成为全栈工程师!