Mybatis的分页功能可不可以通过数据库中的存储过程动态执行查询来帮助实现?
Spring、Mybatis、Mysql 通过存储过程实现分页博客一共有3部分
第一部分:存储过程动态分页之存储过程实现
第二部分:存储过程动态分页之Mybatis实现
第三部分:存储过程动态分页之实际工程demo
目前这篇讲的是
第三部分:存储过程动态分页之实际工程demo
项目介绍
eclipse,maven,spring4,mybatis3,c3p0,mysql
用到的mybatis插件:
MyBatis Velocity 链接:http://www.mybatis.org/velocity-scripting/index.html
Mybatis spring 链接:http://www.mybatis.org/spring/
MyBatis Generator 链接:http://www.mybatis.org/generator/
已上传至GitHub。
链接:
https://github.com/noobthinker/spring4_mybatis3_mysql_dynamic_paging
简单的在test库中建立了2个测试表
#user 表
CREATE TABLE `test`.`user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userName` varchar(50) DEFAULT NULL,
`userAge` int(11) DEFAULT NULL,
`userAddress` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
#fun_log 表
CREATE TABLE `test`.`fun_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`info` text DEFAULT NULL,
`user_id` bigint(20) unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8;
插入了一些数据
user表
@Test
public void testAddUser(){
for(int i=1;i<=100;i++){
User user = new User();
user.setId(i);
user.setUserAddress(i+"--this is a test b.");
user.setUserAge(10+i);
user.setUserName(i+"--xkorey");
userService.addUser(user);
System.out.println(user.getId());
}
}
user 表内容
id userName userAge userAddress
1, '1--xkorey', 11, '1--this is a test b.'
2, '2--xkorey', 12, '2--this is a test b.'
3, '3--xkorey', 13, '3--this is a test b.'
4, '4--xkorey', 14, '4--this is a test b.'
5, '5--xkorey', 15, '5--this is a test b.'
6, '6--xkorey', 16, '6--this is a test b.'
7, '7--xkorey', 17, '7--this is a test b.'
8, '8--xkorey', 18, '8--this is a test b.'
9, '9--xkorey', 19, '9--this is a test b.'
10, '10--xkorey', 20, '10--this is a test b.'
fun_log表内容
id info user_id
1, '1--log info', 1
2, '2--log info', 1
3, '3--log info', 1
4, '4--log info', 1
5, '5--log info', 1
6, '6--log info', 1
7, '7--log info', 1
8, '8--log info', 1
9, '9--log info', 1
10, '10--log info', 1
fun_log表
@Test
public void testAddFunLog(){
for(long i=1;i<=100;i++){
FunLog log = new FunLog();
log.setId(i);
log.setUser_id(i);
log.setInfo(i+"--log info");
logService.addLog(log);
}
}
userservice
public interface UserService {
/**
* 分页获取用户
* @param begin 开始位置
* @param size 获取数量
* @return
*/
public List<User> getUserByList(Integer begin,Integer size);
/**
* 分页获取用户log信息
* @param userId 用户id
* @param begin 开始位置
* @param size 获取数量
* @return
*/
public List<FunLog> getUserLogsList(Integer userId,Integer begin,Integer size);
}
Test 执行结果
获取3条user记录
@Test
public void testGetUserByPage(){
List<User> users = userService.getUserByList(0,3);
System.out.println(users.size());
for(User user:users){
System.out.println(user.getUserName());
}
}
log 打印出的Mybatis 执行日志
==> Preparing: CALL dynamic_paging('select * from user',?,?)
==> Parameters: 0(Integer), 3(Integer)
<== Columns: id, userName, userAge, userAddress
<== Row: 1, 1--xkorey, 11, 1--this is a test b.
<== Row: 2, 2--xkorey, 12, 2--this is a test b.
<== Row: 3, 3--xkorey, 13, 3--this is a test b.
<== Total: 3
<== Updates: 0
console 输出获取到的记录
3
1--xkorey
2--xkorey
3--xkorey
例如:获取user表从第4条开始,获取6条记录
修改Test类
#List<User> users = userService.getUserByList(0,3);
List<User> users = userService.getUserByList(4,6);
Mybatis 执行日志
==> Preparing: CALL dynamic_paging('select * from user',?,?)
==> Parameters: 4(Integer), 6(Integer)
<== Columns: id, userName, userAge, userAddress
<== Row: 5, 5--xkorey, 15, 5--this is a test b.
<== Row: 6, 6--xkorey, 16, 6--this is a test b.
<== Row: 7, 7--xkorey, 17, 7--this is a test b.
<== Row: 8, 8--xkorey, 18, 8--this is a test b.
<== Row: 9, 9--xkorey, 19, 9--this is a test b.
<== Row: 10, 10--xkorey, 20, 10--this is a test b.
<== Total: 6
<== Updates: 0
控制台输出
6
5--xkorey
6--xkorey
7--xkorey
8--xkorey
9--xkorey
10--xkorey
刚才演示了单个表的数据分页情况。
下面演示2个表数据分页情况。
先演示获取用户日志的sql 和执行情况
SELECT * FROM user,fun_log f where f.user_id=user.id and user.id=1;
执行结果
user.id userName userAge userAddress fun_log.id info fun_log.user_id
1, '1--xkorey', 11, '1--this is a test b.', 1, '1--log info', 1
1, '1--xkorey', 11, '1--this is a test b.', 2, '2--log info', 1
1, '1--xkorey', 11, '1--this is a test b.', 3, '3--log info', 1
1, '1--xkorey', 11, '1--this is a test b.', 4, '4--log info', 1
1, '1--xkorey', 11, '1--this is a test b.', 5, '5--log info', 1
1, '1--xkorey', 11, '1--this is a test b.', 6, '6--log info', 1
1, '1--xkorey', 11, '1--this is a test b.', 7, '7--log info', 1
1, '1--xkorey', 11, '1--this is a test b.', 8, '8--log info', 1
1, '1--xkorey', 11, '1--this is a test b.', 9, '9--log info', 1
1, '1--xkorey', 11, '1--this is a test b.', 10, '10--log info', 1
Test 方法
@Test
public void testGetUserLogsByPage(){
List<FunLog> logs = userService.getUserLogsList(1,0,2);
System.out.println(logs.size());
for(FunLog log:logs){
System.out.println(log.getInfo());
}
}
Mybatis 执行日志
==> Preparing: CALL dynamic_paging(?,?,?)
==> Parameters: SELECT * FROM user,fun_log f where f.user_id=user.id and user.id=1(String), 0(Integer), 2(Integer)
<== Columns: id, userName, userAge, userAddress, id, info, user_id
<== Row: 1, 1--xkorey, 11, 1--this is a test b., 1, <<BLOB>>, 1
<== Row: 1, 1--xkorey, 11, 1--this is a test b., 2, <<BLOB>>, 1
<== Total: 2
<== Updates: 0
console 输出
2
1--log info
2--log info
可以看到关键部分:
SELECT * FROM user,fun_log f where f.user_id=user.id and user.id=1(String), 0(Integer), 2(Integer)
是Mybatis实现动态查询的关键部分。
再次修改下测试类,获取从user id 是1 的log 第4条开始,获取6条记录
#List<FunLog> logs = userService.getUserLogsList(1,0,2);
List<FunLog> logs = userService.getUserLogsList(1,4,6);
Mybatis 执行日志
Preparing: CALL dynamic_paging(?,?,?)
==> Parameters: SELECT * FROM user,fun_log f where f.user_id=user.id and user.id=1(String), 4(Integer), 6(Integer)
<== Columns: id, userName, userAge, userAddress, id, info, user_id
<== Row: 1, 1--xkorey, 11, 1--this is a test b., 5, <<BLOB>>, 1
<== Row: 1, 1--xkorey, 11, 1--this is a test b., 6, <<BLOB>>, 1
<== Row: 1, 1--xkorey, 11, 1--this is a test b., 7, <<BLOB>>, 1
<== Row: 1, 1--xkorey, 11, 1--this is a test b., 8, <<BLOB>>, 1
<== Row: 1, 1--xkorey, 11, 1--this is a test b., 9, <<BLOB>>, 1
<== Row: 1, 1--xkorey, 11, 1--this is a test b., 10, <<BLOB>>, 1
<== Total: 6
<== Updates: 0
console输出
6
5--log info
6--log info
7--log info
8--log info
9--log info
10--log info
- 大小: 89.8 KB
分享到:
相关推荐
通过学习和分析这个demo,开发者可以深入理解Spring、SpringMVC和MyBatis的整合方式,以及如何利用Mybatis-Paginator实现高效便捷的分页功能。这对于提升Java Web开发技能和理解企业级应用架构具有重要意义。
总之,"springcloud集成mysql+mybatis+分页可运行demo"是一个实践性的项目,涵盖了SpringCloud服务治理、MyBatis数据库操作以及分页功能的实现,为开发者提供了完整的参考示例,有助于理解和掌握微服务架构中的数据...
本项目前端采用jQuery-bootstrap-bootstraptable,后台采用Spring-SpringMVC-Mybatis-Mysql架构。由bootstraptable的设置实现数据库查询分页,页面显示上采用分页显示。并实现了数据的增删改查的弹窗以及操作。是...
Spring Boot 是一个基于 Spring 框架的高度集成了多种常用技术的快速开发工具,它简化了新 Spring 应用的初始搭建以及开发过程。Mybatis-Plus 是 Mybatis 的一个扩展,提供了许多实用功能,如:自动 CRUD 操作、条件...
SpringBoot 集成 MyBatis 主要通过 `mybatis-spring-boot-starter` 依赖,配置 MyBatis 的核心配置文件和 mapper 映射文件,可以实现 SQL 语句与 Java 代码的解耦。 MySQL 是一个广泛使用的开源关系型数据库管理...
在这个"Java Spring Boot框架下mybatis +分页的简单接口demo"中,我们将深入探讨如何在Spring Boot项目中结合MyBatis实现数据库的分页查询,以及相关的配置和代码编写。 首先,MyBatis是一个优秀的持久层框架,它...
本示例"java-web-mysql 分页demo"提供了一个完整的Java Web应用程序,它结合了MySQL数据库进行分页查询,通过SQL文件hh_2018_08_29.sql导入数据,即可运行演示。 一、分页原理 分页是将大量数据分成若干页进行显示...
Spring Boot Starter MyBatis是Spring Boot官方提供的一个启动器,它简化了MyBatis在Spring Boot项目中的集成过程。通过添加依赖,开发者可以快速地搭建起一个基于MyBatis的数据访问层。 二、集成步骤 1. 添加依赖...
【MyBatis PageHelper分页插件Demo详解】 在Java Web开发中,数据查询往往涉及到大量的数据量,这时分页查询就显得尤为重要。MyBatis PageHelper插件是一款专为MyBatis设计的高效分页插件,它可以无缝对接Spring ...
本教程将详细讲解如何在Spring Boot项目中集成MyBatis,并利用分页插件实现高效的数据分页。 首先,我们需要在Spring Boot项目中引入MyBatis依赖。在`pom.xml`文件中添加以下Maven依赖: ```xml <groupId>org....
SpringBoot是基于Spring框架的轻量级开发框架,它旨在简化Spring应用的初始搭建以及开发过程。通过内置的Tomcat服务器和“约定优于配置”的原则,SpringBoot可以快速创建独立的、生产级别的基于Spring的应用程序。 ...
Spring Boot简化了Spring应用的初始化和配置,而MyBatis则是一个轻量级的持久层框架,它允许开发者通过简单的XML或注解来映射SQL语句。在开始之前,我们需要确保了解一些基本概念,如Maven、Java、SQL以及数据库连接...
PageHelper则是MyBatis的一个强大分页插件,它简化了在Java应用中实现分页查询的过程。 首先,我们需要在SpringBoot项目中引入MyBatis和PageHelper的相关依赖。在`pom.xml`文件中添加以下依赖: ```xml ...
总结:本项目"spring-boot-mybatis-mapper-demo"主要展示了如何在Spring Boot项目中整合MyBatis,利用Mapper接口进行数据库操作,并利用PageHelper插件实现自动分页功能。整个流程包括了添加相关依赖、配置数据库...
在Spring Boot项目中,整合MyBatis并利用MySQL实现主键UUID是一种常见的需求,尤其是在分布式系统中,为了保证数据的一致性和唯一性。UUID(Universally Unique Identifier)是一种全局唯一的标识符,它由128位数字...
在本项目"springboot集成mybatis的demo"中,我们将探讨如何将流行的Java框架Spring Boot与数据持久化库MyBatis结合使用。Spring Boot以其简洁的配置和开箱即用的功能,大大简化了Spring应用程序的开发流程,而...
本项目是基于Spring Boot创建的一个集成DEMO,主要涵盖了PageHelper分页插件、MyBatis与MySQL的一对多、多对多关系映射以及Swagger的API文档生成工具,旨在提供一个快速开发的基础模板。 首先,我们来讨论...
【标题】"mybatis-plus-demo.zip" 是一个包含使用MyBatis-Plus在Maven项目中操作MySQL数据库的示例项目。MyBatis-Plus是一个强大的MyBatis扩展,简化了对数据库的基本操作,如CRUD(创建、读取、更新、删除)以及...
### Spring Boot与MyBatis-Plus整合详解 #### 一、MyBatis-Plus概述 MyBatis-Plus(简称MP)是MyBatis的一个...通过上述步骤,我们可以在Spring Boot项目中顺利地集成并使用MyBatis-Plus,从而实现高效的数据库操作。
总的来说,"ssm.zip_DEMO_MYSQL_mysql ssm_ssm_分页"是一个很好的学习资源,它展示了如何在SSM框架下结合MySQL数据库实现分页功能。通过对这个DEMO的学习,开发者可以掌握SSM的集成方法以及PageHelper的使用技巧,...