观察到德鲁伊的后台,会检测到SQL语句的变化
(4).配置Druid数据源过滤器
// 配置过滤器 @Bean public FilterRegistrationBean Filter(){ FilterRegistrationBean filterFilterRegistrationBean = new FilterRegistrationBean(); filterFilterRegistrationBean.setFilter(new WebStatFilter()); // 可以过滤那些请求? Map<String, String> initParameters=new HashMap<>(); // 排除谁被过滤? initParameters.put("exclusions","*.js,*.css,*.html,*/druid/*"); // 设置初始化参数 filterFilterRegistrationBean.setInitParameters(initParameters); return filterFilterRegistrationBean; }
注意点:DruidConfig文件一定要添加配置注解,在里面配置的一些servlet和filter都要添加@Bean注解
(5).注解的详解⭐
@SpringBootApplication
这个注解是SpringBoot最核心的注解,用在SpringBoot的主类上,标识这是一个SpringBoot应用,用来开启SpringBoot的各项能力。实际上这个注解是@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解的组合。由于这些注解一般都是一起使用,所以SpringBoot提供了一个统一的注解@SpringBootApplication。
@EnableAutoConfiguration
允许SpringBoot自动配置注解,开启这个注解之后,SpringBoot就能根据当前类路径下的包或者类来配置SpringBean。
如:当前路径下有Mybatis这个JAR包,MybatisAutoConfiguration注解就能根据相关参数来配置Mybatis的各个SpringBean,
@Configuration
用于定义配置类,指出该类是Bean配置的信息源,相当于传统的xml配置文件,一般加在主类上。如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类。
@ComponentScan
组件扫描。让SpringBoot扫描到Configuration类并把它加入到程序上下文。@ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到Spring容器中。
@RestController
用于标注控制层组件(如struts中的action),表示这是个控制器bean,并且是将函数的返回值直接填入HTTP响应体中,是REST风格的控制器;它是@Controller和@ResponseBody的合集。
@Bean
相当于XML中的< bean> < /bean>,放在方法的上面,而不是类,意思是产生一个bean,并交给Spring管理。
@PathVariable
路径变量,参数与大括号里的名字一样要相同。
@ConfigurationProperties
将配置文件中的Person属性赋的值映射到该组件中
3.整合Mybatis
(1).整合测试
1.导入Mybatis的依赖
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency>
2.我们在编写配置的时候,driver-class-name 驱动一定要放在最后面.否则会报错
反列:
spring: datasource: driver-class-name: com.mysql.jdbc.Driver username: root password: 121788 url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useonicode=true&characterEncoding=utf-8
正列:
spring: datasource: username: root password: 121788 url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useonicode=true&characterEncoding=utf-8 driver-class-name: com.mysql.jdbc.Driver
3.我们的pom.xml文件中,需要引入mybatis的驱动。并且JDBC的驱动需要指定版本否则报错
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.8</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.jsxs</groupId> <artifactId>SpringBoot-04-Mybatis</artifactId> <version>0.0.1-SNAPSHOT</version> <name>SpringBoot-04-Mybatis</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!-- 我们导入Mybatis的启动器--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 如果不对数据库驱动添加版本的话,就默认是最高的--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
4、测试数据库是否连接成功!
测试数据:
package com.jsxs; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @SpringBootTest class SpringBoot04MybatisApplicationTests { @Resource private DataSource dataSource; @Test void contextLoads() throws SQLException { Connection connection = dataSource.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement("select *from user"); ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()){ System.out.println(resultSet.getString(1)+" "+resultSet.getString(2)); } connection.close(); } }
5.设置实体类pojo
package com.jsxs.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class User { private int id; private String name; private String pwd; }
6.创建Dao层接口 mapper文件夹下面设置接口UserMapper.java
- @Mapper 这个注解表示了这是一个 Mybatis 的 mapper 类相当于Dao层的接口。 类: Dao
- @Repository Dao层接口的注解
package com.jsxs.mapper; import com.jsxs.pojo.User; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; import java.util.List; //这个注解表示了这是一个 Mybatis 的 mapper 类相当于Dao层的接口。 类: Dao @Mapper // 注解类 Dao @Repository public interface UserMapper { // 查询全部的用户 public List<User> queryList(); // 通过id进行查询用户 public User UserById(int id); // 进行增加用户信息 public int addUser(User user); // 进行更新用户 public int updateUser(User user); // 通过id进行数据的查询 public int deleteUserById(int id); }
7.在resources目录下设置mybatis/UserMapper.xml
- 绑定mapper/User.Mapper.java工作空间
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 1. 我们首先要绑定工作空间--> <mapper namespace="com.jsxs.mapper.UserMapper"> <!-- 2. 我们编写SQL语句 --> <!-- id是方法名, 返回类型是实体类 --> <select id="queryList" resultType="com.jsxs.pojo.User"> select *from user; </select> <!-- 3.通过id查找 #{xxx} 占位符 --> <select id="UserById" parameterType="int" resultType="com.jsxs.pojo.User"> select *from user where id=#{id} </select> <!-- 3.增加用户信息--> <insert id="addUser" parameterType="com.jsxs.pojo.User"> insert into user values(#{id},#{name},#{pwd}) </insert> <!-- 4.进行更新用户信息--> <update id="updateUser" parameterType="com.jsxs.pojo.User"> update user set name=#{name},pwd=#{pwd} where id=#{id} </update> <!-- 进行删除数据--> <delete id="deleteUserById" parameterType="int"> delete from user where id=#{id} </delete> </mapper>