springmvc+mybatis 做分页sql 语句实例代码

下面我将为您详细讲解如何使用SpringMVC和MyBatis实现分页查询。

1. 创建分页类

在开始之前需要先创建一个分页类,用来存放分页查询所需的参数,如下:

public class PageInfo {

    // 当前页码,默认为第一页
    private int pageNum = 1;
    // 每页显示的记录数,默认为10
    private int pageSize = 10;

    // 省略了get/set方法
}

2. 编写Mapper.xml

在Mapper.xml中,我们需要使用limit关键字来实现分页查询,同时需要使用MyBatis提供的#{}方式来获取查询的参数,具体如下:

<select id="queryUsers" parameterType="map" resultMap="userMap">
    select * from user
    <where>
        <if test="name != null and name != ''">
            and name = #{name}
        </if>
    </where>
    order by id desc
    limit #{start}, #{pageSize}
</select>

在上述代码中,startpageSize为分页查询所需的参数,分别表示查询的起始位置和每页显示的记录数。其中,start的计算公式为(pageNum-1)*pageSize,代表从第几条记录开始查询。

3. 编写Mapper接口

接下来,在我们的Mapper接口中,定义如下方法:

public interface UserDao {

    List<User> queryUsers(@Param("name") String name, @Param("start") int start, @Param("pageSize") int pageSize);

}

这个方法接受name(用户姓名)、startpageSize三个参数,其中前两个参数的类型分别为Stringint类型。

4. 编写Service方法

在Service层中,我们需要调用Mapper接口中定义的方法来进行分页查询。我们可以将分页查询所需的参数封装到PageInfo对象中,并将其作为方法的参数进行传递。例如:

@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    public List<User> queryUsers(String name, PageInfo pageInfo) {
        int start = (pageInfo.getPageNum() - 1) * pageInfo.getPageSize();
        return userDao.queryUsers(name, start, pageInfo.getPageSize());
    }

}

5. 编写Controller方法

最后,在Controller中,我们将通过一个HTTP请求来触发分页查询。例如:

@RequestMapping("/users")
public String queryUsers(@RequestParam(required=false) String name, @RequestParam(required=false) Integer pageNum, Model model) {
    if (pageNum == null) {
        pageNum = 1;
    }
    PageInfo pageInfo = new PageInfo();
    pageInfo.setPageNum(pageNum);
    List<User> userList = userService.queryUsers(name, pageInfo);
    model.addAttribute("userList", userList);
    model.addAttribute("page", pageInfo);
    return "userList";
}

在上述代码中,我们从HTTP请求中获取用户姓名和当前页码,在使用PageInfo对象封装查询参数之后,调用UserServicequeryUsers方法来进行分页查询,并将查询结果和分页信息设置到Model中,再通过View返回给用户。

示例说明

接下来,我们使用一个例子来说明如何在SpringMVC和MyBatis中实现分页查询。

例如,我们需要实现一个用户管理功能,在进行用户查询时支持分页查询。我们需要在查询页面中显示用户列表和分页信息,并提供用户姓名和当前页码两个查询参数。

1. 创建分页类

首先,在Commons模块中,我们定义了一个名为PageInfo的分页类,如下:

public class PageInfo {

    // 当前页码,默认为第一页
    private int pageNum = 1;
    // 每页显示的记录数,默认为10
    private int pageSize = 10;

    // 省略了get/set方法
}

2. 编写Mapper.xml

接下来,在User模块中,我们编写Mapper.xml文件来实现指定条件的分页查询,如下:

<select id="queryUsers" parameterType="map" resultMap="userMap">
    select * from user
    <where>
        <if test="name != null and name != ''">
            and name = #{name}
        </if>
    </where>
    order by id desc
    limit #{start}, #{pageSize}
</select>

在上述代码中,我们使用#{start}#{pageSize}来获取计算后的查询参数,用于实现分页查询。

3. 编写Mapper接口

在User模块中,我们编写了一个名为UserDao的查询接口,其中定义了分页查询的方法,如下:

public interface UserDao {

    List<User> queryUsers(@Param("name") String name, @Param("start") int start, @Param("pageSize") int pageSize);

}

4. 编写Service方法

在User模块中,我们编写了一个名为UserService的Service层类,在这个类中,我们调用了UserDao中定义的方法来实现分页查询,如下:

@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    public List<User> queryUsers(String name, PageInfo pageInfo) {
        int start = (pageInfo.getPageNum() - 1) * pageInfo.getPageSize();
        return userDao.queryUsers(name, start, pageInfo.getPageSize());
    }

}

5. 编写Controller方法

在UserController中,我们编写了一个名为queryUsers的方法,这个方法接受了用户姓名和当前页码两个参数,用于调用Service层的方法来实现分页查询,如下:

@RequestMapping("/users")
public String queryUsers(@RequestParam(required=false) String name, @RequestParam(required=false) Integer pageNum, Model model) {
    if (pageNum == null) {
        pageNum = 1;
    }
    PageInfo pageInfo = new PageInfo();
    pageInfo.setPageNum(pageNum);
    List<User> userList = userService.queryUsers(name, pageInfo);
    model.addAttribute("userList", userList);
    model.addAttribute("page", pageInfo);
    return "userList";
}

在上述代码中,我们设置了默认的当前页码为1(当页面第一次加载时,没有传入当前页码参数pageNum),然后使用PageInfo对象封装查询参数,调用UserServicequeryUsers方法进行分页查询,最后将分页结果设置到Model中,返回给用户。

综上所述,通过以上步骤,我们可以在SpringMVC和MyBatis中实现分页查询。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springmvc+mybatis 做分页sql 语句实例代码 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • SQL 删除重复项

    当我们在SQL表中有重复记录时,我们可能需要删除这些重复项。以下是一些实用的SQL删除重复项的方法: 方法1:使用DISTINCT 使用SELECT DISTINCT语句选择所有非重复记录,并将它们插入到新表中,然后将旧表重命名并将新表重命名为旧表名称。如下所示: — 将DISTINCT查询结果插入到新表中 SELECT DISTINCT * INTO n…

    database 2023年3月27日
    00
  • Mysql多表操作方法讲解教程

    Mysql是一款强大的关系型数据库,可用于存储和管理大量数据。在现实的项目开发中,数据库往往由多张表组成,需要使用多种SQL语句来进行操作。本教程将详细讲解Mysql多表操作的方法,包括表的连接、联合查询、子查询等技术,帮助读者更好地进行数据库的开发和管理。 一、表的连接 内连接:根据两个表中的公共列进行匹配,只选择匹配项。 SELECT * FROM 表A…

    database 2023年5月22日
    00
  • MySQL数据库优化经验详谈(服务器普通配置)

    MySQL数据库优化经验详谈(服务器普通配置) 1. 使用存储引擎InnoDB InnoDB存储引擎支持事务处理,保证了数据的一致性和可靠性,具有更好的性能和灵活性。因此,建议在MySQL中使用InnoDB存储引擎。 2. 合理设置缓存 缓存对于MySQL服务器来说非常重要,合理设置缓存可以提升系统性能。可以通过修改my.cnf文件,设置query_cach…

    database 2023年5月19日
    00
  • 解决MySQL中的Slave延迟问题的基本教程

    针对MySQL中Slave延迟问题,以下是一些解决步骤的完整攻略: 1. 确认Slave延迟问题 当MySQL中的Slave延迟时,可以使用以下命令检查: show slave status \G 其中的“Seconds_Behind_Master”值就是Slave和Master之间的延迟时间。如果该值一直处于非常高的状态,那么就需要进行一些调整了。 2. …

    database 2023年5月19日
    00
  • SQL 生成连续的数值

    生成连续的数值,实际上就是生成一系列数字的序列。在SQL中,我们可以用以下两种方式生成一系列数字: 1. 使用MySQL中的sequence MySQL中并没有sequence这个东西,但可以通过存储过程的方式手动实现。下面是一个生成1~100连续数字的例子: DELIMITER // CREATE PROCEDURE GenerateSequence(IN…

    database 2023年3月27日
    00
  • Redis大key多key拆分实现方法解析

    Redis大key多key拆分实现方法解析 什么是Redis的大key? Redis中的key是用来标识唯一数据的名称。在Redis中,一个大key通常表示一个包含了大量相关数据的键值对的集合。如果大key很大,那么这个键值对会占用较多的内存和CPU资源,同时也会影响查询速度,导致Redis性能下降。 Redis大key的解决方案 我们可以将一个大的key拆…

    database 2023年5月22日
    00
  • MySQL中文乱码问题解决方案

    下面是“MySQL中文乱码问题解决方案”的完整攻略。 问题背景 在MySQL数据库中,如果采用默认的字符集(即latin1字符集),插入中文数据可能会出现乱码的情况。这是因为latin1字符集只能支持英文和部分西欧语言,并不能正确地存储和显示中文字符。 解决方案 要解决MySQL中文乱码的问题,需要采用以下两个步骤: 修改数据库和表的字符集 修改客户端连接M…

    database 2023年5月22日
    00
  • MySQL 中如何归档数据的实现方法

    MySQL 中归档数据有多种实现方法,这要根据具体的业务需求、数据量大小、访问频率等因素来选择。下面分别介绍两种常见的归档方法。 1. 利用分区表进行归档 分区表最大的特点是可以按照某个特定的列进行分区,使得数据更容易管理。利用分区表进行归档数据,可以按照时间为分区的方式。比如将一年内的数据存储在一个分区中,然后过一年后将该分区的数据归档到历史数据表中。可以…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部