Springboot前后端分离开发
.1.springboot前后端分离开发之前要配置好很多东西,这周会详细补充博客内容和遇到的问题的解析
2,按照下面流程走一遍
此时会加载稍等一下
pom.xml显示中加上阿里云镜像可以加速下载配置文件等,或者直接复制我的所有代码
<!-- druid数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<?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.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.kude.stu</groupId>
<artifactId>kudestu</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>kudestu</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-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- druid数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
记得手动导入配置,如果自动导入以后一旦更改以后会遇到很多麻烦
resources加入配置文件的代码
#数据源配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/stu?useSSL=false&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.initialSize=20
spring.datasource.minIdle=50
spring.datasource.maxActive=500 #上下文配置
server.port=8888
server.servlet.context-path=/stu #配置jpa
#帮我们自动生成表结构
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql= true
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
一定要按照这个来定义类
下面是具体的代码
StudentController
package com.kude.stu.kudestu.stu.controller; import com.kude.stu.kudestu.stu.entity.Student;
import com.kude.stu.kudestu.stu.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*; import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List; @RestController
@RequestMapping("/s")
public class StudentController { @Autowired
private StudentService studentService; /**
* 添加学生
* @param student 要添加的学生对象
* @return
*/
@PostMapping("/add")
public Student save(Student student){
return studentService.save(student);
} /**
* 修改学生
* @param student
* @return
*/
@PostMapping("/update")
public Student update(Student student){
return studentService.save(student);
} /**
* 删除学生
* @param id 要删除的学生id
* @return
*/
@GetMapping("/del/{id}")
public String del(@PathVariable int id){
studentService.delete(id);
return "yes";
} @GetMapping("/findByName/{name}")
public List<Student> findByName(@PathVariable String name){
return studentService.findStuByName(name);
} @GetMapping("/query")
public Page<Student> findByPage(Integer page, HttpServletResponse response){ response.setHeader("Access-Control-Allow-Origin","*"); if(page==null || page<=0){
page = 0;
}else{
page -= 1;
} return studentService.findAll(page,5);
} }
UserController
package com.kude.stu.kudestu.stu.controller; import com.kude.stu.kudestu.stu.entity.User;
import com.kude.stu.kudestu.stu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse;
import java.util.List; /**
* 处理用户信息的控制层
* @author cxf
*/
@RestController
@RequestMapping("/user")
public class UserController { @Autowired
private UserService userService; /**
* 查询用户的方法
*/
@RequestMapping("/findAll")
public List<User> findAll(){
return userService.findAll();
} /**
* 根据ID查询用户
*/
@RequestMapping("/query")
public User findById(int id){
return userService.findUserById(id);
} /**
* 注册用户
*/
@RequestMapping(value = "/reg",method = RequestMethod.POST)
public User reg(User user){
return userService.save(user);
} /**
* 用户登陆
*/
//@RequestMapping(value = "/login",method = RequestMethod.POST)
//public User login(String username,String password){
//return userService.login(username,password);
// } /**
* 用户登陆
*/
@PostMapping("/login")
public User login(String username,String password){
return userService.login(username,password);
} //这个分页还是没用判断好,如果页数p超过3以后,回返回全部是空值
//应对超越页码数的进行限制一下
/**
* 分页查询
*/
@RequestMapping("/page")
public Page<User> findByPage(Integer p, HttpServletResponse response){
response.setHeader("Access-Control-Allow-Origin","*");
if(p==null || p<=0){
p = 0;
}else{
p-=1;
}
return userService.findByPage(p,2);
} /**
* 修改
*/
@RequestMapping("/updata")
public User update(User user){
return userService.update(user);
} /**
* 删除
*/
@RequestMapping("/del")
public String del(int id){
userService.delete(id);
return "yes";
}
}
StudentDao
package com.kude.stu.kudestu.stu.dao; import com.kude.stu.kudestu.stu.entity.Student;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import java.util.List; public interface StudentDao extends JpaRepository<Student,Integer> { Student findStudentById(Integer id); @Query(name = "findStuByName",nativeQuery = true,value =
"select * from student where name=:name")
List<Student> findStuByName(@Param("name") String name); }
UserDao
package com.kude.stu.kudestu.stu.dao; import com.kude.stu.kudestu.stu.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; public interface UserDao extends JpaRepository<User,Integer> { User findUserById(Integer id); //@Query("select id,username,password from user where username=?1 and password=?2")
// User login(@Param("username") String username, @Param("password") String password); //如何两个usernam或者password一样的User用户,回出现500错误
//这种方法不能用username或者password登入 @Query(name="login",nativeQuery = true,value =
"select * from user where username=:username and password=:password")
User login(@Param("username") String username, @Param("password") String password); }
Student
package com.kude.stu.kudestu.stu.dao; import com.kude.stu.kudestu.stu.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; public interface UserDao extends JpaRepository<User,Integer> { User findUserById(Integer id); //@Query("select id,username,password from user where username=?1 and password=?2")
// User login(@Param("username") String username, @Param("password") String password); //如何两个usernam或者password一样的User用户,回出现500错误
//这种方法不能用username或者password登入 @Query(name="login",nativeQuery = true,value =
"select * from user where username=:username and password=:password")
User login(@Param("username") String username, @Param("password") String password); }
User
package com.kude.stu.kudestu.stu.entity; import javax.persistence.*; @Entity
@Table(name = "user")
public class User { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String username;
private String password; @Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} 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;
} public User() {
}
}
StudentService
package com.kude.stu.kudestu.stu.service; import com.kude.stu.kudestu.stu.entity.Student;
import org.springframework.data.domain.Page; import java.util.List; public interface StudentService { Student save(Student student);
Student update(Student student);
void delete(Integer sid);
Student findStuById(Integer id);
List<Student> findStuByName(String name); /**
* 分页查询所有数据
* @param page 当前页
* @param pageSize 每页记录数
* @return
*/
Page<Student> findAll(int page,int pageSize); }
StudentServiceImpl
package com.kude.stu.kudestu.stu.service; import com.kude.stu.kudestu.stu.dao.StudentDao;
import com.kude.stu.kudestu.stu.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import java.util.List; @Service
public class StudentServiceImpl implements StudentService { @Autowired
private StudentDao studentDao; @Override
public Student save(Student student) {
return studentDao.save(student);
} @Override
public Student update(Student student) {
return studentDao.save(student);
} @Override
public void delete(Integer sid) {
studentDao.deleteById(sid);
} @Override
public Student findStuById(Integer sid) {
return studentDao.findStudentById(sid);
} @Override
public List<Student> findStuByName(String name) {
return studentDao.findStuByName(name);
} @Override
public Page<Student> findAll(int page,int pageSize) {
Pageable pageable = PageRequest.of(page,pageSize);
return studentDao.findAll(pageable);
}
}
UserService
package com.kude.stu.kudestu.stu.service; import com.kude.stu.kudestu.stu.entity.User;
import org.springframework.data.domain.Page; import java.util.List; public interface UserService { List<User> findAll();
User findUserById(Integer id);
User save(User user);
User update(User user);
void delete(int id);
User login(String username,String password);
Page<User> findByPage(int page, int limit); }
UserServiceImpl
package com.kude.stu.kudestu.stu.service; import com.kude.stu.kudestu.stu.dao.UserDao;
import com.kude.stu.kudestu.stu.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service; import java.util.List; @Service
public class UserServiceImpl implements UserService { @Autowired
private UserDao userDao; @Override
public List<User> findAll() {
return userDao.findAll();
} @Override
public User findUserById(Integer id) {
return userDao.findUserById(id);
} @Override
public User save(User user) {
return userDao.save(user);
} @Override
public User update(User user) {
return userDao.save(user);
} @Override
public void delete(int id) {
userDao.deleteById(id);
} @Override
public User login(String username, String password) {
return userDao.login(username,password);
} @Override
public Page<User> findByPage(int page, int pageSize) {
Pageable pageable = PageRequest.of(page,pageSize,new Sort(Sort.Direction.ASC,"id"));
return userDao.findAll(pageable);
}
}
KudestuApplication是自动生成的
package com.kude.stu.kudestu; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class KudestuApplication { public static void main(String[] args) {
SpringApplication.run(KudestuApplication.class, args);
} }
在写entity的User和Student的时候,要与要连接的数据库对应数据类型和名字相同
运行
其他内容一并等修改此博客时好好完成
总结:
1.要用到JDK和对应版本的IDEA,Maven,需要在系统中配置
2.用到Navicat premium数据库,Hbuilder前端开发,http://www.bejson.com/在线测试,Postman测试
Springboot前后端分离开发的更多相关文章
- springboot 前后端分离开发 从零到整(一、环境的搭建)
第一次写文章,有什么错误地方请大家指正,也请大家见谅. 这次为大家分享我做毕业设计的一个过程,之前没有接触过springboot,一直做的都是Javaweb和前端,做了几个前后端分离的项目.现在听说s ...
- springboot 前后端分离开发 从零到整(三、登录以及登录状态的持续)
今天来写一下怎么登录和维持登录状态. 相信登录验证大家都比较熟悉,在Javaweb中一般保持登录状态都会用session.但如果是前后端分离的话,session的作用就没有那么明显了.对于前后端分离的 ...
- springboot 前后端分离开发 从零到整(二、邮箱注册)
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver username: root password: 123456 url: ...
- springboot 前后端分离开发解决跨域访问
最近新学习了Java EE开发框架springboot,我在使用springboot前后台分离开发的过程中遇到了跨域求问题.在网上寻找答案的过程中发现网上的解决方案大多比较零散,我在这里整理一个解决方 ...
- springboot 前后端分离开发 从零到整(四、更改密码操作)
前端发送更改密码请求,头部携带token,服务端拦截器拦截头部token并解析,根据token中的信息来查询用户信息.需要登录才能进行的操作是由自己定的,有些操作可以直接放行.具体实现是: 上一章写到 ...
- SpringBoot,Vue前后端分离开发首秀
需求:读取数据库的数据展现到前端页面 技术栈:后端有主要有SpringBoot,lombok,SpringData JPA,Swagger,跨域,前端有Vue和axios 不了解这些技术的可以去入门一 ...
- vue+springboot前后端分离实现单点登录跨域问题处理
最近在做一个后台管理系统,前端是用时下火热的vue.js,后台是基于springboot的.因为后台系统没有登录功能,但是公司要求统一登录,登录认证统一使用.net项目组的认证系统.那就意味着做单点登 ...
- 基于SpringBoot前后端分离的点餐系统
基于SpringBoot前后端分离的点餐系统 开发环境:主要采用Spring boot框架和小程序开发 项目简介:点餐系统,分成卖家端和买家端.买家端使用微信小程序开发,实现扫码点餐.浏览菜单.下单. ...
- vue+mockjs 模拟数据,实现前后端分离开发
在项目中尝试了mockjs,mock数据,实现前后端分离开发. 关于mockjs,官网描述的是 1.前后端分离 2.不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据. 3.数据类型丰 ...
随机推荐
- 自定义vue的loading插件
在一般的vue项目中,都会用到Loading或者Alert之类的弹窗浮层,而他们是一种比较高频率出现的组件. 一般情况下,我们都会去直接import该组件,然后直接以标签的形式引用进去当前页面组件中, ...
- Apache(基于端口号)
1.配置服务器的IP地址 2. 创建网站数据目录 (1).分别创建端口为6111,6222的网站数据目录 (2).分别在网站数据目录中写入不同的内容 3.在配置文件中描述基于端口号的虚拟主机 (1) ...
- Dockerfil
Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使用Dockerfile去构建镜像好比使用pom去构建ma ...
- 机器学习之感知器和线性回归、逻辑回归以及SVM的相互对比
线性回归是回归模型 感知器.逻辑回归以及SVM是分类模型 线性回归:f(x)=wx+b 感知器:f(x)=sign(wx+b)其中sign是个符号函数,若wx+b>=0取+1,若wx+b< ...
- TestNg之XMl形式实现多线程测试
为什么要使用多线程测试? 在实际测试中,为了节省测试时间,提高测试效率,在实际测试场景中经常会采用多线程的方式去执行,比如爬虫爬数据,多浏览器并行测试. 关于多线程并行测试 TestNG中实现多线程并 ...
- Java单元测试简述
最开始项目中是没有单元测试的,基本都是自己通过各种方式来实现测试的.比如修改代码,测完再改回来:再比如直接模拟用户操作,直接当黑盒测试,然后自己去看相应的逻辑有没有,状态有没有改变. 这些方式有几个缺 ...
- 一些 Java 和 Android 的参考资料
1. .net程序员转战android第三篇---登录模块之静态登录 2. .net程序员转战android第二篇---牛刀小试 3. .net程序员转战android第一篇---环境部署 4. 一些 ...
- Kubernetes 有状态与无状态介绍
Kubernetes 有状态与无状态介绍 无状态:deployment - 认为所有pod都是一样的,不具备与其他实例有不同的关系. - 没有顺序的要求. - 不用考虑再哪个Node运行. - 随意扩 ...
- springboot2使用外部的tomcat服务器创建项目步骤
使用内置的Servlet容器.应用打成可执行的jar.外置的Servlet容器:外面安装Tomcat---应用war包的方式打包: a).必须创建一个war项目:(利用idea创建好目录结构) b). ...
- Kafka学习笔记之Kafka性能测试方法及Benchmark报告
0x00 概述 本文主要介绍了如何利用Kafka自带的性能测试脚本及Kafka Manager测试Kafka的性能,以及如何使用Kafka Manager监控Kafka的工作状态,最后给出了Kafka ...