Spring boot项目搭建(前端到数据库,超详细),大神勿进!

开发 项目管理
今天刚好我有空,于是,我就搞了一个从前端到后台的用户系统(demo)。用户系统基本是所有项目中都必须有的基础模块,可大可小。

[[385395]]

前段时间,有很多小伙伴私下跟我说,想搞一个项目实战。今天刚好我有空,于是,我就搞了一个从前端到后台的用户系统(demo)。用户系统基本是所有项目中都必须有的基础模块,可大可小。大的需要很大一个团队来维护,小的一个人兼职就能搞定。对于很多还未参与工作的同学来说,这个项目也可以练练手,说不定,第一份工作进去就是搞用户模块呢。

技术栈

Spring Boot 、Jpa 、Thymeleaf、HTML、Maven、MySQL。

对于技术栈,还不清楚的同学,自行查找相关资料,至少知道个大概是干啥的。

需求功能

现在需要对用户信息进行新增、列表展示、用户详情展示、信息修改、信息删除等功能。

用户信息:姓名、密码、手机号码、年龄。

数据库表

自己本地安装MySQL,并创建数据库,然后在创建一张用户表。

建表语句

  1. CREATE TABLE `user` ( 
  2.   `uid` bigint NOT NULL AUTO_INCREMENT, 
  3.   `uname` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL
  4.   `passwordvarchar(6) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
  5.   `tel` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
  6.   `age` int DEFAULT NULL
  7.   PRIMARY KEY (`uid`) 
  8. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; 

项目构建

项目整体目录

接下来,我们就一步一步,把这些代码理清楚。

整体项目采用的是

  1. html-->controller--->service--repository-->DB 

这也是当前实际开发中相对比较流行的,但为了演示,我这里就就用entity实体类就搞定了。

实际开发中会有其他什么O之类的,比如说:DTO/VO/BO.....。有的项目使用的是DTO,有的可能使用的是BO等。进入项目组了,按照项目组的开发规范来就行了,实在不理解的话,建议你先学会模仿别人是怎么做的。

废话不多说,直接开干!

创建Spring Boot项目

可以使用spring官网给创建方式,地址:

https://start.spring.io/

这里也可以参考另外一篇文章:

如何快速构建Spring Boot基础项目?

maven依赖

在项目的pom.xml中添加如下配置

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  3.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  4.     <modelVersion>4.0.0</modelVersion> 
  5.     <!-- Spring Boot 项目 --> 
  6.     <parent> 
  7.         <groupId>org.springframework.boot</groupId> 
  8.         <artifactId>spring-boot-starter-parent</artifactId> 
  9.         <version>2.1.6.RELEASE</version> 
  10.     </parent> 
  11.     <!-- 项目 maven 坐标 --> 
  12.     <groupId>com.tian.user</groupId> 
  13.     <artifactId>spring-boot-jpa-thymeleaf</artifactId> 
  14.     <version>1.0-SNAPSHOT</version> 
  15.     <!-- 项目名称 --> 
  16.     <name>spring-boot-jpa-thymeleaf</name>   
  17.  
  18.     <dependencies> 
  19.         <!-- web --> 
  20.         <dependency> 
  21.             <groupId>org.springframework.boot</groupId> 
  22.             <artifactId>spring-boot-starter-web</artifactId> 
  23.         </dependency> 
  24.         <!-- thymeleaf --> 
  25.         <dependency> 
  26.             <groupId>org.springframework.boot</groupId> 
  27.             <artifactId>spring-boot-starter-thymeleaf</artifactId> 
  28.         </dependency> 
  29.         <!-- jpa --> 
  30.         <dependency> 
  31.             <groupId>org.springframework.boot</groupId> 
  32.             <artifactId>spring-boot-starter-data-jpa 
  33.             </artifactId> 
  34.         </dependency> 
  35.         <!-- MySQL --> 
  36.         <dependency> 
  37.             <groupId>mysql</groupId> 
  38.             <artifactId>mysql-connector-java</artifactId> 
  39.         </dependency> 
  40.     </dependencies> 
  41.  
  42.     <build> 
  43.         <plugins> 
  44.             <plugin> 
  45.                 <groupId>org.springframework.boot</groupId> 
  46.                 <artifactId>spring-boot-maven-plugin</artifactId> 
  47.                 <configuration> 
  48.                     <fork>true</fork> 
  49.                 </configuration> 
  50.             </plugin> 
  51.         </plugins> 
  52.     </build> 
  53. </project> 

 

 

 

 

 

主要是SpringBoot项目parent、web、MySQL、jpa、thymeleaf依赖,这样就把相关的jar包给依赖进来了。

启动类

 

  1. import org.springframework.boot.SpringApplication; 
  2. import org.springframework.boot.autoconfigure.SpringBootApplication; 
  3. import org.springframework.boot.builder.SpringApplicationBuilder; 
  4. import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; 
  5.  
  6. /** 
  7.  * @author java 后端技术全栈 
  8.  * 就是一个简单的启动类 
  9.  */ 
  10. @SpringBootApplication 
  11. public class Application { 
  12.  
  13.     public static void main(String[] args) { 
  14.         SpringApplication.run(Application.class, args); 
  15.     }  

注意:此时数据库相关信息没有配置进项目里,所以,项目是启动不了的。

集成MySQL数据库

在resource目录下,创建一个application.properties文件,加入以下内容:

  1. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 
  2. spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC 
  3. spring.datasource.username=root 
  4. spring.datasource.password=123456 

注意:如果MySQL是8.0版本,必须要配置服务时区,否则会启动不了。

此时项目就可以正常启动了。

集成 Jpa

在application.properties中添加

  1. spring.jpa.properties.hibernate.hbm2dl.auto=create 
  2. spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 
  3. spring.jpa.show-sql=true 

创建一个UserRepository

  1. package com.tian.user.repository; 
  2.  
  3. import com.tian.user.entity.User
  4. import org.springframework.data.jpa.repository.JpaRepository; 
  5. import org.springframework.data.jpa.repository.Modifying; 
  6. import org.springframework.data.jpa.repository.Query; 
  7. import org.springframework.stereotype.Repository; 
  8.  
  9. @Repository 
  10. public interface UserRepository extends JpaRepository<User, Long> {  

这样jpa就集成就来了。

集成Thymeleaf

前面我们已经把jar包给以来进来了,需要在application.properties中添加

  1. spring.thymeleaf.cache=false 
  2. spring.thymeleaf.prefix=classpath:/templates/ 
  3. spring.thymeleaf.mode=.html 
  4. spring.thymeleaf.encoding=UTF-8 
  5. spring.thymeleaf.content-type=text/html 

然后在resources目录下添加两个文件夹:

  • templates 前端页面模板目录
  • static 前端静态资源目录

新增用户

在templates目录下创建index.html

  1. <!DOCTYPE html> 
  2. <html lang="zh" xmlns:th="http://www.thymeleaf.org"
  3. <head> 
  4.     <meta charset="UTF-8"
  5.     <title>Index</title> 
  6.     <!-- 为了减少篇幅,样式代码这里就省略掉,样式不是我们的重点内容 --> 
  7. </head> 
  8. <body> 
  9. <div id="content"
  10.     <form action="/save" method="post"
  11.         姓名:<input type="text" name="uname"><br/> 
  12.         年龄:<input type="text" name="age"><br/> 
  13.         密码:<input type="text" name="password"><br/> 
  14.         手机号码:<input type="text" name="tel"><br/> 
  15.         <button>新增</button> 
  16.     </form> 
  17. </div> 
  18. </body> 

 

 

 

 

 

创建UserService接口和UserServiceImpl实现类。

  1. public interface UserService { 
  2.     void add(User user); 
  3. @Service 
  4. public class UserServiceImpl implements UserService { 
  5.     @Resource 
  6.     private UserRepository userRepository; 
  7.     @Override 
  8.     public void add(User user) { 
  9.         userRepository.save(user); 
  10.     } 

创建UserController

  1. @Controller 
  2. public class UserController { 
  3.     @Resource 
  4.     private UserService userService; 
  5.  
  6.     @RequestMapping("/index"
  7.     public String add(Model model) { 
  8.         return "index"
  9.     } 
  10.  
  11.     @RequestMapping("/save"
  12.     public String save(Model model,User user) { 
  13.         userService.add(user); 
  14.         //跳转到用户列表 
  15.         return "redirect:/userList"
  16.     } 

这样一个新增功能我们就做完了。这里我们顺带着把用户列表也给搞出来。

用户列表

在templates目录下创建user_list.html页面

  1. <!DOCTYPE html> 
  2. <html lang="zh" xmlns:th="http://www.thymeleaf.org"
  3. <head> 
  4.   <!-- 为了减少篇幅,样式代码这里就省略掉,样式不是我们的重点内容 --> 
  5. </head> 
  6. <body> 
  7. <a href="/"
  8.     <div id="ret"
  9.         <button>新增用户</button> 
  10.     </div> 
  11. </a> 
  12.     <table id="content" style="border: 1px solid;"
  13.         <tr> 
  14.             <th>姓名</th> 
  15.             <th>年龄</th> 
  16.             <th>手机号码</th> 
  17.             <th>操作</th> 
  18.         </tr> 
  19.         <tr th:each="user:${users}"
  20.             <td th:text="${user.uname}"></td> 
  21.             <td th:text="${user.age}"></td> 
  22.             <td th:text="${user.tel}"></td> 
  23.             <td><a th:href="@{'/userInfo/'+${user.uid}}" target="_blank">用户详情</a> | 
  24.                 <a th:href="@{'/deleteById/'+${user.uid}}" target="_blank">删除用户信息</a> | 
  25.                 <a th:href="@{'/update/'+${user.uid}}" target="_blank">修改用户信息</a> 
  26.             </td> 
  27.         </tr> 
  28.     </table
  29. </body> 
  30. </html> 

在service和实现类中添加用户列表的方法,这里没有做分页。

  1. //UserService中添加 
  2. List<User> findAll(); 
  3. //UserServiceImpl中添加方法 
  4. @Override 
  5. public List<User> findAll() { 
  6.     return userRepository.findAll(); 

然后我们再在controller中添加一个方法用户列表的方法。

  1. @RequestMapping("/userList"
  2. public String index(Model model) { 
  3.     List<User> users = userService.findAll(); 
  4.     model.addAttribute("users", users); 
  5.     return "user_list"

好了,自此用户列表也搞定。下面我们来启动项目,然后演示一下:

演示

新增流程的演示,访问:

http://localhost:8080/

来到新增用户页面:

填入用户信息

点击新增,来到用户列表:

用户详情

在templates目录下创建user_info.html页面:

  1. <!DOCTYPE html> 
  2. <html lang="zh" xmlns:th="http://www.thymeleaf.org"
  3. <head> 
  4.     <meta charset="UTF-8"
  5.     <title>用户详情</title> 
  6. </head> 
  7. <body> 
  8. <div id="content"
  9. 姓名:<input type="text" th:value="${user.uname}"><br/> 
  10. 年龄:<input type="text" th:value="${user.age}"><br/> 
  11. 密码:<input type="text" th:value="${user.password}"><br/> 
  12. 手机号码:<input type="text" th:value="${user.tel}"><br/> 
  13. </div> 
  14. </body> 
  15. </html> 

 

 

 

 

在service和实现类分别添加相应的方法。

  1. //UserService中添加方法 
  2. User findById(Long id); 
  3. //UserServiceImpl添加方法 
  4. @Override 
  5. public User findById(Long id) { 
  6.     return userRepository.getOne(id); 

然后在controller中添加方法

  1. @RequestMapping("/userInfo/{id}"
  2. public String userInfo(Model model, @PathVariable("id") Long id) { 
  3.     User user = userService.findById(id); 
  4.     model.addAttribute("user"user); 
  5.     return "user_info"

然后再次启动项目,我们就直接可以从用户列表中进入到用户详情里。

点击:用户详情。

OK,到此,用户详情也就搞定了。剩下的我们继续搞修改功能。

用户信息修改

在templates目录下创建update.html页面。

  1. <!DOCTYPE html> 
  2. <html lang="zh" xmlns:th="http://www.thymeleaf.org"
  3. <head> 
  4.     <meta charset="UTF-8"
  5.     <title>Index</title> 
  6. </head> 
  7. <body> 
  8. <div id="content"
  9.     <form action="/updateById" method="post"
  10.         <input type="text" th:value="${user.uid}" name="uid"><br/> 
  11.         姓名:<input type="text" th:value="${user.uname}" name="uname"><br/> 
  12.         年龄:<input type="text" th:value="${user.age}" name="age"><br/> 
  13.         密码:<input type="text" th:value="${user.password}" name="password"><br/> 
  14.         手机号码:<input type="text" th:value="${user.tel}" name="tel"><br/> 
  15.         <button>修改</button> 
  16.     </form> 
  17. </div> 
  18. </body> 

 

 

 

 

 

UserRepository中添加更新方法:

  1. @Repository 
  2. public interface UserRepository extends JpaRepository<User, Long> { 
  3.  
  4.     @Modifying 
  5.     @Query("update User u set u.tel=?1 ,u.uname=?2 , u.password=?3 where  u.uid=?4"
  6.     void updateById(String tel, String uname, String password, Long uid); 

继续在UserService和实现类中添加想要的方法。

  1. //UserService中添加方法 
  2. void update(User user); 
  3. //UserServiceImpl中添加方法 
  4. @Transactional 
  5. @Override 
  6. public void update(User user) { 
  7.     userRepository.updateById(user.getTel(), user.getUname(), user.getPassword(), user.getUid()); 

注意:UserServiceImpl添加的 这个update方法,必须要事务注解@Transactional,否则更新失败。异常信息如下:

  1. javax.persistence.TransactionRequiredException: Executing an update/delete query 
  2.  at org.hibernate.internal.AbstractSharedSessionContract.checkTransactionNeededForUpdateOperation(AbstractSharedSessionContract.java:398) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final] 

加上事务注解@Transactional就搞定了。

然后在controller中添加方法

  1. @RequestMapping("/updateById"
  2. public String updateById(Model model,User user) { 
  3.     userService.update(user); 
  4.     return "redirect:/userList"
  5. //跳转到修改页面 
  6. @RequestMapping("/update/{id}"
  7. public String update(Model  model, @PathVariable("id") Long id) { 
  8.     User user = userService.findById(id); 
  9.     model.addAttribute("user"user); 
  10.     return "update"

再次启动项目,继续来到用户列表页面:

点击:修改用户信息,然后跳转到用户信息修改页面:

这里我们把手机尾号修改成666:

点击修改按钮。跳转到用户列表页面:

发现此时的用户手机号已经修改完了。

到这里,我们已经做了用户新增、单个用户信息查询、多个用户信息查询、单个用户信息修改。剩下的删除功能留给大家自己去做。相信大家也是很轻松的就能完成的。

总结

本文使用了技术栈:

Spring Boot +Jpa + Thyneleaf +MySQL+Maven+HTML

实战演练一个用户信息新增、查询、修改。

注意点:

1、配置信息是一点要小心,不能有误。

2、得自己安装MySQL数据库,然后创建数据库,创建用户表。

3、分层:html页面、controller、service接口、service实现类、repository接口。

好了,一个简单的用户信息模块就这样了,删除就靠你们自己去实现了。非常简单的~,如有疑惑、问题的可以随时联系我。

「展望」

后面我们基于这个不断扩大,比如:用户信息删除、用户登录、用户注册、权限、角色、集成Redis做缓存、使用Redis搞一个分布式锁、用户积分排行榜等待功能。

本文转载自微信公众号「Java后端技术全栈」,可以通过以下二维码关注。转载本文请联系Java后端技术全栈公众号。

 

责任编辑:武晓燕 来源: Java后端技术全栈
相关推荐

2019-04-02 10:36:17

数据库MySQL优化方法

2023-02-28 00:01:53

MySQL数据库工具

2019-08-01 07:31:51

数据库主机日志

2018-10-10 09:30:29

Spring Boot知识框架

2017-12-27 15:16:35

Spring BootFlyway数据库

2019-11-05 14:20:02

Oracle分组函数数据库

2019-10-22 07:50:45

SqlServer数据库触发器

2021-03-09 17:11:09

数据库脚手架开发

2023-04-28 15:15:39

数据库JPA

2019-06-18 10:31:23

数据库端口URL

2019-08-20 09:46:14

DBA收藏脚本语言

2019-09-11 11:38:30

MySQLInnoDB数据库

2019-09-10 07:58:01

字符集MySQL数据库

2019-08-20 22:06:32

Oracle数据库索引

2011-05-26 13:29:30

ORACLE数据库升级

2024-01-07 18:02:21

数据库分片副本

2024-01-10 08:17:50

HikariCP数据库Spring

2012-09-25 09:19:26

Spring数据库双数据库

2021-10-28 19:28:04

数据库开发Spring

2021-04-13 20:24:57

Spring Boot注解spring
点赞
收藏

51CTO技术栈公众号