vue+springboot练手demo(二)——查询功能的实现

目录

vue+springboot练手demo(一)——环境搭建
vue+springboot练手demo(二)——查询功能的实现
vue+springboot练手demo(三)——删除功能的实现
vue+springboot练手demo(四)——新增和修改功能的实现
vue+springboot练手demo(五)——校验功能
vue+springboot练手demo(六)——Swagger、Druid监控和日志
vue+springboot练手demo(七)——Excel导出和导入

查询功能实现

分页查询所有员工,由于后面可能要做通过姓名查询员工,因此在这里就合在一起写了,如果后续还需要其他条件查询再酌情修改。
如果传入的参数为空则为查询所有,传入的参数不为空则为按照姓名查询

查询所有模块的开发

后端模块

编写entity层

这里省略了get、set、tostring和构造方法
emps

public class Emps implements Serializable {
    private static final long serialVersionUID = 212078195923992566L;
    
    private Integer eId;
    
    private String eName;
    
    private String eEmail;
    
    private String eSex;
    
    private String ePhone;
    
    private String eDate;

    private Integer did;

    //用于存放部门信息
    private List<Dept> deptList;
}

dept

public class Dept implements Serializable {
    private static final long serialVersionUID = 452916569548814029L;
    
    private Integer dId;
    
    private String dName;
}

编写dao层

@Mapper
public interface EmpsDao {
    /**
     * 分页查询
     */
    List<Emps> GetAllEmps(String name);
}

编写sql语句

<?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.feng.employees.dao.EmpsDao">
    <resultMap id="EmpsWithDepts" type="com.feng.employees.entity.Emps">
        <id property="eId" column="e_id"/>
        <result property="eName" column="e_name"/>
        <result property="eEmail" column="e_email"/>
        <result property="eSex" column="e_sex"/>
        <result property="ePhone" column="e_phone"/>
        <result property="eDate" column="e_date"/>
        <collection property="deptList" javaType="list" ofType="com.feng.employees.entity.Dept">
            <id property="dId" column="d_id"></id>
            <result property="dName" column="d_name"></result>
        </collection>
    </resultMap>
    <select id="GetAllEmps" resultMap="EmpsWithDepts">
        select e_id,e_name,e_email,e_sex,e_phone,e_date,dept.d_id,dept.d_name from emps,dept where
        <if test="name != null and name != ''">
            e_name like '%${name}%' and
        </if>
        emps.d_id=dept.d_id
    </select>
</mapper>

编写service层

service层接口

public interface EmpsService {
    List<Emps> GetAllEmps(String name);
}

接口的实现类

@Service
public class EmpsServiceImpl implements EmpsService {
    @Autowired
    private EmpsDao empsDao;
    @Override
    public List<Emps> GetAllEmps(String name) {
        return empsDao.GetAllEmps(name);
    }
}

编写controller层

@RestController
@RequestMapping("/Emps")
@CrossOrigin    //跨域的支持
@Slf4j
public class EmpsController {
    @Autowired
    private EmpsService empsService;
    /**
     * 分页查询,默认一页显示十条数据
     * @param currentpage 哪一页
     * @param name        姓名模糊查询
     * @return
     */
    @GetMapping("/Emps")
    public Msg GetAllEmps(Integer currentpage,String name){
//"e_id asc"为后期添加上的,使查询结果按照e_id的升序来排序。
        PageHelper.startPage(currentpage,10,"e_id asc");
        List<Emps> empsList = empsService.GetAllEmps(name);
        PageInfo pageInfo = new PageInfo(empsList);
        return Msg.success()
                //职工信息
                .add("emps",pageInfo.getList())
                //总条数
                .add("total", pageInfo.getTotal())
                //当前页
                .add("current", pageInfo.getPageNum())
                //总页数
                .add("endPage",pageInfo.getPages());
    }
}

postman测试

2-1 后端模糊查询测试.png

前端查询功能的实现

首先修改table中部门的绑定属性

<el-table-column
  #将原来的deptList改为deptList[0].dname用于获取从后端传过来的部门名
  prop="deptList[0].dname"
  label="部门"
  width="100">
</el-table-column>

前端模块

编写查询方法

在methods中添加查询方法

    findAll() {
      this.$http.get("Emps/Emps?currentpage=" + 1).then(result => {
        let extend = result.data.extend;
        this.EmpsInfo = extend.emps;
        this.total = extend.total;
        this.endpage = extend.endPage;
        this.currentpage = extend.current;
      });
    }

然后在created中添加此方法

  created() {
    this.findAll();
  }

查看效果


2-2 页面查询所有测试.png

可以看到员工数据和分页的数据已经能够显示出来了,但是点击分页条中的按钮还不能实现页面跳转。因此我们还需要完善分页的功能。点击分页条中的按钮发送请求,查询数据。

    //分页的数据
    findPage(page) {
      this.$http.get("Emps/Emps?currentpage=" + page).then(result => {
        let extend = result.data.extend;
        this.EmpsInfo = extend.emps;
        this.total = extend.total;
        this.currentpage = extend.current;
      });
    }
2-3 完善查询所有功能.png

姓名模糊查询模块的开发

后端模块

由于模糊查询的语句前面已经写好了,这里在控制层就可以直接拿来用了。

前端模块

前端页面搭建

在表格上方加上一个内嵌按钮的输入框用于获取查询姓名的关键字。

<el-row style="margin-top: 2%">
  <el-col :span="16" :offset="5">
    <el-input type="text" placeholder="请输入姓名的关键字进行查找" style="width: 40%" v-model="searchname">
      <el-button slot="append" icon="el-icon-search" @click="SearchEmps"></el-button>
    </el-input>
  </el-col>
</el-row>

在data()中添加searchname: null

编写查询方法

当没有输入查询关键字点击查询的时候,是查询所有

    SearchEmps(){
      let name = this.searchname;
      if(name!=null){
        this.$http.get("/Emps/findbyname?name=" + name + "&currentpage=" + 1).then(result => {
          let extend = result.data.extend;
          this.EmpsInfo = extend.emps;
          this.total = extend.total;
          this.currentpage = extend.current;
        });
      }
    }

在网页中测试一下,查找姓名中含有“丽”的职工信息。


2-4 姓名模糊查询测试.png

此时可以发现数据已经被查出来了,但是点击下一页却是整个员工信息的下一页而不是模糊查询的下一页,因此要对分页数据展示的方法进行改造。

改造分页方法

      findPage(page) {
        let name = this.searchname;
        if (name == "") {
          this.$http.get("Emps/emps?currentpage=" + page).then(result => {
            let extend = result.data.extend;
            this.tableData = extend.emps;
            this.total = extend.total;
            this.currentzpage = extend.current;
          });
        } else {
          this.$http.get("/Emps/findbyname?name=" + name + "&webpage=" + page).then(result => {
            let extend = result.data.extend;
            this.tableData = extend.emps;
            this.total = extend.total;
            this.currentpage = extend.current;
          });
        }
      }

测试一下


2-5 完整的姓名模糊查询测试.png

可以看到下一页的数据中全是姓名中带有“丽”字的职工信息。并且当输入框没有任何字段点击查询时会默认查询所有!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352