一、查询
1. 目标:
将数据库的Admin数据再页面上以分页形式显示,再后端将带关键词和不带关键词合并为同一套代码
2. 思路:
怎么实现带关键词和不带关键词兼容呢 ?
SQL: where login_acct like concat(“%”,#{keyword},”%”);
如果有关键字那么就是关键字查找
如果没有关键字那么就是全部查找
3. 代码:
1) 引入PageHelper 分页插件
<!-- MyBatis 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
</dependency>
2) 在spring容器里,SqlSessionFactoryBean配置MyBatis插件
<!--配置SqlSessionFactoryBean 整合MyBatis-->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--配置mybatis全局配置文件的位置-->
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
<!--指定Mapper.xml 配置文件位置 *Mapper.xml 表示所有的XxxMapper.xml文件-->
<property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml"/>
<!--装配数据源-->
<property name="dataSource" ref="dataSource"/>
<!--配置插件-->
<property name="plugins">
<array>
<!--配置分页插件-->
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<props>
<!--数据库方言,告诉PageHelper当前使用的数据库-->
<prop key="dialect">mysql</prop>
<!--配置页码的合理化修正 在1~总页数之间修正页码-->
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</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";
}