Spring boot+SpringMVC+Mybatis+thymeleaf整合

目錄

 

一、數據庫表準備

二、創建項目

三、整合SpringMVC

四、整合連接池

五、整合mybatis

六、啓動測試

七、整合Thymeleaf


一、數據庫表準備

創建一個"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>

啓動引導類並輸入地址訪問。

至此,所有內容整合結束!

八、完整項目結構

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章