bestvike --bvframe学习

本文详细描述了一个基于Nacos的微服务架构中,如何在SpringBoot应用中实现API的分页功能以及权限控制。内容涵盖了Controller中使用@RestController、@Autowired,Service层的接口定义与实现,以及DAO层的MyBatis映射和实体类的设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ref title fetch后台api
分页属性,pagination 要差几条?pagelimit
在api中写一个饭方法,vue中用用他
vue.cinfig.js中配置别名

nacos微服务

实体类要继承basedata(封装了公共数据)

控制器autowired,getmapping(api下的文件)
反映pageinfo
dao借口继承公司的借口mapper左脚好类,类型
service,写个实现它
autowired注入dao
override

前端

①views中写一个组件:table标签中ref ,title,:fetch-api=“fetchUsers”
fetchUsers == 在data中定义==并且需要
import { fetchUsers, removeUsers, resetPass } from '@/api/authority/user'
②在api文件下authority下的user.js

import http from '@/utils/http'
export function fetchUsers(query){
  return http.get('/api/users', {
    params: query
  })
}

后端

③controller中写一个控制器SysUserController
控制器 (Controller):
使用 @RestController 注解来定义一个 RESTful 控制器。
使用 @Autowired 注解来自动注入其他组件(如服务)到控制器中。
使用 @GetMapping 注解来映射特定的 HTTP GET 请求到对应的处理方法。
通常,控制器会调用服务层的方法来处理业务逻辑,并将处理结果返回给客户端。

@RestController
public class SysUserController extends BaseController {
注入服务等:
    @Autowired
    private SysUserService sysUserService;
    @GetMapping("/api/users/all") ***调用的是前端api文件下面的js文件中的api***
    public List<SysUser> fetchAll() {
        return sysUserService.fetchAll();
    }
    @GetMapping("/api/users")
    public PageInfo<SysUser> fetch(SysUser sysUser) {
        return sysUserService.fetch(sysUser);  ***调用服务的方法***
    }

④service中写一个接口SysUserService
服务 (Service):
使用 @Service 注解来定义一个服务组件。
服务层通常包含业务逻辑,并且可以访问数据访问对象(DAO)。
服务层可以通过 @Autowired 注解来注入 DAO 层。
服务层的方法可能会被控制器调用,并且可能会返回数据或视图模型,如 PageInfo,这是一个分页信息的包装类,通常用于返回分页数据。

@Service
public interface SysUserService {
    List<SysUser> fetchAll();
    PageInfo<SysUser> fetch(SysUser sysUser);  ***接口中定义方法***
    一些方法

再写一些接口SysUserServiceImpl实现它

@Service
public class SysUserServiceImpl extends BaseService implements SysUserService {
    @Autowired                    **注入dao接口**
    private SysUserDao sysUserDao;
    @Autowired
    private SysRoleDao sysRoleDao;

    @Value("${app.authority.default-password:666666}")
    private String defaultPassword;

    @Override
    public List<SysUser> fetchAll() {
        return sysUserDao.selectAll();
    }
    @Override              ***具体实现的方法***
    public PageInfo<SysUser> fetch(SysUser sysUser) {                  
        return MybatisUtils.page(sysUser, sysUserDao, new ExampleCriteria() {
            @Override
            public void initCriteria(Example.Criteria criteria) {
                /*if (!StringUtils.isEmpty(sysUser.getDeptId())) {
                    criteria.andEqualTo("deptId", sysUser.getDeptId());
                }*/
                if (!StringUtils.isEmpty(sysUser.getDeptId())) {
                    criteria.andEqualTo("deptId", sysUser.getDeptId());
                }
                criteria.andEqualTo("status", UserStatus.NORMAL.getCode());
                if (!StringUtils.isEmpty(sysUser.getFuzzy())) {
                    criteria.andLike("id", "%" + sysUser.getFuzzy() + "%");
                    criteria.orLike("userId", "%" + sysUser.getFuzzy() + "%");
                    //criteria.orLike("avatar", "%" + fuzzy + "%");
                    criteria.orLike("name", "%" + sysUser.getFuzzy() + "%");
                } else {
                    /*if (!StringUtils.isEmpty(sysUser.getId())) {
                        criteria.andEqualTo("id", sysUser.getId());
                    }*/
                    if (!StringUtils.isEmpty(sysUser.getUserId())) {
                        criteria.andEqualTo("userId", sysUser.getUserId());
                    }
                    if (!StringUtils.isEmpty(sysUser.getName())) {
                        criteria.andLike("name", "%" + sysUser.getName() + "%");
                    }
                    if (!StringUtils.isEmpty(sysUser.getStatus())) {
                        criteria.andEqualTo("status", sysUser.getStatus());
                    }
                }
            }
        });
    }

⑤在dao中写一个SysUserDao接口
数据访问对象 (DAO):
使用 @Mapper 注解来定义一个 DAO 接口,它通常继承自某个公司或项目提供的 DAO 接口。
DAO 接口使用泛型来指定操作的实体类和返回的实体类。
DAO 接口中的方法通常用来与数据库交互,执行 CRUD 操作。
DAO 接口的实现类通常由 MyBatis 等持久层框架自动生成,这些实现类通常位于与接口同名的包中。

@Repository
public interface SysUserDao extends Mapper<SysUser> {
    Integer selectId();
    一些方法

⑥src/main/resources/mapping.oa文件下面有着许多xml文件
写一个SysUserMapper.xml,里面写了sql语句,其中id就是上面的方法

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bestvike.oa.dao.SysUserDao">
    <select id="selectId" resultType="integer">
        <![CDATA[
        select IFNULL(max(cast(id as SIGNED INTEGER)), 0) + 1
        from sys_user
        ]]>
    </select>

在这里插入图片描述
⑦在data中定义实体类要继承BaseData

package com.bestvike.oa.data;

import com.bestvike.commons.entity.BaseData;
import com.bestvike.commons.utils.ConvertUtils;
import com.fasterxml.jackson.annotation.JsonIgnore;

@Entity
public class SysAuthority extends BaseData implements Serializable {
    private  static  final long serialVersionUID = 1L;
    @Id
    private String id;
    private String roleId;
    @JsonIgnore
    private String permissions;

    @Transient
    private Map<String, List<String>> routes;

    public String getId() {
        return id;
    }

⑧在后端中resources有一个routes.json文件
里面定义了路由

[
  {
    "path": "/authority",
    "alwaysShow": true,
    "component": "Layout",
    "meta": {
      "title": "权限管理",
      "icon": "authority"
    },
    "children": [
      {
        "path": "users",
        "component": "authority/user",
        "name": "ListUser",
        "meta": {
          "title": "用户管理"
        },
        "authority": {
          "urls": [
            "GET:/api/users",
            "PUT:/api/users",
            "GET:/api/users/{id}/roles",
            "PUT:/api/users/{id}/roles",
            "PUT:/api/users/{id}/password/reset"
          ]
        }
      }, 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值