欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MyBatis分组统计查询、多条件查询

程序员文章站 2024-03-05 15:39:07
...

声明一下,本文章基于之前的博客https://blog.csdn.net/Xeon_CC/article/details/107219206 的环境下进行编码,但是不影响童鞋们浏览此文章,毕竟说的是一些查询方法

 

在MyBatisController类,用上@Controller,因为我们要用到Thymeleaf 和 SpringMVC,这样才能返回html页面

以下代码在联合查询的情况下,当然你也可以不联合查询,方法是相通的

包含了以下查询功能

①使用EmpExample类进行全查

②简单条件查询,查询年龄在20到40岁的员工

③或运算查询,查询年龄20到40或者姓张的员工

④与运算,查询年龄0到40而且是姓张的员工

⑤包含了分组查询各个部门有多少人,并且加上条件筛选20到40岁的员工

⑥统计各个姓分别有多少个人

 

import com.example.mapper.DeptMapper;
import com.example.mapper.EmpMapper;
import com.example.model.Dept;
import com.example.model.DeptExample;
import com.example.model.Emp;
import com.example.model.EmpExample;
import com.example.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.*;


@Controller
public class MyBatisController {
    @Autowired
    EmpService empService;

    @Autowired
    EmpMapper empMapper;

    @Autowired
    DeptMapper deptMapper;

    @GetMapping("/findAllEmp")
    public String findAllEmp(Model model){
        EmpExample empExample = new EmpExample();
        empExample.setOrderByClause("emp_id ASC");
        model.addAttribute("tip_allEmp","查询所有员工");
        model.addAttribute("allEmp",empMapper.selectByExampleWithDept(empExample));
        return "index";
    }

    //查询年龄在20到 40的员工
    @GetMapping("/findAgeGt20Lt40")
    public String findAgeGt20Lt40(Model model){
        EmpExample empExample = new EmpExample();
        EmpExample.Criteria empCriteria = empExample.createCriteria();
        empCriteria.andEmpAgeBetween(20,40);
        model.addAttribute("tip_selectEmpFromeAge","查询年龄在20到 40的员工");
        model.addAttribute("selectEmpFromeAge",empMapper.selectByExampleWithDept(empExample));
        return "index";
    }

    //查询年龄20到40或者姓名是姓张的
    @GetMapping("/findAgeGt20Lt40AndNameLike")
    public String findAgeGt20Lt40AndNameLike(Model model){
        EmpExample empExample = new EmpExample();
        //执行或运算查询
        EmpExample.Criteria empCriteria1 = empExample.createCriteria();
        EmpExample.Criteria empCriteria2 = empExample.createCriteria();
        empCriteria1.andEmpAgeBetween(20,40);
        empCriteria2.andEmpNameLike("张%");
        model.addAttribute("tip_selectEmpFromAgeAndName","查询年龄20到40或者姓名是姓张的");
        model.addAttribute("selectEmpFromAgeAndName",empMapper.selectByExampleWithDept(empExample));
        return "index";
    }

    //查询年龄0到40而且姓名是姓张的
    @GetMapping("/findAgeGt0Lt40AndNameLike")
    public String findAgeGt0Lt40AndNameLike(Model model){
        EmpExample empExample = new EmpExample();
        //执行与运算
        EmpExample.Criteria empCriteria = empExample.createCriteria();
        empCriteria.andEmpAgeBetween(0,40);
        empCriteria.andEmpNameLike("张%");
        model.addAttribute("tip_selectEmpFromAgeAndName","查询年龄0到40而且姓名是姓张的");
        model.addAttribute("selectEmpFromAgeAndName",empMapper.selectByExampleWithDept(empExample));
        return "index";
    }

    //分组查询各个部门有多少人,并且加上条件筛选20到40岁的员工
    @GetMapping("/findEmpGroupByDept")
    public String findEmpGroupByDept(Model model){
        DeptExample deptExample = new DeptExample();
        List<Dept> deptList = deptMapper.selectByExample(deptExample);
        Map<String, Long> deptCountMap = new HashMap<>();
        for(int i=0;i<deptList.size();i++){
            EmpExample empExample = new EmpExample();
            EmpExample.Criteria empCriteria =  empExample.createCriteria();
            empCriteria.andEmpAgeBetween(20,40);
            empCriteria.andDeptIdEqualTo(deptList.get(i).getDeptId());
            Long dept_emp_count = empMapper.countByExample(empExample);
            deptCountMap.put(deptList.get(i).getDeptName(),dept_emp_count);
        }

        model.addAttribute("tip_deptCountMap","分组查询各个部门有多少人,并且加上条件筛选20到30岁的员工");
        model.addAttribute("deptCountMap",deptCountMap);

        return "index";
    }

    //统计各个姓有多少个人
    @GetMapping("/findFirstNameCount")
    public String findFirstNameCount(Model model){
        EmpExample empExample = new EmpExample();
        Map<String,Long> firstNameMap = new HashMap<>();

        List<Emp> empList = empMapper.selectByExampleWithDept(empExample);
        //不重复集合
        Set<String> set = new HashSet();
        for(int i=0;i<empList.size();i++){
            set.add(empList.get(i).getEmpName().substring(0,1));
        }

        model.addAttribute("set",set);

        for(String firstName : set){
            EmpExample empExample2 = new EmpExample();
            EmpExample.Criteria empCriteria = empExample2.createCriteria();
            empCriteria.andEmpNameLike(firstName+"%");
            Long firstNameCount = empMapper.countByExample(empExample2);
            firstNameMap.put(firstName,firstNameCount);
        }

        model.addAttribute("firstNameMap",firstNameMap);

        return "index";
    }


}

 

index.html页面,使用springboot工程内置的的thymeleaf会更加灵活好用

编辑index.html文件

MyBatis分组统计查询、多条件查询

 

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!-- ${xxxkey} 意思是在Controller类中取出model的属性值,取值以后可以直接使用它 -->
<span th:text="${tip_allEmp}"></span>
<p th:each="Emp : ${allEmp}">

    <span th:text="${Emp.getEmpId()}"></span>
    <span th:text="${Emp.getEmpName()}"></span>
    <span th:text="${Emp.getEmpAge()}"></span>
    <span th:text="${Emp.getEmpGender() eq 'm'?'男':'女'}"></span>
    <span th:text="${Emp.getDeptId()}"></span>
    <span th:text="${Emp.getDept().getDeptName()}"></span>
</p>

<span th:text="${tip_selectEmpFromeAge}"></span>
<p th:each="Emp : ${selectEmpFromeAge}">
    <span th:text="${Emp.getEmpId()}"></span>
    <span th:text="${Emp.getEmpName()}"></span>
    <span th:text="${Emp.getEmpAge()}"></span>
    <span th:text="${Emp.getEmpGender() eq 'm'?'男':'女'}"></span>
    <span th:text="${Emp.getDeptId()}"></span>
    <span th:text="${Emp.getDept().getDeptName()}"></span>
</p>

<span th:text="${tip_selectEmpFromAgeAndName}"></span>
<p th:each="Emp : ${selectEmpFromAgeAndName}">
    <span th:text="${Emp.getEmpId()}"></span>
    <span th:text="${Emp.getEmpName()}"></span>
    <span th:text="${Emp.getEmpAge()}"></span>
    <span th:text="${Emp.getEmpGender() eq 'm'?'男':'女'}"></span>
    <span th:text="${Emp.getDeptId()}"></span>
    <span th:text="${Emp.getDept().getDeptName()}"></span>
</p>

<span th:text="${tip_deptCountMap}"></span>
<p th:each="dcMapVal : ${deptCountMap}">
    <span th:text="${dcMapVal.key }"></span>
    <span th:text="${dcMapVal.value +'人'}"></span>
</p>



<p th:each="fnMap : ${firstNameMap}">
    <span th:text="${'姓'+ fnMap.key }"></span>
    <span th:text="${fnMap.value +'人'}"></span>
</p>

</body>
</html>