2024年Mockjs模拟接口实现增删改查、分页、多条件查询,顺利通过阿里Java岗面试

总结

三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。

  • 第一个是算法

关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。

而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本

《算法刷题LeetCode中文版》总共有15个章节:编程技巧、线性表、字符串、栈和队列、树、排序、查找、暴力枚举法、广度优先搜索、深度优先搜索、分治法、贪心法、动态规划、图、细节实现题

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

《算法的乐趣》共有23个章节:

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

  • 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)

基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

  • 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

三、安装Mock

===========================================================================


//安装最新版本mockjs

npm install mockjs



四、效果图

========================================================================

在这里插入图片描述

五、使用Mock模拟接口实现增删改查、分页、多条件查询

==============================================================================================

使用mock实现英文单词的增删改查、分页、多条件查询

话不多说,上代码

Mock下 index.js




var englishArr = [];

//保存英文单词

Mock.mock('/addEnglish', /post/i,(options) => {

    let english = JSON.parse(options.body).params.english;

    if (english.noid == null) {

        english.noid = Mock.Random.increment();

        englishArr.push(english);

    } else {

        for (let i = 0; i < englishArr.length; i++) {

            if (englishArr[i].noid == english.noid) {

                englishArr.splice(i, 1);

                englishArr.push(english);

            }

        }

    }

    return 0;

});



//获取所有英文单词

Mock.mock("/getEnglishList", /post/i, (options)=> {

    let info = JSON.parse(options.body).params.info;

    if (!info.pageNum) {

        info.pageNum = 1;

    }

    let newArr = [];

    // pageNum, pageSize, searchKey

    // console.log("截取指定元素:"+newArr.length)

    //englishArr.splice((info.pageNum -1) * info.pageSize, info.pageSize)

    if (englishArr.length > 0) {

        let pageNum = (info.pageNum -1) * info.pageSize;

        console.log(pageNum+"--"+info.pageSize)

        //计算截取的数组长度,如果用splice会导致原数组数据丢失

        let num = info.pageNum * info.pageSize;

        for (let i = pageNum; i < num; i++) {

            //全部数据的数组长度不能为空

            if (englishArr[i] != undefined) {

                //查询条件为单词时直接将符合的数据添加到新数组内

                if (info.searchKey && !englishArr[i].world.indexOf(info.searchKey)) {

                    console.log("查询条件:"+info.searchKey)

                    newArr.push(englishArr[i]);

                }



                //查询条件为中文时将符合的数据添加到新数组内

                if (info.searchKey && !englishArr[i].chinese.indexOf(info.searchKey)) {

                    console.log("查询条件:"+info.searchKey)

                    newArr.push(englishArr[i]);

                }



                //查询条件为空时添加所有数据到新数组

                if (!info.searchKey) {

                    newArr.push(englishArr[i]);

                }

            }

        }

        console.log(newArr)

        let page={ list: newArr, pageSize: 2, total: englishArr.length };

        return page;

    }

    let page={ list: englishArr, pageSize: 2, total: englishArr.length };

    return page;

});



//删除英文单词

Mock.mock("/deleteEnglish", /post/i, (options)=> {

    let english = JSON.parse(options.body).params.english;

    for (let i = 0; i < englishArr.length; i++) {

        if (englishArr[i].noid == english.noid) {

            englishArr.splice(i, 1);

        }

    }

    return 0;

})



EnglishList.vue


<template>

  <div class="english">

    <div class="container1">

      <div class="left2">

        <left/>

      </div> 

      <div class="right2">

        <div class="top3">

          <top3/>

        </div>

        <div class="main3">

          

          <!--  主体部分开始 -->



          <div class="bread4">

            <el-breadcrumb separator="&gt;">

              <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>

              <el-breadcrumb-item><a href="/">英文单词管理</a></el-breadcrumb-item>

            </el-breadcrumb>

          </div>

          <div class="main4">



            <div class="box-search">

              <div class="input5">

                <el-input type="text" size="mini" v-model="searchInfo.searchKey" @keydown.native.enter="getEnglishList" @clear="getEnglishList" placeholder="英文/中文"></el-input>

              </div>

              <div class="button5">

                <el-button @click="getEnglishList()" size="mini" type="primary" icon="el-icon-search">搜索</el-button>

                <el-button @click="clkBtnAdd()" size="mini" type="warning" icon="el-icon-plus">新增</el-button>

              </div>

            </div>



            <div class="box-table5">

              <el-table :border="true" :data="englishPage.list" style="width: 100%"

              :header-cell-style="{'background-color':'#999','color':'#fff'}">

                <el-table-column  type="index" label="序号" width="80">

                </el-table-column>

                <el-table-column  prop="world" label="英文单词" width="180">

                </el-table-column>

                <el-table-column  prop="chinese" label="中文解释" width="180">

                </el-table-column>

                <el-table-column label="操作" width="180">

                    <template slot-scope="scope">

                      <el-button type="warning" size="mini" @click="editInfo(scope.row)">修改</el-button>

                      <el-button type="primary" size="mini" @click="clkBtnDelete(scope.row)">删除</el-button>

                    </template>

                </el-table-column>

              </el-table>

            </div>

            <div class="box-page5">

              <el-pagination

                      layout="prev, pager, next" @current-change = "chgPageNum"

                      :page-size="englishPage.pageSize" :total="englishPage.total">

              </el-pagination>

            </div>



            <el-dialog title="保存信息" :visible.sync="showAddEnglish">

              <el-form :model="english" label-width="120px">

                <el-form-item label="英文单词">

                  <el-input v-model="english.world" size="mini" placeholder="请输入英文单词"></el-input>

                </el-form-item>

                <el-form-item label="中文解释">

                  <el-input v-model="english.chinese" size="mini" placeholder="请输入中文解释"></el-input>

                </el-form-item>

              </el-form>

              <span slot="footer">

                <el-button type="primary" size="mini" @click="clkBtnSave">保存</el-button>

                <el-button type="warning" size="mini" @click="showAddEnglish = false">取消</el-button>

              </span>

            </el-dialog>



          </div>



          <!--  主体部分结束 -->



        </div>

      </div>



    </div>

  </div>

</template>



<script>

import Left from './include/Left.vue';

import Top3 from './include/Top3.vue';

import Axios from 'axios';



export default {

  components: { Left, Top3 },

  name: 'english',

  data(){

    return {

      page1: {pageSize: 5, total: 0, list: [] },

      showAddEnglish:false,

      english:{},

      englishPage:{pageNum:1, pageSize: 2, total: 0, list:[]},

      searchInfo:{searchKey:''}

    }

  },

  // vue 生命周期 

  mounted(){

    this.initData();

  },

  methods:{

    initData(){

      this.getEnglishList();

    },

    clkBtnAdd() {

      this.english = {noid:null};

      this.showAddEnglish = true;

    },

    clk1(){

      // Axios.post('/test3').then( (d1r)=>{

      //   this.page1  =  d1r.data;

      // } )

    },

    chgPageNum(pageNum) {

      this.englishPage.pageNum = pageNum;

      this.getEnglishList();

    },

    editInfo(row){

      this.showAddEnglish = true;

      this.english = JSON.parse(JSON.stringify(row));

    },

    getEnglishList() {

      Axios.post("/getEnglishList", {

        params:{

          info:{pageNum: this.englishPage.pageNum, pageSize: this.englishPage.pageSize, searchKey: this.searchInfo.searchKey}

        }

      }).then((res) => {

        this.englishPage = res.data;

        console.log(res.data)

      })

    },

    clkBtnSave() {

      Axios.post("/addEnglish", {

        params:{

          english:this.english

        }

      }).then((res) => {

        if (res.data == 0) {

          this.getEnglishList();

          this.showAddEnglish = false;

        }

      })

    },

    clkBtnDelete(row) {

      this.$confirm("您确信要删除吗?", "提示").then(() => {

        Axios.post("/deleteEnglish", {

          params:{

            english:row

          }

        }).then((res) => {

          if (res.data == 0) {


# 写在最后


还有一份JAVA核心知识点整理(PDF):**JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC**,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,**MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存**,Hadoop,Spark,Storm,YARN,机器学习,云计算...

![image](https://img-blog.csdnimg.cn/img_convert/bff419b766141ec42affd4e66776cd32.webp?x-oss-process=image/format,png)

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**


        }).then((res) => {

          if (res.data == 0) {


# 写在最后


还有一份JAVA核心知识点整理(PDF):**JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC**,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,**MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存**,Hadoop,Spark,Storm,YARN,机器学习,云计算...

[外链图片转存中...(img-BK0N5zTQ-1715002585180)]

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以给您一些指导。 首先,增删改查和带条件的分页查询是后端开发的基础操作之一,而 Spring 框架提供了很多方便的工具来实现这些操作。下面是一些步骤和代码示例,希望能对您有所帮助。 1. 数据库建表 首先,您需要在数据库中创建相应的表,例如一个名为 user 的用户表,表中包含 id、name、age、gender 等字段。 2. 创建 Entity 类 接下来,您需要创建一个与数据库表对应的实体类,通常称为 Entity 类。该类的属性需要与数据库表中的字段一一对应。例如: ```java @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name") private String name; @Column(name = "age") private Integer age; @Column(name = "gender") private String gender; // getter/setter 略 } ``` 3. 创建 Repository 接口 接着,您需要创建一个 Repository 接口,用于操作数据库。Repository 接口通常继承 JpaRepository 或 JpaSpecificationExecutor 接口,以便使用 Spring Data JPA 提供的增删改查分页查询方法。例如: ```java @Repository public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> { } ``` 4. 创建 Service 类 然后,您需要创建一个 Service 类,用于封装业务逻辑。Service 类通常调用 Repository 中的方法来实现具体的操作。例如: ```java @Service public class UserService { @Autowired private UserRepository userRepository; public List<User> findAll() { return userRepository.findAll(); } public void save(User user) { userRepository.save(user); } public void delete(Long id) { userRepository.deleteById(id); } public User findById(Long id) { return userRepository.findById(id).orElse(null); } public Page<User> findByCondition(String name, Integer age, String gender, Pageable pageable) { Specification<User> specification = (root, criteriaQuery, criteriaBuilder) -> { List<Predicate> predicates = new ArrayList<>(); if (StringUtils.isNotBlank(name)) { predicates.add(criteriaBuilder.like(root.get("name"), "%" + name + "%")); } if (age != null) { predicates.add(criteriaBuilder.equal(root.get("age"), age)); } if (StringUtils.isNotBlank(gender)) { predicates.add(criteriaBuilder.equal(root.get("gender"), gender)); } return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])); }; return userRepository.findAll(specification, pageable); } } ``` 5. 创建 Controller 类 最后,您需要创建一个 Controller 类,用于处理前端请求。Controller 类通常调用 Service 中的方法来实现具体的操作,并将结果以 JSON 格式返回给前端。例如: ```java @RestController @RequestMapping("/api/user") public class UserController { @Autowired private UserService userService; @GetMapping("/") public List<User> findAll() { return userService.findAll(); } @PostMapping("/") public void save(@RequestBody User user) { userService.save(user); } @DeleteMapping("/{id}") public void delete(@PathVariable Long id) { userService.delete(id); } @GetMapping("/{id}") public User findById(@PathVariable Long id) { return userService.findById(id); } @GetMapping("/search") public Page<User> findByCondition(@RequestParam(required = false) String name, @RequestParam(required = false) Integer age, @RequestParam(required = false) String gender, @PageableDefault(size = 10, sort = {"id"}, direction = Sort.Direction.ASC) Pageable pageable) { return userService.findByCondition(name, age, gender, pageable); } } ``` 6. 创建前端页面 在前端页面中,您可以使用 vue 框架来实现用户界面。例如,您可以创建一个 user.vue 组件,包含增删改查分页查询等功能。具体实现方式可以参考 vue 官方文档和相关教程。 以上是一个简单的增删改查和带条件的分页查询的实现步骤和代码示例。当然,实际项目中可能会更加复杂,需要根据具体情况进行调整。希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值