• vue前后端分离


    目录

    前言

    一、后端

    1、实体类

    2、实现统一结果的封装类

     3、mapper

    4、service

    5、 启动类

    6、配置文件

    7、config 配置类

    8、controller控制层

    二、数据库的sql

    三、vue的前端



    前言

    实现用户的CRUD,实现后端全部是异步请求;前端是vue,之前在后端写得同步请求页面跳转,现在利用vue的路由进行实现.

    后端我们使用的mybatis-plus和springboot进行

    一、后端

    依赖

    1. org.projectlombok
    2. lombok
    3. org.springframework.boot
    4. spring-boot-starter
    5. org.springframework.boot
    6. spring-boot-starter-web
    7. org.springframework.boot
    8. spring-boot-starter-test
    9. test
    10. com.baomidou
    11. mybatis-plus-boot-starter
    12. 3.5.1
    13. mysql
    14. mysql-connector-java
    15. p6spy
    16. p6spy
    17. 3.9.1

    1、实体类

    1. package com.sofwin.pojo;
    2. import com.baomidou.mybatisplus.annotation.*;
    3. import lombok.Data;
    4. import org.springframework.format.annotation.DateTimeFormat;
    5. import java.util.Date;
    6. /**
    7. * @author : wentao
    8. * @version : 1.0
    9. */
    10. //查看方法的快捷键 alt +7
    11. @Data
    12. //表名注解,标识实体类中对应的表 使用位置实体类
    13. //value 表名
    14. @TableName(value = "user")
    15. public class User {
    16. //标识id为表的主键
    17. //value为id的名称 type为主键自增情况
    18. //auto为数据库自增
    19. //ASSIGN_UUID 通过uuid进行主键的自增
    20. @TableId(value = "id",type = IdType.AUTO)
    21. private Long id;
    22. @TableField("name") //非主键的字段描述
    23. private String name;
    24. private Integer age;
    25. private String email;
    26. private String realName;
    27. //insert的时候触发的时候自动填充
    28. @TableField(fill = FieldFill.INSERT)
    29. //@DateTimeFormat的作用是入参格式化,前端传string类型的时间字符串,此注解将字符串转换为Date类型。
    30. @DateTimeFormat(pattern ="yyyy-MM-dd")
    31. private Date createTime;
    32. //update触发的时候自动填充
    33. @TableField(fill = FieldFill.UPDATE)
    34. @DateTimeFormat(pattern = "yyyy-MM-dd")
    35. private Date updateTime;
    36. //乐观锁的 要设置默认为1
    37. @Version
    38. private Integer version;
    39. @TableLogic
    40. private Integer status;
    41. }

    2、实现统一结果的封装类

    1. package com.sofwin.pojo;
    2. import lombok.Data;
    3. /**
    4. * @author : wentao
    5. * @version : 1.0
    6. */
    7. @Data
    8. public class ResponseEntity {
    9. private Integer code;
    10. private String msg;
    11. private Object ret;
    12. public static ResponseEntity success(Object ret){
    13. ResponseEntity responseEntity=new ResponseEntity();
    14. responseEntity.ret =ret;
    15. responseEntity.msg ="操作成功";
    16. responseEntity.code =200;
    17. return responseEntity;
    18. }
    19. }

     3、mapper

    继承mybatisplus的接口 baseMapper

    1. public interface UserMapper extends BaseMapper {
    2. }

    4、service

    继承 IService  泛型是实体类的类型   ----mybatis提供的

    1. package com.sofwin.service;
    2. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    3. import com.baomidou.mybatisplus.extension.service.IService;
    4. import com.sofwin.pojo.User;
    5. /**
    6. * @author : wentao
    7. * @version : 1.0
    8. */
    9. public interface UserService extends IService {
    10. Page queryByPage(User user, Integer pageNumber, Integer pageSize);
    11. }

    这里需要注意的是 实现类一定要实现接口 

    1. package com.sofwin.service.impl;
    2. import com.baomidou.mybatisplus.core.conditions.Wrapper;
    3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
    4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    6. import com.sofwin.mapper.UserMapper;
    7. import com.sofwin.pojo.User;
    8. import com.sofwin.service.UserService;
    9. import org.springframework.beans.factory.annotation.Autowired;
    10. import org.springframework.stereotype.Service;
    11. import org.springframework.util.StringUtils;
    12. /**
    13. * @author : wentao
    14. * @version : 1.0
    15. */
    16. @Service
    17. //第一个泛型是mapper的 第一个是实体类的
    18. public class UserServiceImpl extends ServiceImpl implements UserService{
    19. @Autowired
    20. private UserMapper mapper;
    21. @Override
    22. public Page queryByPage(User user, Integer pageNumber, Integer pageSize) {
    23. Page page=new Page<>(pageNumber,pageSize);
    24. LambdaQueryWrapper wrapper=new LambdaQueryWrapper<>();
    25. //如果字符串里面的值为null, "", " ",那么返回值为false;否则为true
    26. if (StringUtils.hasText(user.getName())){
    27. wrapper.like(User::getName,user.getName());
    28. }
    29. page = mapper.selectPage(page, wrapper);
    30. return page;
    31. }
    32. }

    5、 启动类

    1. package com.sofwin;
    2. import org.mybatis.spring.annotation.MapperScan;
    3. import org.springframework.boot.SpringApplication;
    4. import org.springframework.boot.autoconfigure.SpringBootApplication;
    5. /**
    6. * @author : wentao
    7. * @version : 1.0
    8. */
    9. @SpringBootApplication
    10. //mapper的返现映射器
    11. @MapperScan(basePackages = "com.sofwin.mapper")
    12. public class App {
    13. public static void main(String[]args){
    14. SpringApplication.run(App.class,args);
    15. }
    16. }

    6、配置文件

    application.yml

    1. spring:
    2. datasource:
    3. driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    4. url: jdbc:p6spy:mysql://localhost:3306/dubbotest?serverTimezone=UTC
    5. username: root
    6. password: root
    7. logging:
    8. level:
    9. root: info
    10. com.sofwin: debug
    11. mybatis-plus:
    12. configuration:
    13. #打印sql语句 org.apache.ibatis.logging.stdout.StdOutImpl
    14. log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
    15. # global-config:
    16. # db-config:
    17. # table-prefix: 设置表的前缀名
    18. #逻辑删除
    19. global-config:
    20. db-config:
    21. logic-delete-field: status # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
    22. logic-delete-value: 1 # 逻辑已删除值(默认为 1)
    23. logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
    24. server:
    25. port: 80

     spy.properties 

    用于mybatisplus 的扩展功能 sql语句检查  ---具体可以看mybatisplus的官网

    1. #3.2.1以上使用
    2. modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
    3. #3.2.1以下使用或者不配置
    4. #modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
    5. # 自定义日志打印
    6. logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
    7. #日志输出到控制台
    8. appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
    9. # 使用日志系统记录 sql
    10. #appender=com.p6spy.engine.spy.appender.Slf4JLogger
    11. # 设置 p6spy driver 代理
    12. deregisterdrivers=true
    13. # 取消JDBC URL前缀
    14. useprefix=true
    15. # 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
    16. excludecategories=info,debug,result,commit,resultset
    17. # 日期格式
    18. dateformat=yyyy-MM-dd HH:mm:ss
    19. # 实际驱动可多个
    20. #driverlist=org.h2.Driver
    21. # 是否开启慢SQL记录
    22. outagedetection=true
    23. # 慢SQL记录标准 2
    24. outagedetectioninterval=2

    7、config 配置类

    跨域的配置类

    1. package com.sofwin.config;
    2. import org.springframework.context.annotation.Bean;
    3. import org.springframework.context.annotation.Configuration;
    4. import org.springframework.web.cors.CorsConfiguration;
    5. import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
    6. import org.springframework.web.filter.CorsFilter;
    7. //设置跨域的配置类
    8. @Configuration
    9. public class CrosConfiger {
    10. @Bean
    11. public CorsFilter corsFilter(){
    12. CorsConfiguration corsConfiguration = new CorsConfiguration();
    13. corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址
    14. corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
    15. corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
    16. UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    17. source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置
    18. return new CorsFilter(source);
    19. }
    20. }

     分页和乐观锁的插件

    1. package com.sofwin.config;
    2. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
    3. import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
    4. import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
    5. import org.springframework.context.annotation.Bean;
    6. import org.springframework.context.annotation.Configuration;
    7. /**
    8. * @author : wentao
    9. * @version : 1.0
    10. */
    11. //mybatis plus的插件的拦截器
    12. @Configuration
    13. public class PageInteceptor {
    14. @Bean
    15. public MybatisPlusInterceptor getPageInteceptor(){
    16. MybatisPlusInterceptor interceptor= new MybatisPlusInterceptor();
    17. interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
    18. //乐观锁
    19. interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
    20. return interceptor;
    21. }
    22. }

    8、controller控制层

    1. package com.sofwin.controller;
    2. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    3. import com.sofwin.pojo.ResponseEntity;
    4. import com.sofwin.pojo.User;
    5. import com.sofwin.service.UserService;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.web.bind.annotation.*;
    8. import java.util.ArrayList;
    9. import java.util.Arrays;
    10. import java.util.List;
    11. /**
    12. * @author : wentao
    13. * @version : 1.0
    14. */
    15. @RestController
    16. @RequestMapping("/user")
    17. public class UserServiceController {
    18. @Autowired
    19. private UserService userService;
    20. /**
    21. * 分页查询 还筛选
    22. * @param user
    23. * @param pageNumber
    24. * @param pageSize
    25. * @return
    26. */
    27. @GetMapping()
    28. public ResponseEntity queryByPage(User user,@RequestParam(required = true,defaultValue = "1")Integer pageNumber
    29. ,@RequestParam(required = true,defaultValue = "10")Integer pageSize){
    30. Page page= userService.queryByPage(user,pageNumber,pageSize);
    31. return ResponseEntity.success(page);
    32. }
    33. /**
    34. * 修改或者添加
    35. * @param user
    36. * @return
    37. */
    38. @PostMapping()
    39. public ResponseEntity saveOrUpdate(User user){
    40. return ResponseEntity.success(userService.saveOrUpdate(user));
    41. }
    42. /**
    43. * 修改的查询
    44. * @param id
    45. * @return
    46. */
    47. @GetMapping("/{id}")
    48. public ResponseEntity selectById(@PathVariable(name = "id") Long id){
    49. return ResponseEntity.success(userService.getById(id));
    50. }
    51. /**
    52. * 删除单个
    53. * @param id
    54. * @return
    55. */
    56. @DeleteMapping()
    57. public ResponseEntity removeById(Long id){
    58. return ResponseEntity.success(userService.removeById(id));
    59. }
    60. /**
    61. * 批量删除
    62. * @param ids
    63. * @return
    64. */
    65. // @DeleteMapping ("/removeByIds/{ids}")
    66. // public ResponseEntity removeById(@PathVariable Long[] ids){
    67. // List list=new ArrayList();
    68. // for (Long id : ids) {
    69. // list.add(id);
    70. // }
    71. // boolean b = userService.removeByIds(list);
    72. // return ResponseEntity.success(b);
    73. // }
    74. //第二种都可以 这个是普通的
    75. @DeleteMapping ("/removeByIds")
    76. public ResponseEntity removeById(@RequestBody Long[] ids){
    77. List list=new ArrayList();
    78. for (Long id : ids) {
    79. list.add(id);
    80. }
    81. boolean b = userService.removeByIds(list);
    82. return ResponseEntity.success(b);
    83. }
    84. }

    二、数据库的sql

    1. create database dubbotest;
    2. use dubbotest;
    3. create table user
    4. (
    5. id bigint auto_increment comment '主键ID'
    6. primary key,
    7. name varchar(30) null comment '姓名',
    8. age int null comment '年龄',
    9. email varchar(50) null comment '邮箱',
    10. real_name varchar(20) null,
    11. create_time date null,
    12. update_time date null,
    13. version int default 1 null,
    14. status int default 0 null
    15. );

    后端整个代码gitee :vue的后端: vue的后端 

    三、vue的前端

    前端代码gitee:vue+elementui前端: vue+elementui 前端

  • 相关阅读:
    Java 设计模式——外观模式
    让生产活动更高效,物料管理场景的RPA应用
    Qt “$$“符号的讲解
    Days task Privacy Policy
    如何在Linux上部署1Panel运维管理面板并远程访问内网进行操作
    基于.NetCore开发博客项目 StarBlog - (5) 开始搭建Web项目
    【JAVA】值传递与引用传递
    WPF拖拽相关的类
    Python学习小组课程P4-Python办公(1)Excel保存
    Spring注解之@Configuration和@Bean功能简介说明
  • 原文地址:https://blog.csdn.net/weixin_52574640/article/details/126743336