引言
通過這段時間的學習和自己對springboot這些知識點的掌握情況,自己springboot+mybatis+thymeleaf寫了一個簡單的後臺管理系統,並部署到騰訊雲上了,下面的這篇博客就是我簡答的描述一下這個項目的操作流程及其涉及的有關的技術和感想等細節,最主要的是給大家展示一下功能實現的一個模塊,其他的類似的功能就不再多絮叨,話不多說,小劉就開始給大家講解該系統的大概流程
準備工作
1.引入相關的座標
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.zzuli</groupId>
<artifactId>springboot-mabatis-thymeleaf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-mabatis-thymeleaf</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入springBoot的模板引擎thymeleaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--引入jQuery的webjars文件-->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1</version>
</dependency>
<!--引入bootstrap-->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>4.0.0</version>
</dependency>
<!--mybatis對應的的連接springboot的驅動-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<!--數據庫連接的驅動mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--引入數據源-->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.8</version>
</dependency>
<!--配置日誌的相關的信息-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--配置逆向工程所對應的依賴-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--maven插件-->
<!--mybatis-generator插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<!--指定資源文件的路徑-->
<configuration>
<configurationFile>src\main\resources\generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<!--此插件需要依賴的jar包資源-->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
2.引入相關的配置文件
我這裏是分開寫了以一個yml文件和一個properties文件分開寫的
2.1:properties文件主要寫的是對springboot的一些基本的配置,比如端口號,國際化,緩存這些設置
#如何修改服務器的內部的配置信息
server.port=8080
server.servlet.context-path=/xmsms
server.tomcat.uri-encoding=UTF-8
#ResourceBundleMessage Sourceͳһ springboot的國際化
spring.messages.basename=i18n.login
#禁用thymeleaf的緩存
spring.thymeleaf.cache=false
#指定日期的格式
spring.mvc.date-format=yyyy-MM-dd
#開啓delete的請求的支持
spring.mvc.hiddenmethod.filter.enabled=true
2.2主要寫對數據源相關的配置和mybatis的相關的整合的配置
#如何修改數據庫的配置信息
spring:
datasource:
#數據源基本配置
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
#已經修改過的數據庫連接源 from qzf
# 15點24分
url: jdbc:mysql://localhost:3306/xmsms?serverTimezone=UTC
type: com.alibaba.druid.pool.DruidDataSource
# 數據源其他配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置監控統計攔截的filters,去掉後監控界面sql無法統計,'wall'用於防火牆
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#創建自動配置的建表語句 自動配置的寫法
# schema:
# - classpath:sql/department.sql
# - classpath:sql/employee.sql
#springboot中配置mybatis的相關的配置信息
#config-location指的的全局變量
#mapper-locations指的是相關的配置文件
#mapper-locations指的是相關的配置文件
mybatis:
config-location: classpath:com/zzuli/springboot/mybatis-config.xml
#配置mapper.xml文件所在的路徑
mapper-locations: classpath:com/zzuli/springboot/mapper/*.xml
#配置映射類所在的包名
#type-aliases-package: com.zzuli.springboot.mapper
#你好2019年12月25日15:27:33
3.項目的目錄結構
具體代碼實現
1.首先寫一個配置文件的監控信息,這裏配置的是druid監控中心,讓我們能夠監視出其訪問的相關的信息
package com.zzuli.springboot.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;
/**
* @author liugang
* @version 1.0
* @date 2019/12/22 9:28
* 配置數據源信息
*/
@Configuration
public class DruidConfig {
//設置我們自制的數據的連接池
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid(){
return new DruidDataSource();
}
//配置Druid的監控
//1.配置一個管理後臺的servlet
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
Map<String,String> initParams = new HashMap<>();
initParams.put("loginUsername","admin");
initParams.put("loginPassword","123456");
initParams.put("allow",""); //默認可以可以的都可以來訪問
initParams.put("deny","19.128.3.26");
//配置很多的初始化參數
bean.setInitParameters(initParams);
return bean;
}
//2.配置一個web監控的filter
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
Map<String,String> initParams = new HashMap<>();
initParams.put("exclusions","*.js,*.css,/druid/*");
bean.setInitParameters(initParams);
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}
2.寫一個服務器有關的配置類的有關的配置類,在這裏面來書寫我們常用的基本的配置信息
package com.zzuli.springboot.config;
import com.zzuli.springboot.filter.MyFilter;
import com.zzuli.springboot.listener.MyListener;
import com.zzuli.springboot.servlet.MyServlet;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Arrays;
/**
* @author liugang
* @version 1.0
* @date 2019/12/21 9:56
* 創建的是與服務器有關的配置類
*/
@Configuration
public class MyServerConfig {
//註冊三大組件 這是servlet
@Bean
public ServletRegistrationBean myServlet(){
ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet");
registrationBean.setLoadOnStartup(1); //設置項目的啓動的順序 其相關的組件的配置信息都可以設置
return registrationBean;
}
//註冊filter
@Bean
public FilterRegistrationBean myFilter(){
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
//過濾器加載其過濾的條件和其過濾的路徑
registrationBean.setFilter(new MyFilter());
registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
return registrationBean;
}
//註冊監聽器listener
@Bean
public ServletListenerRegistrationBean myListener(){
ServletListenerRegistrationBean listenerRegistrationBean = new ServletListenerRegistrationBean(new MyListener());
return listenerRegistrationBean;
}
}
3.這裏主力講解用戶登錄的模塊的信息,這是其controller
package com.zzuli.springboot.controller;
import com.zzuli.springboot.bean.User;
import com.zzuli.springboot.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.jws.soap.SOAPBinding;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;
/**
* @author liugang
* @version 1.0
* @date 2019/12/23 10:55
* 用戶的Controller的管理的業務
*/
@Controller
public class UserController {
Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private UserService userService;
/**
* 登錄方法,匹配賬號和密碼
* @param username 接收賬戶名
* @param password 接收密碼
* @param map 通過map實現信息回顯
* @param session session域對象實現提示信息的顯示
* @return 成功返回主頁面,失敗返回登陸頁面
*/
@PostMapping(value = "/user/login")
public String login(@RequestParam("username") String username,
@RequestParam("password") String password,
Map<String,Object> map, HttpSession session){
logger.info("第一次打印日誌");
//添加登錄的方法進行數據庫的匹配數據
User user = userService.UserLogin(username,password);
if(user != null){
//登錄成功,防止表單重複提交,可以重定向到主頁
//將數據儲存到域對象中去
session.setAttribute("loginUser",username);
return "redirect:/main.html";
}
//登錄失敗
map.put("msg","用戶名或者密碼錯誤");
return "login";
}
/**
* 查詢到所有的員工到列表頁面
* @param model 通過model來進行域對象信息共享實現信息回顯
* @return 返回員工列表
*/
@GetMapping("/users")
public String userList(Model model){
List<User> users = userService.getAll();
model.addAttribute("users",users);
return "user/list";
}
/**
* 來到添加頁面並展示是否是管理員
* @param model 通過model來進行域對象信息共享實現信息回顯
* @return 返回添加頁面
*/
@GetMapping("/user")
public String showUser(Model model){
List<User> users = userService.getAll();
model.addAttribute("users",users);
return "user/add";
}
/**
* 添加用戶
* @param user 傳入用戶的實體信息
* @return 返回用戶界面
*/
@PostMapping("/user")
public String addUser(User user){
userService.insertUser(user);
return "redirect:/users";
}
/**
* 根據id來查詢想要查詢的用戶的信息
* @param uid 傳入用戶的id
* @return 返回添加頁面
*/
@GetMapping("/user/{uid}")
public String getUserById(@PathVariable("uid") Integer uid,Model model){
//根據id來查詢出對應的員工的信息
User user = userService.getUserById(uid);
model.addAttribute("user",user);
//來到員工添加頁面,在頁面上顯示,頁面上查詢出所有的的員工的權限信息
List<User> users = userService.getAll();
model.addAttribute("users",users);
return "user/add";
}
/**
* 更新用戶的方法
* @param user 傳入用戶的實體類信息
* @return 返回用戶界面
*/
@PutMapping("/user")
public String updateUser(User user){
userService.updateUser(user);
return "redirect:/users";
}
/**
* 刪除用戶的方法
* @param uid 傳入用戶的id
* @return 返回users列表
*/
@DeleteMapping("/user/{uid}")
public String deleteUser(@PathVariable("uid") Integer uid){
userService.deleteUser(uid);
return "redirect:/users";
}
}
4.service用來處理其相關的業務邏輯
package com.zzuli.springboot.service.impl;
import com.zzuli.springboot.bean.User;
import com.zzuli.springboot.bean.UserExample;
import com.zzuli.springboot.mapper.UserMapper;
import com.zzuli.springboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author liugang
* @version 1.0
* @date 2019/12/23 10:53
* 設置用的服務層業務
*/
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User getUserById(Integer uid) {
return userMapper.selectByPrimaryKey(uid);
}
@Override
public User UserLogin(String username, String password) {
UserExample userExample = new UserExample();
UserExample.Criteria criteria = userExample.createCriteria();
criteria.andUnameEqualTo(username);
criteria.andUpwdEqualTo(password);
List<User> users = userMapper.selectByExample(userExample);
try {
return users.get(0);
} catch (Exception e) {
return null;
}
}
@Override
public List<User> getAll() {
return userMapper.selectByExample(null);
}
@Override
public void insertUser(User user) {
userMapper.insertSelective(user);
}
@Override
public void updateUser(User user) {
userMapper.updateByPrimaryKeySelective(user);
}
@Override
public void deleteUser(Integer uid) {
userMapper.deleteByPrimaryKey(uid);
}
}
運行結果
感想
通過這個項目的實現和過程知識的學習,讓我能夠明白了很多的知識不是咱們不會,只是不懂其之所以流程,我給朋友搭了一個環境利用svn條件3天就讓這個項目上線了,部署到騰訊雲服務器上了,我們應該多接觸新的知識,能夠讓我們以後的開發才能更加便利,有需要源碼的小夥伴可以私聊我喲