从头开始搭建一个SpringBoot项目-整合MyBatis
创建一个初始项目
可以参考我的另一篇文章:第一个SpringBoot程序
创建完成以后的目录结构这样的:
其中的操作,在上面链接文章中有演示。
第一个请求访问是这样的:
pom文件主要内容
就一个web的启动器和测试,SpringBoot的版本是2.7.4
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.demo01</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>初始的SpringBoot项目</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</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>
MyBatis的引入
数据库
先创建一个用户表
用户表的建表语句
CREATE TABLE `user` (
`id` int(20) NOT NULL,
`name` varchar(20) DEFAULT NULL,
`pw` varchar(20) DEFAULT NULL,
`role` varchar(20) DEFAULT NULL COMMENT '用户角色',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我这里的角色就比较简单了
其中的数据
向表中插入几条数据
MyBatis的引入以及配置
引入MyBaitis的依赖
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
配置信息
使用注解@MapperScan扫描Mapper
连接数据库的基本配置信息
引入druid
在这里可以再引入一个druid的依赖,用于后续做数据库的分析
<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>
当然,还有我们连接MySQL的驱动不要忘记引入
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
application.yml的配置
spring:
#配置数据源
datasource:
name: mydatasource
#自定义数据源
type: com.alibaba.druid.pool.DruidDataSource
druid:
#监控统计拦截的filters
filters: stat
driver-class-name: com.mysql.cj.jdbc.Driver
#连接基本属性
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=UTC
username: root
password: root
#配置初始化大小/最小/最大
initial-size: 1
min-idle: 1
max-active: 20
#获取连接等待超时时间
max-wait: 60000
#间隔多久进行一次检测,检测需要关闭的空闲连接
time-between-eviction-runs-millis: 60000
#一个连接在池中最小生存的时间
min-evictable-idle-time-millis: 300000
#用来验证连接是否有效的sql
validation-query: SELECT 'x'
#申请连接时检测空闲时间
test-while-idle: true
#从连接池获取连接时是否检查连接有效性,true检查,false不检查
test-on-borrow: false
#归还连接时是否检查连接有效性,true检查,false不检查
test-on-return: false
#打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
pool-prepared-statements: false
#连接池中最大的预处理连接数量
max-pool-prepared-statement-per-connection-size: 20
stat-view-servlet:
enabled: false
mybayis:
#配置mapper的指定路径
mapper-locations: classpath*:com/demo/**/dao/*.xml
#防止空值异常报错
configuration:
jdbc-type-for-null: 'null'
pom.xml文件中配置资源的导出
将以下代码加到pom文件末尾的build标签下
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*</include>
<include>*/*</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
否则就可能导致target目录下的application.yml不存在,进而导致报错
访问数据库
接下来就该访问数据库了
包的目录结构
这里的dao层,要和你前面配置的扫描路径以及配置文件中的信息一致,否则就会访问不到,导致报错
构建实体类,容我偷个懒,引入一个自动生成setter、getter的依赖lombok
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
各类的具体代码
user包下的具体代码
UserBean.class
用户的实体类
@Setter
@Getter
@ToString
public class UserBean {
int id;
String name;
String pw;
String role;
}
UserController.class
用户访问的接口
@RestController
@RequestMapping("/user/")
public class UserController {
@Autowired
UserBeanServices userBeanServices;
@RequestMapping("/getUserBeanByName")
@ResponseBody
public String getUserBeanByName(
@RequestParam("name") String name
) {
return userBeanServices.getUserByUserName(name).toString();
}
}
UserBeanDao.class
dao的接口
public interface UserBeanDao {
//根据用户名称获取用户对象
UserBean getUserByUserName(String name);
}
UserBeanDao.xml
dao的映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 这里指定接口 -->
<mapper namespace="com.demo.user.dao.UserBeanDao">
<select id="getUserByUserName" resultType="com.demo.user.bean.UserBean" parameterType="String">
select id , name , pw , role from user where name = #{name}
</select>
</mapper>
UserBeanServices.class
业务逻辑的接口类
public interface UserBeanServices {
UserBean getUserByUserName(String name);
}
UserBeanServicesImpl.class
@Service
public class UserBeanServicesImpl implements UserBeanServices {
@Autowired
UserBeanDao dao;
@Override
public UserBean getUserByUserName(String name) {
return dao.getUserByUserName(name);
}
}
验证是否成功
请求出来的数据 与数据库对应 则表明成功。这里Mybatis的操作,比如增删改就不再演示了。可以参考我的其他文章:
Mybatis中对数据库的增删改查
Mybatis中的CRUD可变参数
配置druid 并进入后台管理
建立以下包结构
DruidConfig.class
package com.demo.config;
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.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class DruidConfig {
//注意这里,前缀记得要跟application.yml里面的对应
@ConfigurationProperties(prefix = "spring.datasource.druid")
@Bean
public DataSource druid(){
return new DruidDataSource();
}
//配置Druid监控
/**
* 1、配置管理后台的Servlet
* 2、配置一个Web监控的filter
*/
//配置一个管理后台的Servlet
@Bean
public ServletRegistrationBean<StatViewServlet> statViewServlet(){
ServletRegistrationBean<StatViewServlet> servletServletRegistrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
servletServletRegistrationBean.addInitParameter("loginUsername","admin");
servletServletRegistrationBean.addInitParameter("loginPassword","123456");
servletServletRegistrationBean.addInitParameter("allow","");
servletServletRegistrationBean.addInitParameter("deny","172.16.208.208");
return servletServletRegistrationBean;
}
//配置一个Web监控的filter
@Bean
public FilterRegistrationBean<WebStatFilter> webStatFilter(){
FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<>();
bean.setFilter(new WebStatFilter());
Map<String,String> initParams = new HashMap<>();
initParams.put("exclusions","*.css,*.png,*.jpg,*.js,/druid/*");
bean.setInitParameters(initParams);
bean.setUrlPatterns(Arrays.asList("/*"));
bean.setInitParameters(initParams);
return bean;
}
}
启动项目,浏览器输入:
http://localhost:8080/druid/login.html
登录进去,账号密码是:admin 123456
然后调用之前的可以访问数据库的接口,SQL监控下有显示即可。
小结
本文从零开始,搭建了一个SpringBoot的项目,整合了Mybatis,实现了对MySQL数据库的访问,以及使用Druid对Sql进行监控。