效果
实现
前文关于SSM的整合配置
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/85052628
实现分页类
在com.badao.util下新建Page.java用于存放分页信息
package com.badao.util;
public class Page {
int start =0;//开始位置
int count = 5;//每页的个数
int last =0;//最后一页的位置
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public int getLast() {
return last;
}
public void setLast(int last) {
this.last = last;
}
//通过总数total和每页的个数计算出最后一页的位置
public void caculateLast(int total) {
// 假设总数是50,是能够被5整除的,那么最后一页的开始就是45
if (0 == total % count)
last = total - count;
// 假设总数是51,不能够被5整除的,那么最后一页的开始就是50
else
last = total - total % count;
}
}
修改mapper文件
打开com.badao.mapper下的UserMapper.xml
修改selectAllUser的select语句
<select id="selectAllUser" resultType="User">
select *from user <BR> <iftest="start!=null and count!=null">
limit #{start},#{count}
</if>
</select>
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)。
新增查询记录数的select语句
<select id="total" resultType="int">
select count(*) from user
</select>
修改UserMapper.java
修改并新增方法
public List<User> selectAllUser(Page page);
public int total();
修改service
增加total用于获取所有
增加selectAllUser(Page page),根据分页来查询数据
package com.badao.service;
import java.util.List;
import com.badao.pojo.User;
import com.badao.util.Page;
public interface UserService {
List<User> selectAllUser();
List<User> selectAllUser(Page page);
int total();
}
修改serviceImpl
实现上面新增的方法。
package com.badao.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.badao.mapper.UserMapper;
import com.badao.pojo.User;
import com.badao.service.UserService;
import com.badao.util.Page;
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserMapper userMapper;
public List<User> selectAllUser() {
// TODO Auto-generated method stub
return userMapper.selectAllUser();
}
@Override
public List<User> selectAllUser(Page page) {
// TODO Auto-generated method stub
return userMapper.selectAllUser(page);
}
@Override
public int total() {
// TODO Auto-generated method stub
return userMapper.total();
}
}
修改Controller
package com.badao.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.badao.pojo.User;
import com.badao.service.UserService;
import com.badao.util.Page;
// 告诉spring mvc这是一个控制器类
@Controller
@RequestMapping("")
public class UserController {
@Autowired
UserService userService;
@RequestMapping("listUser")
public ModelAndView listUser(Page page){
ModelAndView mav = new ModelAndView();
//根据分页对象,进行查询获取查询对象集合
List<User> cs= userService.selectAllUser(page);
int total = userService.total();
//根据总数,计算最后一页的信息
page.caculateLast(total);
// 放入转发参数
mav.addObject("userList", cs);
// 放入jsp路径
mav.setViewName("listUser");
return mav;
}
}
修改listUser.jsp
<%
pageContext.setAttribute("APP_PATH", request.getContextPath());
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询所有用户</title>
</head>
<script type="text/javascript" src="${APP_PATH }/static/js/jquery-1.12.4.min.js"></script>
<link href="${APP_PATH }/static/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
<script src="${APP_PATH }/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
<body>
<table align='center' border='1' cellspacing='0' class="table table-bordered"
<th >
<td>id</td>
<td>name</td>
<td>age</td>
</th>
<c:forEach items="${userList}" var="u">
<tr class="active">
<td >${u.id}</td>
<td>${u.name}</td>
<td>${u.age}</td>
</tr>
</c:forEach>
</table>
<div style="text-align:center"><BR> <ahref="?start= 0">首 页</a><BR> <ahref="?start=${page.start-page.count}">上一页</a>< BR> <ahref="?start=${page.start+page.count}">下一页</a><BR> <ahref="?start=${page.last}">末 页</a>
</div>
</body>
</html>
注意:
a标签的href属性为什么是直接加?
如果?前什么都没有,那他就再次访问对应当前地址栏所对应的方法并且拼接上后面的参数。
单元测试向数据库插入数据
com.badao.test包下新建InsertTest.java
package com.badao.test;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import com.badao.mapper.UserMapper;
import com.badao.pojo.User;
import com.badao.util.Page;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;//使用junit4时报错导这个包
@RunWith(SpringJUnit4ClassRunner.class)//使用junit4进行测试
@ContextConfiguration("classpath:applicationContext.xml")//加载配置文件
public class InsertTest {
@Autowired//自动注入
private UserMapper userMapper;
@Test//标明是测试方法
@Rollback(false) //标明使用完此方法后事务不回滚,true时为回滚
public void testAdd() {
for (int i = 0; i < 100; i++) {
User user = new User();
user.setName("user"+i);
userMapper.addUser(user);
}
}
@Test
public void testTotal() {
int total = userMapper.total();
System.out.println(total);
}
@Test
public void testList() {
Page p = new Page();
p.setStart(2);
p.setCount(3);
List<User> cs=userMapper.selectAllUser(p);
for (User c : cs) {
System.out.println(c.getName());
}
}
}
具体参照:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/85112004
源码下载
https://download.csdn.net/download/badao_liumang_qizhi/10863507