.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前后端分离开发的更多相关文章

  1. springboot 前后端分离开发 从零到整(一、环境的搭建)

    第一次写文章,有什么错误地方请大家指正,也请大家见谅. 这次为大家分享我做毕业设计的一个过程,之前没有接触过springboot,一直做的都是Javaweb和前端,做了几个前后端分离的项目.现在听说s ...

  2. springboot 前后端分离开发 从零到整(三、登录以及登录状态的持续)

    今天来写一下怎么登录和维持登录状态. 相信登录验证大家都比较熟悉,在Javaweb中一般保持登录状态都会用session.但如果是前后端分离的话,session的作用就没有那么明显了.对于前后端分离的 ...

  3. springboot 前后端分离开发 从零到整(二、邮箱注册)

    spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver username: root password: 123456 url: ...

  4. springboot 前后端分离开发解决跨域访问

    最近新学习了Java EE开发框架springboot,我在使用springboot前后台分离开发的过程中遇到了跨域求问题.在网上寻找答案的过程中发现网上的解决方案大多比较零散,我在这里整理一个解决方 ...

  5. springboot 前后端分离开发 从零到整(四、更改密码操作)

    前端发送更改密码请求,头部携带token,服务端拦截器拦截头部token并解析,根据token中的信息来查询用户信息.需要登录才能进行的操作是由自己定的,有些操作可以直接放行.具体实现是: 上一章写到 ...

  6. SpringBoot,Vue前后端分离开发首秀

    需求:读取数据库的数据展现到前端页面 技术栈:后端有主要有SpringBoot,lombok,SpringData JPA,Swagger,跨域,前端有Vue和axios 不了解这些技术的可以去入门一 ...

  7. vue+springboot前后端分离实现单点登录跨域问题处理

    最近在做一个后台管理系统,前端是用时下火热的vue.js,后台是基于springboot的.因为后台系统没有登录功能,但是公司要求统一登录,登录认证统一使用.net项目组的认证系统.那就意味着做单点登 ...

  8. 基于SpringBoot前后端分离的点餐系统

    基于SpringBoot前后端分离的点餐系统 开发环境:主要采用Spring boot框架和小程序开发 项目简介:点餐系统,分成卖家端和买家端.买家端使用微信小程序开发,实现扫码点餐.浏览菜单.下单. ...

  9. vue+mockjs 模拟数据,实现前后端分离开发

    在项目中尝试了mockjs,mock数据,实现前后端分离开发. 关于mockjs,官网描述的是 1.前后端分离 2.不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据. 3.数据类型丰 ...

随机推荐

  1. 6. Go语言—字符串操作

    一.字符串支持的转义字符 \r 回车符(返回行首) \n 换行符(直接跳到下一行的同列位置) \t 制表符 \' 单引号 \" 双引号 \\ 反斜杠 \uXXXX Unicode字符码值转义 ...

  2. 训练自己数据-xml文件转voc格式

    首先我们有一堆xml文件 笔者是将mask-rcnn得到的json标注文件转为xml的 批量json转xml方法:https://www.cnblogs.com/bob-jianfeng/p/1112 ...

  3. ES6-Symbol.iterator 迭代器

    一个数据结构只要部署了Symbol.iterator属性就能使用 for...of遍历 与 ...运算符 操作 Object身上没有Symbol.iterator,当直接使用时会报错 let obj ...

  4. Windows编译运行webrtc全过程

    年纪大了,不想写什么开头.摘要,咱直接开始吧. 不过首先还是要感谢声网提供的webrtc国内源码镜像. 首先,编译webrtc你需要一台win10,而且必须得是一直在更新版本的.因为编译过程需要用到c ...

  5. 1+x证书Web前端开发CSS3详细教程

    web 前端开发之 CSS3 新特性 http://blog.zh66.club/index.php/archives/189/ web 前端开发之 html5 新特性 http://blog.zh6 ...

  6. not in和not exists区别

    如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引: 而not extsts 的子查询依然能用到表上的索引. 所以无论那个表大,用not exists都比not in要快. 也就是 ...

  7. 【mysql】修改mysql数据库密码

    修改mysql数据库密码 操作系统:Linux centos7 数据库:mysql5.7 一.在已知MYSQL数据库的ROOT用户密码的情况下,修改密码 1.在Linux命令行,使用mysqladmi ...

  8. H3C 12508 收集诊断信息

        案例:H3C 12508单板卡出现remove状态,需要配合研发收集诊断信息. (此文档只展示研发要求的诊断信息.) 总体:12500交换机返回三种文件----故障时诊断信息,主备单板的日志文 ...

  9. Python platform 模块

    Python platform 模块 platform 模块用于查看当前操作系统的信息,来采集系统版本位数计算机类型名称内核等一系列信息. 使用方法: import platform # 获取操作系统 ...

  10. A Pattern Language for Parallel Application Programming

    A Pattern Language for Parallel Application Programming Berna L. Massingill, Timothy G. Mattson, Bev ...