SpringBoot-第二天
1.学习目标
1.Mybatis整合&数据访问
2.Swagger2 文档工具
3.热部署
4.单元测试
5.分布式缓存Ehcache集成与使用
6.Quartz定时调度集成
7.全局异常与事务控制
8.数据校验-validation
2.Mybatis整合&数据访问
使用SpringBoot开发企业项目时,持久层数据访问是前端页面数据展示的基础,SpringBoot支持市面上常见的关系库产品(Oracle,Mysql,SqlServer,DB2等)对应的相关持久层框架,当然除了对于关系库访问的支持,也支持当下众多的非关系库(Redis,Solr,MongoDB等)数据访问操作,这里主要介绍SpringBoot集成Mybatis并实现持久层数据基本增删改查操作.
2.1.SpringBoot整合Mybatis
2.1.1.环境整合配置
Idea下创建Maven普通工程springboot_mybatis
pom.xml添加核心依赖
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mybatis 集成 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<!-- springboot 分⻚插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>
<!-- mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- c3p0 数据源 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
application.yml整合配置
server:
# 设置项⽬启动的端⼝号
port: 8080
# 设置项⽬的访问路径(上下⽂路径)
servlet:
context-path: /springboot_mybatis
## 数据源配置
spring:
datasource:
type: com.mchange.v2.c3p0.ComboPooledDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/springboot_mybatis?
useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
username: root
password: root
## mybatis 配置
mybatis:
mapper-locations: classpath:/mappers/*.xml
type-aliases-package: com.xxxx.springboot.po
configuration:
## 下划线转驼峰配置
map-underscore-to-camel-case: true
## pageHelper
agehelper:
helper-dialect: mysql
## 显示dao 执⾏sql语句
logging:
level:
com:
xxxx:
springboot:
dao: debug
2.1.2.源代码添加
JavaBean对象定义
package com.xxxx.springboot.po;
public class User {
private Integer id;
private String userName;
private String userPwd;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
}
Dao层接口方法定义
com.xxxx.springboot.dap包下创建UserMapping.java接口声明查询方法
package com.xxxx.springboot.dao;
import com.xxxx.springboot.po.User;
public interface UserMapper {
// 根据⽤户名查询⽤户记录
User queryUserByUserName(String userName);
}
SQL映射文件添加
resource/mappers目录下添加UserMapper.xml配置,查询statetment
<?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.xxxx.springboot.dao.UserMapper">
<select id="queryUserByUserName" parameterType="string"
resultType="com.xxxx.springboot.po.User">
select
id,user_name,user_pwd
from tb_user
where user_name=#{userName}
</select>
</mapper>
添加service,controller对应代码
UserService.java
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User queryUserByUserName(String userName){
return userMapper.queryUserByUserName(userName);
}
}
UserController.java
@RestController
public class UserController {
@Resource
private UserService userService;
@GetMapping("user/{userName}")
public User queryUserByUserName(@PathVariable String userName){
return userService.queryUserByUserName(userName);
}
}
添加应用启动入口
@SpringBootApplication
@MapperScan("com.xxxx.springboot.dao")
public class Starter {
public static void main(String[] args) {
SpringApplication.run(Starter.class);
}
}
2.1.3.启动测试
运行Starter main方法,启动应用浏览器测试查询
2.2.SpringBoot数据访问操作
完成SpringBoot与Mybatis集成后,接下来以用户表为实例实现一套用户模块基本数据维护.
2.2.1查询操作
2.1.1.1.接口方法定义
UserMapper 接⼝添加查询的⽅法
public interface UserMapper {
// 通过⽤户ID查询⽤户
public User queryById(Integer id);
}
2.2.1.2.映射文件配置
<?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.xxxx.springboot.dao.UserMapper">
<select id="queryById" parameterType="int"
resultType="com.xxxx.springboot.po.User">
select
*
from
tb_user
where
id = #{id,jdbcType=INTEGER}
</select>
</mapper>
2.2.1.3.UserService
@Service
public class UserService {
@Resource
private UserMapper userMapper;
/**
* 通过⽤户ID查询⽤户
* @param id
* @return
*/
public User queryById(Integer id){
return userMapper.queryById(id);
}
}
2.2.1.4.UserController
@RestController
public class UserController {
@Resource
private UserService userService;
/**
* 根据⽤户ID查询⽤户对象
* @param userId
* @return
*/
@GetMapping("user/{userId}")
public User queryUserByUserId(@PathVariable Integer userId){
return userService.queryById(userId);
}
}
2.2.2.添加操作
2.2.2.1.接口方法定义
public interface UserMapper {
// 添加⽤户
public int save(User user);
}
2.2.2.2.映射文件配置
<?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.xxxx.springboot.dao.UserMapper">
<insert id="save" parameterType="com.xxxx.springboot.po.User">
insert into
tb_user
(user_name,user_pwd)
values
(#{userName},#{userPwd})
</insert>
</mapper>
2.2.2.3.添加commons-log3依赖
如果需要使用StringUtils工具类,需要引入commons-lang3依赖.
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
2.2.2.4.AssertUtil工具类
package com.xxxx.springboot.utils;
import com.xxxx.springboot.exceptions.ParamsException;
public class AssertUtil {
/**
* 判断结果是否为true
* 如果结果为true,抛出异常
* @param userName
* @return
*/
public static void isTrue(Boolean flag, String msg){
if(flag){
throw new ParamsException(msg);
}
}
}
2.2.2.5.ParamsException自定义异常
package com.xxxx.springboot.exceptions;
/**
* ⾃定义参数异常
*/
public class ParamsException extends RuntimeException {
private Integer code = 300;
private String msg = "参数异常!";
public ParamsException() {
super("参数异常!");
}
public ParamsException(String msg) {
super(msg);
this.msg = msg;
}
public ParamsException(Integer code) {
super("参数异常!");
this.code = code;
}
public ParamsException(Integer code, String msg) {
super(msg);
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
2.2.2.6.UserService
@Service
public class UserService {
@Resource
private UserMapper userMapper;
/**
* 添加⽤户
* @param user
*/
public void saveUser(User user) {
AssertUtil.isTrue(StringUtils