基于SSM实现的简单分页功能

简单分页功能的实现效果图:


简单分页功能的实现思想:
1.后端根据前端传入的查询条件(班级号,页号,若页号为空,则设置页号为1),分页显示查询的结果
<!--根据班级号查询本班级的所有学生,并分页显示-->
< select id ="page" parameterType ="java.util.Map" resultMap ="TestStudentResult" >
SELECT student_id,student_name,student_class_id FROM student
< where >
student_class_id = #{classID}
</ where >
ORDER BY student_id limit #{page.dbIndex},#{page.dbNumber}
</ select >
2.首先根据班级号,查询出所有数据的总条数count,将总条数传入Page实体类计算出总页数
<!--总条数-->
< select id ="count" parameterType ="int" resultType ="int" >
SELECT count ( * ) FROM student
< where >
student_class_id = #{_parameter}
</ where >
</ select >

/**
* 根据总条数计算总页数
*/

if ( this . totalNumber % this . pageNumber > 0 ){
/**
* 如果总条数小于每页显示的条数,那么总页数为1
*/
if ( this . totalNumber < this . pageNumber ){
this . totalPage = 1 ;
}
else {
this . totalPage =( this . totalNumber / this . pageNumber )+ 1 ;
}

}
else { this . totalPage = this . totalNumber / this . pageNumber ; }

3.页号为空时,设置页号为以,从第一页开始显示,并计算limit的参数
/**
* 设置limit参数
*/
this . dbIndex = ( this . currentPage - 1 )* this . pageNumber ;
this . dbNumber = this . pageNumber ;
4.最后将Page实体类与查询到的list集合以Map的形式传给前端(关于前后端的交互和前端界面的编写可以参考我的博客)

以下列出了核心代码:
①数据库的班级表

②分页对应的实体类Page
public class Page {
//总条数
private int totalNumber;
//总页数
private int totalPage;
//当前页数
private int currentPage;

public int getTotalNumber() {
return totalNumber;
}

public void setTotalNumber(int totalNumber) {
this.totalNumber = totalNumber;
this.count();
}

public int getTotalPage() {
return totalPage;
}

public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}

//数据库中limit的参数,从第几条开始取
private int dbIndex;
//数据库中limit的参数,总共取几条
private int dbNumber;
//每页显示几条
private int pageNumber=2;

public void count(){
/**
* 根据总条数计算总页数
*/

if (this.totalNumber%this.pageNumber>0){
/**
* 如果总条数小于每页显示的条数,那么总页数为1
*/
if (this.totalNumber<this.pageNumber){
this.totalPage=1;
}
else{
this.totalPage=(this.totalNumber/this.pageNumber)+1;
}

}
else { this.totalPage=this.totalNumber/this.pageNumber; }

// 设置当前页数
// 总页数小于当前页数,应将当前页数设置为总页数
if(this.totalPage < this.currentPage) {
this.currentPage = this.totalPage;
}
// 当前页数小于1设置为1
if(this.currentPage < 1) {
this.currentPage = 1;
}


/**
* 设置limit参数
*/
this.dbIndex = (this.currentPage-1)*this.pageNumber;
this.dbNumber = this.pageNumber;
}

public int getCurrentPage() {
return currentPage;
}

public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
this.count();
}

public int getDbIndex() {
return dbIndex;
}

public void setDbIndex(int dbIndex) {
this.dbIndex = dbIndex;
}

public int getDbNumber() {
return dbNumber;
}

public void setDbNumber(int dbNumber) {
this.dbNumber = dbNumber;
}

public int getPageNumber() {
return pageNumber;
}

public void setPageNumber(int pageNumber) { this.pageNumber = pageNumber; }


public Page(int totalNumber, int totalPage, int currentPage, int dbIndex, int dbNumber, int pageNumber) {
this.totalNumber = totalNumber;
this.totalPage = totalPage;
this.currentPage = currentPage;
this.dbIndex = dbIndex;
this.dbNumber = dbNumber;
this.pageNumber = pageNumber;
}

public Page() {
}
}
③mybatis的mapper配置文件
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

<mapper namespace="algorithm.offer.dao.idao.IStudent">

<resultMap type="algorithm.offer.pojo.TestStudent" id="TestStudentResult">
<id column="student_id" jdbcType="INTEGER" property="studentId"/>
<result column="student_name" jdbcType="VARCHAR" property="studentName"/>
<result column="student_class_id" jdbcType="INTEGER" property="studentClassId"/>
</resultMap>

<!--分页的简单实现-->
<!--总条数-->
<select id="count" parameterType="int" resultType="int">
SELECT count(*) FROM student
<where>
student_class_id = #{_parameter}
</where>
</select>

<!--根据班级号查询本班级的所有学生,并分页显示-->
<select id="page" parameterType="java.util.Map" resultMap="TestStudentResult">
SELECT student_id,student_name,student_class_id FROM student
<where>
student_class_id = #{classID}
</where>
ORDER BY student_id limit #{page.dbIndex},#{page.dbNumber}
</select>

</mapper>
④DAO层接口(面向接口编程)
public interface IStudent {
int count(int classID);
List<TestStudent> page(Map<String,Object> map);
}
⑤service层的接口
public interface IStudentService {
Map<String, Object> showStudentByPage(String classID, String pageNumber);
int studentTotalCount(String classID);

}
service层实现类
@Service
public class StudentServiceImp implements IStudentService{
DBAccess dbAccess = new DBAccess();
SqlSession sqlSession = null ;

/**
* 分页显示
*/

/**
* 根据当前页数显示相应数据
* 设置了数据库的limit参数
* @return
*/
@Override
public Map<String, Object> showStudentByPage(String classID,String pageNumber){
try {
//查询数据的总条数
int totalNumber = studentTotalCount(classID);
Page page = new Page();
//计算出了总页数
page.setTotalNumber(totalNumber);
//计算limit参数
//如果当前页数为空,当前页数为1
if (pageNumber== null || "" .equals(pageNumber.trim())){page.setCurrentPage( 1 );}
//否则用传入的数据
else {page.setCurrentPage(Integer. valueOf (pageNumber));}

//获取sqlSession
sqlSession = dbAccess .getSqlSession();
//产生动态代理类
IStudent iStudent = sqlSession .getMapper(IStudent. class );


//page实体类与班级号的map,提供给DAO层使用
Map<String,Object> map = new HashMap<>();
map.put( "page" ,page);
map.put( "classID" ,classID);
List<TestStudent> testStudents =iStudent.page(map);
//page实体类与查询出的学生list集合的map,返回给前端
Map<String,Object> mapPageANDTeestStudents = new HashMap<>();
mapPageANDTeestStudents.put( "page" ,page);
mapPageANDTeestStudents.put( "testStudents" ,testStudents);

return mapPageANDTeestStudents;
} catch (IOException e) {
e.printStackTrace();
}
return null ;
}

@Override
public int studentTotalCount(String classID) {
try {
sqlSession = dbAccess .getSqlSession();
IStudent iStudent = sqlSession .getMapper(IStudent. class );
int intClassID = Integer. valueOf (classID);
return iStudent.count(intClassID);
} catch (IOException e) {
e.printStackTrace();
}
return 0 ;
}
}
⑥controller层
@Controller
@RequestMapping("/student")
public class StudentController {
@Autowired
private IStudentService iStudentService;
@RequestMapping(value = "/pageNumber")
@ResponseBody
public Map<String, Object> showStudentByPageNumber(String classID, String pageNumber){
return iStudentService.showStudentByPage(classID,pageNumber);
}
}



猜你喜欢

转载自blog.csdn.net/weixin_42228338/article/details/80508852
今日推荐