SpringBoot2.1(4)集成Mybatis、Druid及Druid应用监控
《回顾》
前三篇,看完以后,你的技能列表如下:
会搭建SpringBoot2 + Java11架构的项目
会基本配置
会启用日志
会使用Freemarker、Thymeleaf结合SpringBoot开发页面
会构建可用于生产的Jar包
这一篇,来解决最关键的一个问题,和数据库交互。
本文,以MySQL为例。
持久层框架:Mybatis
连接池:Druid
Mybatis,使用XML进行操作,
为什么不用注解方式?
因为XML可以自动生成。
一、Maven依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
二、新建包
com.zhou.springbootz04.controller
com.zhou.springbootz04.entity
com.zhou.springbootz04.mapper
com.zhou.springbootz04.service
com.zhou.springbootz04.service.impl
resources/mapperxml
结构如下:
三、配置Springboot支持
##### 日志 #####
logging.level.root=info
# 打印sql日志
logging.level.com.zhou.springbootz04.mapper=debug
logging.file=/opt/logs/springbootz/springbootz.log
##### thymeleaf ####
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.cache=false
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=LEGACYHTML5
##### druid ####
# JDBC 配置(驱动类自动从url的mysql识别,数据源类型自动识别)
spring.datasource.druid.url=jdbc:mysql://localhost:3306/springbootz?useUnicode=true&characterEncoding=UTF8
spring.datasource.druid.username=root
spring.datasource.druid.password=root123
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
#连接池配置
spring.datasource.druid.initial-size=1
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-wait=60000
spring.datasource.druid.filters=stat
##### druid 监控 ####
# WebStatFilter配置
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
spring.datasource.druid.web-stat-filter.session-stat-enable=false
spring.datasource.druid.web-stat-filter.session-stat-max-count=1000
spring.datasource.druid.web-stat-filter.principal-session-name=admin
spring.datasource.druid.web-stat-filter.principal-cookie-name=admin
spring.datasource.druid.web-stat-filter.profile-enable=true
# StatViewServlet配置
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.reset-enable=true
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
##### mybatis xml存放位置 #####
mybatis.mapper-locations=classpath:/mapperxml/*.xml
四、创建数据库及表
4.1、创建表
SQL:
CREATE TABLE `user` (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`USER_NAME` varchar(64) NOT NULL COMMENT '用户名',
`USER_CODE` varchar(64) NOT NULL COMMENT '用户Code',
`USER_DESC` varchar(255) DEFAULT NULL COMMENT '用户描述',
`CREATE_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATE_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
4.2、代码生成
日常,我们在开发中,Mybatis的实体及基本的insert、update、delete、select语句,不需要自己手动编写,使用工具生成即可。
4.2.1、生成工具
公众号回复:automybatis
4.2.2、编辑「generator.xml」,下载到的文件中,有详细的注释及生成命令文档,请按照文档操作。
执行命令:
java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite
如上图,命令执行成功。
进入文件夹查看内容:
4.2.3、将三个文件夹内的文件,copy到项目中对应的路径。
如图:
五、动手写代码
本文使用一个保存流程、一个查询流程来演示。
5.1新建文件
新建类:
com.zhou.springbootz04.controller.UserController.java
新建接口:
com.zhou.springbootz04.service.UserService.java
新建接口实现类:
com.zhou.springbootz04.service.impl.UserServiceImpl.java
新建html(Thymeleaf,不了解查看前篇文章):
templates/user.html
templates/user_detail.html
结构如下:
5.2 编写代码
如果您对Java WEB不太熟悉,强烈建议您从SpringBoot系列文章的第一篇看起。请查阅公众号,SpringBoot2目录。
5.2.1、 UserService 及 UserServiceImpl
接口:
public interface UserService {
int insert(User record);
User selectByPrimaryKey(Integer id);
}
实现:
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
@Override
public int insert(User record) {
record.setCreateTime(new Date());
record.setUpdateTime(new Date());
userMapper.insert(record);
return record.getId();
}
@Override
public User selectByPrimaryKey(Integer id) {
return userMapper.selectByPrimaryKey(id);
}
}
@Service:将对象注入到Spring中。
@Resource:从Spring中获取实例,等同于@Autowired
5.2.2、UserController
@Controller
public class UserController {
@Resource
private UserService userService;
// 首页
@GetMapping("")
public String index(){
return "user";
}
// 保存
@PostMapping("/save")
public String save(User user){
return "redirect:/user_detail/" + userService.insert(user);
}
// 获取用户信息
@GetMapping("/user_detail/{id}")
public ModelAndView detail(@PathVariable int id){
var modelAndView = new ModelAndView("user_detail");
modelAndView.addObject("user",userService.selectByPrimaryKey(id));
return modelAndView;
}
}
5.2.3、Springbootz04Application
启动类,需要增加对Mybatis接口类的扫描
如下(中间那行):
@SpringBootApplication
@MapperScan("com.zhou.springbootz04.mapper")
public class Springbootz04Application {
5.2.4、user.html 和 user_detail.html
user.html 增加form表单
<form method="post" action="/save" th:action="@{/save}">
唯一编号:<input type="text" name="id"><br>
用户名:<input type="text" name="userName"><br>
用户编码:<input type="text" name="userCode"><br>
用户介绍:<input type="text" name="userDesc"><br>
<button type="submit">提交</button>
</form>
user_detail.html 增加展示代码
<div>
唯一代码:<span th:text="${user.id}"></span><br>
用户名:<span th:text="${user.userName}"></span><br>
用户编码:<span th:text="${user.userCode}"></span><br>
用户介绍:<span th:text="${user.userDesc}"></span><br>
</div>
运行程序,并访问页面。
-
保存用户
-
查询用户
-
数据库数据
六、Druid监控
druid自带一个监控平台,可以对应用URI访问情况,SQL执行情况,以及应用的基本状态进行监控。
访问:
http://localhost:8080/druid
用户名及密码,就是我们在“application.properties”中,配置的login-username、login-password。
值:admin/admin
登陆后,可以看到如下界面。均为中文菜单,比较简单,我就不过多的浪费口舌,自己试着点一下,印象更深刻。
七、获取源码
SpringBoot2.1系列的的文章,每一篇都会对应一个单独的项目。
所有项目源码,均托管在Gitee,并会持续更新。
SpringBoot2.1.1 + Java11 系列文章演示代码,公众号回复:springbootz
SpringBoot2.1.1 + Elasticsearch6.5.3,公众号回复:es6
SpringBoot2.1.0 + Solr7.5,公众号回复:solr
Java11演示代码,公众号回复:Java11
博客内所有文章,每周从公众号同步一次。
文章源码均可从公众号获取。
如果您可以关注下,那就好了。