目錄
一、數據庫表準備
創建一個"demo"數據庫,並在其中創建一張user表。我們接下來將整合項目並取出數據庫user表中所有數據。
/*
Navicat MySQL Data Transfer
Source Server : dong
Source Server Version : 50642
Source Host : localhost:3306
Source Database : demo
Target Server Type : MYSQL
Target Server Version : 50642
File Encoding : 65001
Date: 2020-06-09 21:28:14
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for user_tb
-- ----------------------------
DROP TABLE IF EXISTS `user_tb`;
CREATE TABLE `user_tb` (
`userid` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`department` varchar(255) DEFAULT NULL,
`class` int(11) DEFAULT NULL,
PRIMARY KEY (`userid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user_tb
-- ----------------------------
INSERT INTO `user_tb` VALUES ('1', '周杰倫', '音樂系', '5');
INSERT INTO `user_tb` VALUES ('2', '張無忌', '武當派', '1');
INSERT INTO `user_tb` VALUES ('3', '趙敏', '蒙古族', '3');
二、創建項目
1、創建項目 | |
2、編寫基本項目結構以及代碼 | |
pom.xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hedong</groupId>
<artifactId>hedong</artifactId>
<version>1.0.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
user.java
package com.hedong.pojo;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Table(name = "user_tb")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer userid;
private String username;
private String department;
private Integer classroom;
public Integer getUserid() {
return userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public Integer getClassroom() {
return classroom;
}
public void setClassroom(Integer classroom) {
this.classroom = classroom;
}
}
引導類UserApplication.java
package com.hedong;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class);
}
}
三、整合SpringMVC
其實現在默認配置已經可以使用SpringMVC了,下面介紹如和訪問靜態資源和添加攔截器。
1、訪問靜態資源
我們習慣會把靜態資源放在classpath:/static/
目錄下。我們創建目錄,並且添加一些靜態資源:
啓動引導類後,在瀏覽器中訪問靜態資源如下:
2、添加攔截器
在SpringBoot中,我們是通過java配置來配置攔截器,而不使用xml方式。
MyInterceptor.java
package com.hedong.interceptors;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle method is running!");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle method is running!");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion method is running!");
}
}
MyConfiguration.java
package com.hedong.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyConfiguration implements WebMvcConfigurer {
@Autowired
private HandlerInterceptor myInterceptor;
/**
* 重寫接口中的addInterceptors方法,添加自定義攔截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor).addPathPatterns("/**");
}
}
這樣自定義攔截器就配置成功了。
四、整合連接池
在pom.xml中引入jdbc的啓動器:
<!--jdbc的啓動器,默認使用HikariCP連接池-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--不要忘記數據庫驅動,因爲springboot不知道我們使用的什麼數據庫,這裏選擇mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
在application.properties中指定連接池參數
# 連接四大參數
spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=hd2503652646.
# 可省略,SpringBoot自動推斷
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.hikari.idle-timeout=60000
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.minimum-idle=10
五、整合mybatis
在pom.xml中添加mybatis啓動器
<!--mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
需要注意,這裏沒有配置mapper接口掃描包,因此我們需要給每一個Mapper接口添加@Mapper
註解,才能被識別。
在pom.xml中添加mapper啓動器
<!-- 通用mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>
package com.hedong.mapper;
import com.hedong.pojo.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends tk.mybatis.mapper.common.Mapper<User> {
}
UserService.java
package com.hedong.service;
import com.hedong.mapper.UserMapper;
import com.hedong.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User queryById(int id){
return this.userMapper.selectByPrimaryKey(id);
}
@Transactional
public void deleteById(int id){
this.userMapper.deleteByPrimaryKey(id);
}
}
UserController.java
package com.hedong.controller;
import com.hedong.pojo.User;
import com.hedong.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Controller
@RequestMapping("user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("{id}")
@ResponseBody
public User queryUserById(@PathVariable("id")int id){
return this.userService.queryById(id);
}
@GetMapping("/all")
public String all(ModelMap model) {
// 查詢用戶
List<User> users = this.userService.queryAll();
// 放入模型
model.addAttribute("users", users);
// 返回模板名稱(就是classpath:/templates/目錄下的html文件名)
return "users";
}
}
六、啓動測試
啓動引導類,在瀏覽器中輸入地址
可以看到獲取user成功。
七、整合Thymeleaf
在UserService.java中添加方法
public List<User> queryAll() {
return this.userMapper.selectAll();
}
在UserController.java中添加對應方法,獲取全體用戶信息。
@GetMapping("/all")
public String all(ModelMap model) {
// 查詢用戶
List<User> users = this.userService.queryAll();
// 放入模型
model.addAttribute("users", users);
// 返回模板名稱(就是classpath:/templates/目錄下的html文件名)
return "users";
}
在pom.xml中引入thymeleaf啓動器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
模板默認放在classpath下的templates文件夾,我們新建一個html文件放入其中,把html 的名稱空間,改成:xmlns:th="http://www.thymeleaf.org"
會有語法提示 。
users.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>首頁</title>
<style type="text/css">
table {border-collapse: collapse; font-size: 14px; width: 80%; margin: auto}
table, th, td {border: 1px solid darkslategray;padding: 10px}
</style>
</head>
<body>
<div style="text-align: center">
<span style="color: darkslategray; font-size: 30px">用戶列表!</span>
<hr/>
<table class="list">
<tr>
<th>id</th>
<th>姓名</th>
<th>部門</th>
<th>班級</th>
</tr>
<tr th:each="user : ${users}">
<td th:text="${user.userid}"></td>
<td th:text="${user.username}"></td>
<td th:text="${user.department}"></td>
<td th:text="${user.classroom}"></td>
</tr>
</table>
</div>
</body>
</html>
啓動引導類並輸入地址訪問。
至此,所有內容整合結束!
八、完整項目結構