SSM框架--实现模糊分页查询

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/bibic226/article/details/102666252

SSM框架–实现模糊分页查询

一.准备工作

  • 使用MyBatis逆向生成员工表和部门表的实体类,接口以及映射文件

  • pom.xml中添加分页插件的依赖

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.1.2</version>
    </dependency>
    
    
  • sqlMapConfig.xml中添加分页插件配置

    <!-- 分页插件 -->
    	 <plugins>
        	 <plugin interceptor="com.github.pagehelper.PageInterceptor"> 
              <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
              <!-- pageNum表示当前页 pages表示尾页 -->
            <!-- true启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
            <!-- false禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->  
                <property name="reasonable" value="true"/>
              </plugin>
        </plugins>
    
    

二.展示页面

1.form表单包含查询条件和回显
  • 需要查出所有的图书类型
<form  id="myForm" action="/emp/search" method="post" style="text-align: center">
        姓名:<input type="text" name="name" value="${ec.name}">
        工资:<input type="text" name="startSalary" value="${ec.startSalary}" >-
           <input type="text" name="endSalary" value="${ec.endSalary}" >
        生日:<input type="date" name="startBirth"  value="<fmt:formatDate value='${ec.startBirth}' pattern='yyyy-MM-dd'/>" >-
        <input type="date" name="endBirth" value="<fmt:formatDate value='${ec.endBirth}' pattern='yyyy-MM-dd'/>" >
        部门:<select name="deptid" >
            <option value="0">--请选择--</option>
            <c:forEach var="dept" items="${depts}">
                <option value="${dept.id}"
                        <c:if test="${dept.id==ec.deptid}">selected=true</c:if>
                >${dept.dname}</option>
            </c:forEach>
        </select>
        <input type="hidden" id="pageNum" name="pageNum" value="1">
        <input type="submit" value="搜索">
    </form>

2.table做主体数据展示
  • Book.bookType.name 需要在后台把booktype存到book中
<table  align="center" cellpadding="15" cellspacing="0" border="1">
    <tr>
        <td>编号</td>
        <td>姓名</td>
        <td>年龄</td>
        <td>性别</td>
        <td>工资</td>
        <td>津贴</td>
        <td>生日</td>
        <td>入职时间</td>
        <td>领导</td>
        <td>部门</td>
    </tr>
    <c:if test="${not empty pageInfo.list}">
        <c:forEach var="emp" items="${pageInfo.list}">
            <tr>
                <td>${emp.id}</td>
                <td>${emp.name}</td>
                <td>${emp.age}</td>
                <td>${emp.sex}</td>
                <td>${emp.salary}</td>
                <td>${emp.bonus}</td>
                <td><fmt:formatDate value="${emp.birth}" pattern="yyyy-MM-dd"/></td>
                <td><fmt:formatDate value="${emp.hiredate}" pattern="yyyy-MM-dd"/></td>
                <td>${emp.leader}</td>
                <td>${emp.dept.dname}</td>
            </tr>
        </c:forEach>
    </c:if>
</table>
3.分页
  • 使用超链接标签调用js函数to_Page,实现form表单的提交
<table align="center" cellpadding="10" cellspacing="10" border="1">
    <tr>
        <td><a href="javascript:goPage(1)">首页</a></td>
        <td><a href="javascript:goPage(${pageInfo.pageNum-1})">上一页</a></td>
        <c:forEach var="i" begin="1" end="${pageInfo.pages}">
            <td><a href="javascript:goPage(${i})">${i}</a></td>
        </c:forEach>
        <td><a href="javascript:goPage(${pageInfo.pageNum+1})">下一页</a></td>
        <td><a href="javascript:toPage()">跳转</a>到第<input size="2" type="text" value="${pageInfo.pageNum}" id="go">页</td>
        <td><a href="javascript:goPage(${pageInfo.pages})">尾页</a></td>
    </tr>
</table>

<!--js部分-->
<script>
    function goPage(page) {
        $("#pageNum").val(page);
        $("#myForm").submit()
    }
    function toPage() {
       var page=$("#go").val();
       goPage(page)
   }
</script>

三.Controller层

1.接收jsp的查询条件参数,和当前页参数pageNum

2.查询所有的部门信息

3.进行模糊条件 查询

4.将pageinfo,所有部门 和查询条件存进model

5.跳转到展示页面


@Controller
@RequestMapping("/emp")
public class EmpController {

    @Autowired
    IEmpService service;
    /*
1.接收jsp的查询条件参数,还有当前页
2.查询所有的部门信息
3.进行模糊条件 查询
4.将pageinfo,所有部门 和 查询条件(回显)存进model
5.跳转到展示页面
*/

    @RequestMapping("/search")
    public ModelAndView search(EmpCriteria ec, @RequestParam(defaultValue = "1") int pageNum, ModelAndView mav){
        //1.查询所有的部门
        List<Dept> depts= service.selectDepts();
        //2.使用分页插件, 模糊分页查询,pageInfo中包含查询结果集和分页四大参数
        PageInfo pageInfo= service.selectLikePage(ec,pageNum);
        mav.addObject("depts",depts);
        mav.addObject("pageInfo",pageInfo);
        mav.addObject("ec",ec);
        mav.setViewName("show");
        return mav;
    }
}

四.Service层

1.开始执行分页(必须放在最前面)

2.模糊条件查询 得到结果集 emps

3.emps集合进行遍历 并查询每一名员工的部门 存进员工对象中

4.将结果集 以有参构造的方式存到pageInfo(分页的参数 查询结果集)中


@Service
@Transactional
public class EmpServiceImpl implements IEmpService {

    @Autowired
    DeptMapper deptMapper;

    @Autowired
    EmpMapper empMapper;

    @Override//查询所有部门
    public List<Dept> selectDepts() {
        //条件为空即为查询所有
        return deptMapper.selectByExample(null);
    }

    /*
    1.开始执行分页(必须放在最前面)
    2. 模糊条件查询   得到结果集  emps
    3.emps集合进行遍历  并查询每一个员工的部门  存进员工对象中
    4.将结果集 以有参构造的方式存到pageInfo(分页的参数  查询结果集)中
*/
    @Override
    public PageInfo selectLikePage(EmpCriteria ec, int pageNum) {
//1.开始执行分页(必须放在最前面)
        int size=5;
        PageHelper.startPage(pageNum,size);
//2.封装查询条件 ,执行模糊查询
        EmpExample empExample = new EmpExample();
        EmpExample.Criteria criteria = empExample.createCriteria();
        //ec:所有的条件参数:
        // 1.姓名name  2.工资 startSalary endSalary 3.生日 startBirth endBirth 4.部门deptid
        if(ec.getName()!=null){
            criteria.andNameLike("%"+ec.getName()+"%");
        }
        if(ec.getStartSalary()!=null){
            criteria.andSalaryGreaterThanOrEqualTo(ec.getStartSalary());
        }
        if(ec.getEndSalary()!=null){
            criteria.andSalaryLessThanOrEqualTo(ec.getEndSalary());
        }

        if(ec.getStartBirth()!=null){
            criteria.andBirthGreaterThanOrEqualTo(ec.getStartBirth());
        }
        if(ec.getEndBirth()!=null){
            criteria.andBirthLessThanOrEqualTo(ec.getEndBirth());
        }
        if(ec.getDeptid()!=null&&ec.getDeptid()!=0){
            criteria.andDeptidEqualTo(ec.getDeptid());
        }
        List<Emp> emps = empMapper.selectByExample(empExample);
//3.遍历结果集,关联员工和部门
        for(Emp emp:emps){
            Dept dept = deptMapper.selectByPrimaryKey(emp.getDeptid());
            emp.setDept(dept);
        }
//4.结果集 存进 pageInfo 并返回
        return new PageInfo(emps);//pageInfo中本来就有四大分页参数,现关联结果集
    }
}

  • 封装条件类

public class EmpCriteria {
    private String name;
    private Double startSalary;
    private Double endSalary;
    //页面400
    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date startBirth;
    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date endBirth;
    private Integer deptid;

   //省略 get/set  set中String类型的带 trim()方法
}


猜你喜欢

转载自blog.csdn.net/bibic226/article/details/102666252