SpringBoot框架代码的编写---以@RequestParam和@RequestBody为例
- 1、配置pom.xml
- 2、配置SpringBoot的全局配置文件application.properties
- 2、创建一个名为application.yml文件。
- 3、创建五个重要的文件夹
- 3.1、在com.example.demo中创建entity层:
- 3.2、在com.example.demo中创建controller层:
- 3.3、在com.example.demo中创建service层:
- 3.4、在com.example.demo中创建dao层:
- 3.5、在resources文件夹中创建mapper层:
- 3.6、最后项目的结构如图所示:
- 4、打开MYSQL并创建一个数据库和表
- 5、五大文件夹的作用以及代码样例
- 5.1、entity
- 5.2、controller
- 5.3、Service.IMPL
- 5.4、Service
- 5.5、Dao
- 5.6、mapper
- 5.7、启动类DemoApplication
- 5.8、项目的所需修改文件如下图所示:
- 5.9、请求在各层的处理过程
- 6、效果展示
- 6.1、@RequestParam
- 6.2、@requestBody
1、配置pom.xml
找到pom.xml文件,在依赖中添加分页助手和需要的json格式包。这里已经写好了,复制到pom.xml文件的dependencies中即可。
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
2、配置SpringBoot的全局配置文件application.properties
在resources文件夹下,找到application.properties全局配置文件,然后。根据自己的项目的实际情况,配置属于自己的应用名称、占用的端口号、数据库驱动、数据源名称、数据库连接地址、数据库的用户名和密码等。
# 应用名称
spring.application.name=demo
# 应用服务 WEB 访问端口
server.port=8888
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源名称
spring.datasource.name=defaultDataSource
# 数据库连接地址
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo?serverTimezone=UTC
# 数据库用户名&密码:
spring.datasource.username=root
spring.datasource.password=88888888
2、创建一个名为application.yml文件。
在resources文件夹中新建一个名为application.yml的文件,在这里配置一些必要的配置信息。
并把以下代码复制进去,然后修改部分配置为自己真实情况的配置:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jbbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai&useSSL=true
username: root
password: 88888888
servlet:
multipart:
max-file-size: 10MB
max-request-size: 100MB
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.demo.entity
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
logging:
file:
path: D:/demo/
server:
port: 8888
3、创建五个重要的文件夹
3.1、在com.example.demo中创建entity层:
3.2、在com.example.demo中创建controller层:
3.3、在com.example.demo中创建service层:
3.4、在com.example.demo中创建dao层:
3.5、在resources文件夹中创建mapper层:
3.6、最后项目的结构如图所示:
4、打开MYSQL并创建一个数据库和表
打开MYSQL,创建项目的中的demo数据库并创建一张login表。如果是自己有测试数据库和表,则无需按照我的demo流程走。
create database demo;
use demo;
create table login(
username varchar(10) ,
password varchar(100)
);
5、五大文件夹的作用以及代码样例
5.1、entity
entity:实体层。这里写的是实体类的定义,数据表中的每个字段名都作为实体类中的一个成员变量,然后这里再实现每个成员变量的get和set的方法。
以demo数据库中的login表为例子,可知username和password的类型是varchar,那么就可以跟着这个类型编写它的代码样例了。在entity层创建一个Login.java文件:
定义用户名和密码的类型,并创建setter和getter:
Login.java
package com.example.demo.entity;
public class Login {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
5.2、controller
控制层。控制层中定义了提供给前端的接口的路径,前端使用本接口的方法(GET还是POST),以及需要传输的参数。前端发送来的请求首先传到 “控制器” 中,这里接受前端传来的请求,并将这个请求传到service层(调用了service层的接口)。
在controller文件夹下创建一个LoginController.java文件,并写入样例代码:
package com.example.demo.controller;
import com.example.demo.entity.Login;
import com.example.demo.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(value = "/Login")
public class LoginController {
@Autowired
private LoginService LoginService;
@RequestMapping(value="/login1",method = RequestMethod.POST)
private Login login1(@RequestParam String username, @RequestParam String password){
return LoginService.login1(username,password);
}
@RequestMapping(value = "/login2",method = RequestMethod.POST)
private Login login2(@RequestBody Login l2) {
return LoginService.login2(l2.getUsername(),l2.getPassword());
}
}
5.3、Service.IMPL
IMPL,implement的缩写。该层定义了相关service的接口,只是接口,实现接口的代码放在其上层文件夹Service中。接受从控制层controller中传递过来的请求,然后将请求传递给DAO层。
在Service文件夹下创建IMPL文件夹,并在IMPL文件夹下创建一个ILoginService.java文件,并写入样例代码:
package com.example.demo.service.impl;
import com.example.demo.entity.Login;
public interface ILoginService {
Login login1(String username, String password);
Login login2(String username, String password);
}
5.4、Service
服务层service接口的实现。在这里调用了DAO接口,将需要操作数据库的请求传递给DAO层。
在Service文件夹下创建一个LoginService.java文件,并写入样例代码:
package com.example.demo.service;
import com.example.demo.dao.LoginDao;
import com.example.demo.entity.Login;
import com.example.demo.service.impl.ILoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class LoginService implements ILoginService {
@Autowired
private final LoginDao LoginDao;
public LoginService(LoginDao LoginDao) {
this.LoginDao = LoginDao;
}
@Override
public Login login1(String username, String password) {
return LoginDao.login1(username,password);
}
@Override
public Login login2(String username, String password) {
return LoginDao.login2(username,password);
}
}
5.5、Dao
数据库对后端服务的接口层。接受来自服务层service的请求,将请求传递给mapper。如果是@RequestParam方式的话,则@Param(“username”)中的username以及@Param(“password”)中的password对应的是mapper层中#{}中的参数。@RequestBody亦是如此。
在Dao文件夹下创建一个LoginDao.java文件,并写入样例代码:
package com.example.demo.dao;
import com.example.demo.entity.Login;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import org.springframework.beans.factory.annotation.Autowired;
@Repository
@Mapper
public interface LoginDao {
@Autowired(required = false)
Login login1(@Param("username") String username, @Param("password") String password);
Login login2(@Param("username") String username, @Param("password") String password);
}
5.6、mapper
数据库操作层,这里写SQL语句,实现dao接口,接受dao接口传入的参数并执行SQL语句操作数据库。
在mapper文件夹下创建一个LoginMapper.xml文件,并写入样例代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.demo.dao.LoginDao">
<resultMap id="BaseResultMap" type="com.example.demo.entity.Login">
</resultMap>
<select id="login1" resultMap="BaseResultMap" parameterType="com.example.demo.entity.Login">
SELECT * from login where username=#{username} and password=#{password}
</select>
<select id="login2" resultMap="BaseResultMap" parameterType="com.example.demo.entity.Login">
SELECT * from login where username=#{username} and password=#{password}
</select>
</mapper>
5.7、启动类DemoApplication
配置启动类DemoApplication,把dao层标注进去。样例代码如下:
package com.example.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.demo.dao")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
5.8、项目的所需修改文件如下图所示:
5.9、请求在各层的处理过程
6、效果展示
点击运行,如果代码按照流程走,会成功启动出现以下画面:
6.1、@RequestParam
如下图所示,如果前端调用的路径是http://127.0.0.1:8888/Login/login1,使用的是POST方法,参数有两个,分别是username和password。因为是@RequestParam,所以参数是通过url传输的,例如http://127.0.0.1:8088/Login/login1?username=zhangsan&password=88888888。
运行成功后,打开postman。选择post方式,在链接中写入http://127.0.0.1:8088/Login/login1,然后选择Params,填写key-value,然后点击send。
回看5.6,我们可以知道,以@RequestParam方式的接口login1,其语法是查询demo数据库的login表中用户名和密码是某某的所有信息。因为我填写的是login表存在的正确的用户名和密码,所以能在postman看到正确的返回结果。
在IDEA的后台日志也可以看到查询结果:
6.2、@requestBody
@requestBody的参数是通过请求体传输的,他是在http包的body层传输,格式是JSON格式。以@requestBoby这种接口方式的好处就是是在url中看不到参数的值,因而更安全。
如下图所示,如果前端调用的路径是http://127.0.0.1:8888/Login/login2,使用的是POST方法,参数有两个,分别是username和password,以json的方式传值。
运行成功后,打开postman。选择post方式,在链接中写入http://127.0.0.1:8088/Login/login2,然后选择Body下的raw(以json的方式),填写key-value的json格式,然后点击send。
回看5.6,我们可以知道,以@RequestBody方式的接口login2,其语法是查询demo数据库的login表中用户名和密码是某某的所有信息。因为我填写的是login表存在的正确的用户名和密码,所以能在postman看到正确的返回结果。
在IDEA的后台日志也可以看到查询结果:
好了,今天的分享就到此为止。
分享不易,建议一键三连再走。