众筹网_管理员信息维护

一、目标

以分页的形式把管理员信息显示到页面上。 特殊需求:兼顾关键词查询,让后端代码不管有没有查询条件都能够以分页形式显示数据。

二、思路

  • 流程图

众筹网_管理员信息维护

 

三、代码

  • 引入PageHelper插件依赖(MyBatis插件)
<!-- MyBatis 分页插件 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
</dependency>

 

  • 在SqlSessionFactoryBean中配置PageHelper插件
<!-- 配置 SqlSessionFactoryBean -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"> 
<!-- 装配数据源 -->
    <property name="dataSource" ref="dataSource" /> 
    <!-- 指定 MyBatis 全局配置文件位置 -->
    <property name="configLocation" value="classpath:mybatis-config.xml" /> 
    <!-- 指定 Mapper 配置文件位置 -->
    <property name="mapperLocations" value="classpath:mapper/*Mapper.xml" />
    <!-- 配置插件 -->
    <property name="plugins">
        <array>
            <!-- 配置PageHelper插件 -->
            <!-- 内部bean可以不写id -->
            <bean class="com.github.pagehelper.PageHelper">
                <!-- 配置相关属性 -->
                <property name="properties">
                    <props>
                        <!-- 配置数据库方言,告诉 PageHelper 当前使用的具体数据库, -->
                        <!-- 让 PageHelper 可以根据当前数据库生成对应的分页SQL语 句 -->
                        <prop key="dialect">mysql</prop>
                        <!-- 配置页码的合理化修正,自动把浏览器传来的 PageNum 修正到 0~总页数范围 -->
                        <prop key="reasonable">true</prop>
                    </props>
                </property>
            </bean>
        </array>
    </property>
</bean>

 

  •  AdminMapper.xml中编写SQL语句,并在AdminMapper中补上该接口,形成映射
<!-- 该部分<sql>是逆向工程自动生成的 -->
<sql id="Base_Column_List"> id, login_acct, user_pswd, user_name, email, create_time </sql>
<!-- 有关limit的语句已经由PageHelper写好了,我们只需要写select语句 -->
<!-- 这个BaseResultMap是逆向工程里自带的 --> <select id="selectAdminListByKeyword" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from t_admin where
  <!-- CONCAT是sql里拼字符串的函数 -->
  <!-- 这样可以做到兼容有关键字查询和无关键字查询 --> login_acct like CONCAT("%",#{keyword},"%") or user_name like CONCAT("%",#{keyword},"%") or email like CONCAT("%",#{keyword},"%") </select
List<Admin> selectAdminListByKeyword(String keyword);

 

  • AdminService.java
/**
 * 获取PageInfo(内部封装了List类型的属性来放Admin)
 * @param keyword
 * @param pageSize
 * @param pageNum
 * @return
 */
PageInfo<Admin> getPageInfo(String keyword,Integer pageSize,Integer pageNum);

 

  • AdminServiceImpl.java
@Override
public PageInfo<Admin> getPageInfo(String keyword, Integer pageSize, Integer pageNum) {
    
    // 1.调用PageHelper的静态方法开启分页功能
    // 这里体现了PageHelper的"非侵入式"设计:原本的查询代码不必有任何修改,要分页就加上这句话,不分页去掉就行了
    PageHelper.startPage(pageNum, pageSize);
    
    // 2.执行查询
    // 老师说这个AdminListByKeyword是Page类型的,Page继承了ArrayList,所以可以直接赋值给List,这是多态
    List<Admin> AdminListByKeyword = adminMapper.selectAdminListByKeyword(keyword);
    //Page<Admin> AdminListByKeyword = adminMapper.selectAdminListByKeyword(keyword);
    
    // 3.封装到PagInfo对象中
    return new PageInfo<Admin>(AdminListByKeyword);
}
  • 注:int与Integer
  1. int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,故int不适合作为web层的表单数据的类型
  2. Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量
  3. 泛型支持Integer,并不支持int。如:ArrayList list = new ArrayList();你不能在泛型中写int
  4. Integer是int的包装类,int则是java的一种基本数据类型
  5. 声明为Integer的变量需要实例化,而声明为int的变量不需要实例化
  6. Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
上一篇:redis分页摘抄


下一篇:iOS获取当前屏幕的尺寸和分辨率