jt项目实现流程

1.用户登录操作

1.1 关于token的说明

1.由于服务器需要标识已经登录的用户,所以服务器动态生成一个独一无二的token,返回给用户.
2.用户将token保存到本地,方便下次访问时携带.

2.业务实现步骤

1.实现用户登录

1.1创建controller

package com.jt.controller;

import com.jt.VO.SysResult;
import com.jt.pojo.User;
import com.jt.service.UserService;
import com.jt.service.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/user")
@CrossOrigin
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/findAll")
    public List<User> findAll(){
        return userService.findAll();
    }

/**
 * 创建Controller,使用PostMapping
 * 1.前端传过来的是js对象需要使用@RequestBody接收参数
 * 2.后端要返回一个UUID秘钥给前端使用SysResult接收
 * **/
    @PostMapping("/login")
    public SysResult login(@RequestBody User user){
        /***
         * 1.用户传递的是明文,需要加密
         * 查库后有两种可能:
         *              1.有这个客户,则登录成功,并返回token
         *              2.没有这个客户,则返回null值
         * */
        String token =userService.login(user);
        if(token==null||token.length()==0)return null;
        return SysResult.success(token);
    }
}

 1.2.创建Service层

package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

import java.util.List;
import java.util.UUID;

/***
 * Service层,用来处理业务逻辑:
 * 1.客户传来是明文需要加密后再操作
 * */
@Service
public class UserServiceImpl implements UserService{
    
    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> findAll() {
        return userMapper.selectList(null);
    }

    @Override
    public String login(User user) {
        /**
         * 1.获取客户传来的参数
         * 2.使用MD5进行加密,将客户明文改为密文
         * 3.查询时有两种可能:
         *                  1.查询到了,需要生成一个秘钥返回给Controller
         *                  2.没查询到,需要结束当前方法,并返回一个null值
         * **/
        String password = user.getPassword();
        password = DigestUtils.md5DigestAsHex(password.getBytes());
        user.setPassword(password);
        QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);

        User user1 = userMapper.selectOne(queryWrapper);
        if(user1==null){
            return null;
        }

        String token = UUID.randomUUID().toString().replace("-", "");
        return token;
    }
}

2.获取左侧列表

2.1创建pojo的对象Rights

package com.jt.pojo;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;

import java.util.List;

@Data
@Accessors(chain = true)
@TableName("rights")
public class Rights extends BasePojo{
    private Integer id;
    private String name;
    private Integer parentId;
    private String path;
    private Integer level;
    /**
     * 用来表示该属性不存在用来存放2级菜单,不与数据库存在对象
     * 关系映射
     * **/
    @TableField(exist = false)
    private List<Rights> children;

}

2.2创建持久层

package com.jt.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.pojo.Rights;
/**
 * 实体层,由于要是用mp需要继承BaseMapper<Rights>*/
public interface RightsMapper extends BaseMapper<Rights> {
}

2.3创建接口service

package com.jt.service;

import com.jt.pojo.Rights;

import java.util.List;

public interface RightsService {
    List<Rights> findAll();
}

2.4创建接口实现类

package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.RightsMapper;
import com.jt.pojo.Rights;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class RightsServiceImpl implements RightsService{
    @Autowired
    private RightsMapper rightsMapper;

    @Override
    public List<Rights> findAll() {
        return rightsMapper.selectList(null);
    }

    @Override
    public List<Rights> getRightsList() {
        /**
         * 左侧菜单有两层
         * 注:表中一级菜单的parent-id的id是二级菜单的parent-id
         * 1.首先获取第一层菜单
         * 2.遍历一级菜单通过“parent—id”获取二级菜单
         * **/

        QueryWrapper<Rights> queryWrapper = new QueryWrapper<>();
        //获取一级菜单
        queryWrapper.eq("parent_id", 0);
        //获取到的一级菜单封装在一个List集合中
        List<Rights> rightsList = rightsMapper.selectList(queryWrapper);
        //遍历一级菜单
        for (Rights oneList : rightsList) {
            //清除上回查询条件
            queryWrapper.clear();
            //获取二级菜单
            queryWrapper.eq("parent_id", oneList.getId());
            //获取到的二级菜单封装在List集合中
            List<Rights> twoList = rightsMapper.selectList(queryWrapper);
            //将二级菜单放在一级菜单的Children集合中具体查看pojo中的字段
            oneList.setChildren(twoList);
        }
        //返回一级菜单
        return rightsList;
    }
}

2.4创建接口实现类

package com.jt.controller;

import com.jt.VO.SysResult;
import com.jt.pojo.Rights;
import com.jt.service.RightsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/rights")
@CrossOrigin
public class RightsController {
    @Autowired
    private RightsService rightsService;

    @GetMapping("/findAll")
    public List<Rights> findAll(){
        return rightsService.findAll();
    }

    /**
     * 前端没有参数传递,需要获取左侧菜单,含有一级和二级菜单
     * 使用List接收SERVICE传来的参数,将其封装好并交给SysResult
     * **/
    @GetMapping("/getRightsList")
    public SysResult getRightsList(){

        List<Rights> rightsList = 
                rightsService.getRightsList();
        return SysResult.success(rightsList);
    }
}

3.用户列表展现

3.1在VO中创建PageResult对象接收

package com.jt.VO;

import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;

@Data
@Accessors(chain = true)
public class PageResult implements Serializable {
    private String query;
    private Integer pageNum;
    private Integer pageSize;
    private Long total;
    private Object rows;
}

3.2在userController中创建用户列表的分页查询

 @GetMapping("/list")
    public SysResult list(PageResult pageResult){

        /**
         * 需求:实现用户列表的分页查询
         * 传进来3个返回5个参数
         * URL地址: http://localhost:8091/user/list?query=查询关键字&pageNum=1&pageSize=10
**/
        pageResult = userService.list(pageResult);
        return SysResult.success(pageResult);
    }
}

3.3在UserServiceImpl中实现分页查询的业务逻辑

/**
     * 使用MP进行分页查询
     * 1.需要配置动态拼接的配置类
     * 2.使用MY分页对象进行分页
     * **/
    @Override
    public PageResult list(PageResult pageResult) {
        /**
         * 1.使用MY的selectPage查询
         * 2.selectPage需要2个参数一个分页对象,另外一个条件构造器
         * 3.创建分页工具,
         * 4.创建条件构造器
         * 5.pageResult封装查询结构并返回
         * **/
        //创建分页对象
        IPage<User> page =
                new Page<>(pageResult.getPageNum(), pageResult.getPageSize());
        //判断用户是否有查询
        boolean flag = StringUtils.hasLength(pageResult.getQuery());
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like(flag,"username",pageResult.getQuery());
        //分页查询
        page = userMapper.selectPage(page, queryWrapper);
        //封装分页对象
       pageResult.setTotal(page.getTotal()).setRows(page.getRecords());
        return pageResult;
    }

3.4创建配置类

package com.jt.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.CrossOrigin;

/**
 * 使用MY的分页查询工具需要配置拦截器
 * 作用:动态的拼装sql语句
 * **/
@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor =
                new MybatisPlusInterceptor();

        mybatisPlusInterceptor.addInnerInterceptor
                (new PaginationInnerInterceptor(DbType.MARIADB));
        return mybatisPlusInterceptor;
    }
}

4.修改用户状态

4.1在userController中创建用户状态修改

/**
     * 需求:修改用户状态
     * 使用对象接收参数方便
     * 返回一个SysResult对象
     * **/
    @PutMapping("/status/{id}/{status}")
    public SysResult updateStatus(User user){
        userService.updateStatus(user);
        return SysResult.success();
    }

4.2在userServiceImpl中实现业务

/**
     * MY可以直接拼接sql将对象直接传入即可
     * **/
    @Override
    public void updateStatus(User user) {
        userMapper.updateById(user);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欧冶渃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值