一、查询

1. 目标:

将数据库的Admin数据再页面上以分页形式显示,再后端将带关键词和不带关键词合并为同一套代码

2. 思路:

怎么实现带关键词和不带关键词兼容呢 ?
SQL: where login_acct like concat(“%”,#{keyword},”%”);
如果有关键字那么就是关键字查找
如果没有关键字那么就是全部查找
未命名图片.png

3. 代码:

1) 引入PageHelper 分页插件

  1. <!-- MyBatis 分页插件 -->
  2. <dependency>
  3. <groupId>com.github.pagehelper</groupId>
  4. <artifactId>pagehelper</artifactId>
  5. </dependency>

2) 在spring容器里,SqlSessionFactoryBean配置MyBatis插件

  1. <!--配置SqlSessionFactoryBean 整合MyBatis-->
  2. <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
  3. <!--配置mybatis全局配置文件的位置-->
  4. <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
  5. <!--指定Mapper.xml 配置文件位置 *Mapper.xml 表示所有的XxxMapper.xml文件-->
  6. <property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml"/>
  7. <!--装配数据源-->
  8. <property name="dataSource" ref="dataSource"/>
  9. <!--配置插件-->
  10. <property name="plugins">
  11. <array>
  12. <!--配置分页插件-->
  13. <bean class="com.github.pagehelper.PageHelper">
  14. <property name="properties">
  15. <props>
  16. <!--数据库方言,告诉PageHelper当前使用的数据库-->
  17. <prop key="dialect">mysql</prop>
  18. <!--配置页码的合理化修正 在1~总页数之间修正页码-->
  19. <prop key="reasonable">true</prop>
  20. </props>
  21. </property>
  22. </bean>
  23. </array>
  24. </property>
  25. </bean>

3) AdminMapper.xml中编写SQL语句

<select id="selectAdminByKeyWord" resultMap="BaseResultMap">
        select 
            id, login_acct, user_pswd, user_name, email, create_time
        from
            t_admin
        where
            login_acct like concat("%",#{keyword},"%") or 
            user_name like concat("%",#{keyword},"%") or
            email like concat("%",#{keyword},"%")
  </select>

4) 在接口中写方法

/**
* 查询所有admin
* @param keyword 要匹配的值
* @return 返回所有用户
*/
List<Admin> selectAdminByKeyWord(String keyword);

5) service方法

/**
* 分页查询逻辑
* @param keyword 需要模糊的字段
* @param pageNum 第几页
* @param pageSize 一页几条
* @return
*/
@Override
public PageInfo<Admin> getPageInfo(String keyword, Integer pageNum, Integer pageSize) {
    // 1.调用pageHelper静态方法 开启分页功能
    PageHelper.startPage(pageNum,pageSize);
    // 2.进行查询
    List<Admin> admins = adminMapper.selectAdminByKeyWord(keyword);
    // 3.封装到PageInfo中,PageInfo类里面封装了总页数,总条数...
    return new PageInfo(admins);
}

6) controller方法

/**
* 分页查询路由
* @param keyword 关键字
* @param pageNum 当前页
* @param pageSize 一页有几个
* @param modelMap 模型
* @return
*/
@RequestMapping("/admin/get/page.html")
public String getPageInfo(
    // 如果请求中没有携带keyword的话 就是用默认值 空字符串
    @RequestParam(value = "keyword", defaultValue = "") String keyword,
    // 当前默认为第 1 页
    @RequestParam(value = "pageNum",defaultValue = "1") Integer pageNum,
    // 当前默认页面显示 5 条
    @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
    ModelMap modelMap
    ){
        // 查询出来
        PageInfo<Admin> pageInfo = adminService.getPageInfo(keyword, pageNum, pageSize);
        // 放到模型中
        modelMap.addAttribute(CrowdConstant.ATTR_NAME_PAGE_INFO,pageInfo);
        return "admin-page";
    }