前言:对于前端工程师在做应用时需要后台提供数据库中的数据到前台显示或是一些逻辑操作,此时自己不可能还专门找一个开发后台的来给自己写接口吧,这样也会占用人家的时间很麻烦,况且也是大材小用了,所以一些只涉及到只需要提供数据给前台调用这样的简单操作就自己搞定吧,还好自己之前有些开发后台的经验,上手这样的简单操作应该问题不大哈,好了闲篇不扯了,这里我们用到比较流行的Spring Boot框架来开发后台接口,说实话我也是第一次用这个,有什么不对的还请各位大神多指教哈!!!
*运行环境:jdk 1.8 、mysql、maven项目构建
开发工具:IntelliJ IDEA 2017.3.5 x64、Navicat Premium、Tomcat 8.服务器
1.1首先创建一个Spring Initializr项目
点击next下一步:
1.pom.xml文件中的groupId标签的值
2.pom.xml文件中的artifactId标签的值
3.表明这个项目是已maven仓库构建(jar 或 war)包
4.项目使用的编程语言是java(还有kotlin 和Groovy)
5.声明该项目构建出来的包是jar包或是war包(发布到服务器一般是用war包)
6.使用的java jdk版本
7.该项目的版本号
8.该项目的版本名
9.该项目的项目描述
10.该项目的包名
点击下一步
这里使用的Spring boot的版本是2.0.5,spring boot版本和tomcat的版本有相应的配对关系的,这也是我在实际项目的时候发现的,该项目是与tomcat 8.配对运行(主要是将该项目打包war发布到外部tomcat服务器中)。
点击下一步next:
这里自己取项目的项目名称,自己觉得合适就行。
点击finish,就会自动构建出该项目了。
项目构建完成,这就是一个初始化的Spring boot项目了
运行该项目不报错就对了。
下面我们就开始后台接口的开发吧!!!
1.首先我们先看看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.spring.inter</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
下面我们需要配置spring boot项目中使用到mysql数据库和jpa方式处理数据
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
将以上的代码配置到pom.xml文件dependencies标签中
2.下面我们来配置application.properties文件
server.port=8083
spring.jpa.show-sql = true
logging.level.org.springframework.data=DEBUG
spring.jpa.hibernate.ddl-auto=
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=jason
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
server.root是指定该项目运行的端口是8083,若是8083被其他程序占用了你也可以使用其他的端口,自己定义
以上就表明配置了mysql数据库是test数据库用户名和相对应的密码(这些都是你安装mysql后可以在doc命令中设置的哈)
3.下面就是将数据准备好,先配置mysql数据库,这里我有相应的sql文件给到你们,本地已经配好了,打开 Navicat Promium将本地的数据库导入连接起来
连接测试一下如果是成功的就进去了,失败了你就要查查你的在配置mysql时的用户名和密码是否正确了!!!
我这里使用user表中的数据来开发后台接口返回其中的数据。
4.新建bean包下的User.class实体类(字段和表中的字段一样)
类的名称可以不一样的,声明@Table表明必须是user表
package com.spring.inter.demo.bean;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "user")
public class User {
@Id
private long id;
@Column(name = "name")
private String name;
public User() {
}
public User(long id, String name) {
this.id = id;
this.name = name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
5.新建repository包下JpaUserRepository接口继承JpaRepository<T,ID>
JpaRepository中包含对T类型的增删改查操作
package com.spring.inter.demo.repository;
import com.spring.inter.demo.bean.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface JpaUserRepository extends JpaRepository<User,Long> {
}
6.新建service包下IUserService接口中定义对改User实体进行的操作方法
package com.spring.inter.demo.service;
import com.spring.inter.demo.bean.User;
import java.util.List;
public interface IUserService {
//获取所有的用户
List<User> getAllUser();
//增
int addUser(User user);
//删
int deleteUser(long id);
//改
int updateUser(User User);
//查
User queryUser(long id);
}
7.在service中新建UserService实现IUserService 中定义的方法(定义返回的数据格式和程序中的错误码代表的意思)
7.1错误码:
package com.spring.comtroller.demo.result;
public interface ErrorCode {
/**
* 10000 网络繁忙
* 10001 无此用户
* 10002 添加成功
* 10003 删除成功
* 10004 更新成功
* 10005 此用户已存在
* 10006 添加失败
* 10007 删除失败
* 10008 更新失败
* -1 请求失败
* 0 请求成功
*/
int NETERROR = 10000;
int NOTEXISTUSER = 10001;
int ADDSUCCESS = 10002;
int DELETESUCCESS = 10003;
int UPDATESUCCESS = 10004;
int EXISTUSER = 10005;
int ADDFAIL = 10006;
int DELETEFAIL = 10007;
int UPDATEFAIL = 10008;
int REQUESTFAIL = -1;
int REQUESTSUCCESS = 0;
}
7.2返回的数据格式ResultModel
package com.spring.comtroller.demo.result;
import java.io.Serializable;
public class ResultModel implements Serializable{
private int code;
private String msg;
private Object data ;
public ResultModel() {
}
public ResultModel(int errorCode, String msg, Object data) {
this.code = errorCode;
this.msg = msg;
this.data = data;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
7.3返回的数据处理工具类ResultModelTool.class
package com.spring.comtroller.demo.result;
import java.util.HashMap;
import java.util.Map;
public class ResultModelTool {
public static ResultModel handleResultModel(ResultModel resultModel) {
ResultModel handledModel = new ResultModel();
Map map = new HashMap();
if (resultModel != null) {
int error = resultModel.getCode();
handledModel.setCode(error);
switch (error) {
case 10000:
handledModel.setMsg("网络繁忙,请稍后重试");
handledModel.setData(map);
break;
case 10001:
handledModel.setMsg("无此用户");
handledModel.setData(map);
break;
case 10002:
handledModel.setMsg("添加成功");
handledModel.setData(resultModel.getData());
break;
case 10003:
handledModel.setMsg("删除成功");
handledModel.setData(resultModel.getData());
break;
case 10004:
handledModel.setMsg("更新成功");
handledModel.setData(resultModel.getData());
break;
case -1:
handledModel.setMsg("请求失败");
handledModel.setData(map);
break;
case 10005:
handledModel.setMsg("此用户已存在");
handledModel.setData(map);
break;
case 10006:
handledModel.setMsg("添加失败");
handledModel.setData(map);
break;
case 10007:
handledModel.setMsg("删除失败");
handledModel.setData(map);
break;
case 10008:
handledModel.setMsg("更新失败");
handledModel.setData(map);
break;
default:
handledModel.setMsg("请求成功");
handledModel.setData(resultModel.getData());
break;
}
}
return handledModel;
}
}
7.4实现User的增删改查:
package com.spring.inter.demo.service;
import com.spring.inter.demo.bean.User;
import com.spring.inter.demo.repository.JpaUserRepository;
import com.spring.inter.demo.result.ErrorCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService implements IUserService {
@Autowired
JpaUserRepository jpaUserRepository;
@Override
public List<User> getAllUser() {
List<User> users = jpaUserRepository.findAll();
System.out.println(users.toString());
return users;
}
@Override
public int addUser(User user) {
if (jpaUserRepository.existsById(user.getId())){
System.out.println("user is existed");
return ErrorCode.EXISTUSER;
}
User saveUser = jpaUserRepository.save(user);
if (saveUser != null && saveUser.getId() == user.getId()) {
System.out.println("save success");
return ErrorCode.ADDSUCCESS;
} else {
System.out.println("save failure");
return ErrorCode.ADDFAIL;
}
}
@Override
public int deleteUser(long id) {
if (jpaUserRepository.existsById(id)) {
jpaUserRepository.deleteById(id);
System.out.println("删除成功");
return ErrorCode.DELETESUCCESS;
}
System.out.println("删除失败");
return ErrorCode.NOTEXISTUSER;
}
@Override
public int updateUser(User user) {
if (jpaUserRepository.existsById(user.getId())){
jpaUserRepository.save(user);
System.out.println("更新成功");
return ErrorCode.UPDATESUCCESS;
}
System.out.println("更新失败");
return ErrorCode.UPDATEFAIL;
}
@Override
public User queryUser(long id) {
User user = null;
if (jpaUserRepository.existsById(id)){
user = jpaUserRepository.findById(id).get();
System.out.println(user.toString());
}
return user;
}
}
8.新建controller包下UserController类
package com.spring.inter.demo.controller;
import com.spring.inter.demo.bean.User;
import com.spring.inter.demo.result.ResultModel;
import com.spring.inter.demo.result.ResultModelTool;
import com.spring.inter.demo.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping(value = "/users")
public class UserController {
@Autowired
IUserService userService;
@RequestMapping(value = "/all",method = RequestMethod.GET)
public ResultModel getAllUser(){
List<User> userList = userService.getAllUser();
Map<String,List<User>> UserMap = new HashMap<>();
if (userList!=null){
UserMap.put("users",userList);
}
ResultModel resultModel = new ResultModel();
resultModel.setCode(0);
resultModel.setData(UserMap);
return ResultModelTool.handleResultModel(resultModel);
}
@PostMapping(value = "/addUser")
public ResultModel addUser(@RequestParam long id, @RequestParam String name){
User User = new User(id,name);
int errorCode = userService.addUser(User);
ResultModel resultModel = new ResultModel();
resultModel.setCode(errorCode);
resultModel.setData(User);
return ResultModelTool.handleResultModel(resultModel);
}
@PostMapping(value = "/updateUser")
public ResultModel updateUser(@RequestParam long id,@RequestParam String name){
User User = new User(id,name);
int errorCode = userService.updateUser(User);
ResultModel resultModel = new ResultModel();
resultModel.setCode(errorCode);
resultModel.setData(User);
return ResultModelTool.handleResultModel(resultModel);
}
@GetMapping(value = "/deleteUser/{id}")
public ResultModel deleteUser(@PathVariable long id){
int errorCode = userService.deleteUser(id);
ResultModel resultModel = new ResultModel();
resultModel.setCode(errorCode);
List<User> userList = userService.getAllUser();
Map<String,List<User>> UserMap = new HashMap<>();
if (userList!=null){
UserMap.put("users",userList);
}
resultModel.setData(UserMap);
return ResultModelTool.handleResultModel(resultModel);
}
}
运行该Spring boot项目就可以输入地址进行访问返回数据了
这样就大功告成了哈!!!
项目我已发布到github上,欢迎大家下载参考哈
https://github.com/jp5201314/Spring-boot-.git