Java Spring Boot 框架学习笔记
项目搭建
搭建教程参考:www.jianshu.com/p/d6b7a2806…
IDE推荐:Intellij IDEA
项目使用
一、新建HelloController控制类,主要用于处理发送的一系列请求
二、导入Http相关类,用于处理前端发送的请求
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
三、控制类的实现:
//@RestController为@ResponseBody和@Controller的结合
@RestController
public class HelloController
{
//value为url后缀 method为http请求方法,默认为get
@RequestMapping(value="/hello",method = RequestMethod.GET)
public String hello()
{
return "Hello,World!" ;
}
@RequestMapping("goodbye")
public String goodbye(){
return "Say goodbye";
}
}
四、实现访问静态Html页面
-
1.在
pom.xml中添加thymeleaf模板引擎字段<!-- 添加thymeleaf 模板引擎 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> -
2.在
application.properties中设置寻找目录spring.thymeleaf.prefix=classpath:/templates/ -
HelloController当中修改头RestController为Controller
package com.mainpackage.webchat; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestMapping; // 项目搭建参考:https://www.jianshu.com/p/d6b7a2806655 //@RestController为@ResponseBody和@Controller的结合 //@Controller 实现静态页面访问 @Controller public class HelloController { //value为url后缀 method为http请求方法,默认为get @RequestMapping(value="/hello",method = RequestMethod.GET) public String hello() { return "indexs" ; } } -
前端加载 css文件方法
在对应的html文件中加入以下内容即可:
<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">作用是引入thymeleaf框架
<link rel="stylesheet" type="text/css" media="all" th:href="@{/base.css}" />其中
base.css是相对于static而言
五、实现get请求
1.实现返回参数给前端
通过设置@RequestParam 参数 来实现get请求,其中一个注意点是参数名要和请求名是一致的。
示例代码:
package com.mainpackage.webchat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import java.net.http.HttpRequest;
import org.springframework.web.bind.annotation.RequestParam;
// 项目搭建参考:https://www.jianshu.com/p/d6b7a2806655
//@RestController为@ResponseBody和@Controller的结合
@RestController
public class HelloController
{
//value为url后缀 method为http请求方法,默认为get
@RequestMapping(value="/login",method = RequestMethod.GET)
//name 为get请求的请求名,需要与参数名相一致。
public String login(@RequestParam String name)
{
return name;
}
}
在本地运行:只需要在地址栏输入http://localhost:8080/login?name=smm 其中smm为自定义参数,可以随便输入字符串,浏览器将会在界面上只显示该字符,说明简单的get请求实现成功!
2.绑定Url返回参数到前端
举个例子而言,如果用户希望,地址栏输入http://localhost:8080/ddd,前端页面结果会带有ddd,这种需求要实现。
这种是最简单的url绑定,参考代码如下:
//使用这种可以直接避免参数不同
//其中value的account参数要与底下的PathVariable相同,实现url绑定的一种方式。
@RequestMapping(value = "/{account}",method = RequestMethod.GET)
public String account(@PathVariable("account") String accountInfo )
{
return accountInfo;
}
3.实现返回参数到前端html显示
传参后端:
package com.mainpackage.webchat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
import java.net.http.HttpRequest;
//用户类
@Controller
public class UserController {
//登录模块测试
@RequestMapping(value="/userlogin",method = RequestMethod.GET)
//map 可以被传到前端去
public String login(Map <String, Object> map)
{
map.put("message2","mm");
//name = "测试";
return "passparam";
}
}
tip: Map<String,Object>有点类似于Json格式传到前端中,前端只要通过[[${param}]]获取即可
前端代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>传递参数实例</title>
<script type="javascript">
</script>
</head>
<body>
<!--使用前后不分离技术传参测试-->
<h1>测试参数</h1>
<p id="message2"> 传参:[[${message2}]] </p>
</body>
</html>
前端获取[[${message2}]]:前端message2为后端传递的参数
六、实现post请求
七、后台搭建MySQL数据库
1.在pom.xml文件中添加如下文件:
<!--添加mysql数据库依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--end-->
作用是添加数据库依赖
2.在application.properties当中添加数据库配置
#数据库配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接
spring.datasource.url = jdbc:mysql://localhost:3306/login_db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
#用户名
spring.datasource.username=root
#密码
spring.datasource.password=123456 #此处为mysql数据库的密码
需要注意的一点是 在spring.datasource.url当中,需要login_db为数据库名,大家后面改的话只有改login_db为自己的数据库名即可。
3.在Controller当中添加测试代码,测试是否连接成功。
//数据库相关包
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
//测试mysql数据库连接情况 参考教程:https://www.jianshu.com/p/c440b57f4531
@Autowired
DataSource dataSource;
@RequestMapping("/mysqltest")
public Object mysqltest() throws Exception {
Connection connect = dataSource.getConnection();
PreparedStatement pre = connect.prepareStatement("select * from login_tb");
ResultSet result = pre.executeQuery();
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
while (result.next()) {
Map<String,Object> map = new HashMap<String, Object>();
map.put("id", result.getObject("id"));
map.put("name", result.getObject("name"));
list.add(map);
}
if(result!= null ) result.close();
if(pre!= null ) pre.close();
if(connect!= null ) connect.close();
return list;
}
其中注意的一点是login_tb指的是表,这个是自己提前建的表。
然后启动项目,在地址栏输入http://localhost:8080/mysqltest 有返回值Json数据则说明搭建成功。
八、实例1:Spring Boot 实现用户登录、注册请求功能
功能实现参考过该文章https://zhuanlan.zhihu.com/p/55796334
1.目的:
通过实例学习Spring Boot 登录、注册功能,既可以学习如何使用数据库,而且对post请求,可以有一定的用法了解。
2.实战准备:
-
MySQL数据库配置完成,配置教程参照七;
-
配置依赖,主要就是四个依赖,
Thymeleaf,JPA,MySQL,Web实现:
在
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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.0.M5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.mainpackage</groupId> <artifactId>webchat</artifactId> <version>0.0.1-SNAPSHOT</version> <name>webchat</name> <description>build a site for online webchat</description> <properties> <java.version>12</java.version> </properties> <dependencies> <!--web依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 添加thymeleaf 模板引擎 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!--添加mysql数据库依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--end--> <!--添加JPA依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </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> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </pluginRepository> </pluginRepositories> </project> -
application.properties添加MySQL、thymeleaf、JPA配置信息# 设置寻找目录 spring.thymeleaf.prefix=classpath:/templates/ #MySQL数据库配置 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #数据库连接 spring.datasource.url = jdbc:mysql://localhost:3306/login_db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC #用户名 spring.datasource.username=root #密码 spring.datasource.password=123455555 #jpa选择模式:create表示开发模式,每次启动都会创建新的表格 #none表示结束模式 spring.jpa.hibernate.dll-auto = none -
创建实体User类
作用:就是映射到数据库,有点类似于Django框架中的Model的作用,讲道理,Spring Boot框架相较于Django框架,相当不智能。
实现:
package com.mainpackage.webchat.model; //作用:创建用户类,包括了用户名,密码等等信息 import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private String name; private String email; private String password; //重写toString方法 @Override public String toString() { return "{" + " id='" + getId() + "'" + ", name='" + getName() + "'" + ", email='" + getEmail() + "'" + ", password='" + getPassword() + "'" + "}"; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getEmail() { return this.email; } public void setEmail(String email) { this.email = email; } } -
实现增删改查的接口:
创建
UserRepository.java文件,继承于CrudRepository方法,实现接口package com.mainpackage.webchat.model; import java.util.List; import org.springframework.data.repository.CrudRepository; //接口 提供外部调用,方法自动生成 public interface UserRepository extends CrudRepository<User,Integer> { List<User> findByEmail(String email); void deleteByEmail(String email); }