栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

SSH(Spring + Struts + Hibernate)框架带有注解的分页查询

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SSH(Spring + Struts + Hibernate)框架带有注解的分页查询

以下都是我自己个人的一个完整思路解析,仅供参考!!!

第一步:创建数据库,表

  (1)创建第一张表 名为:t_air_quality

DROp TABLE IF EXISTS `t_air_quality`;
CREATE TABLE `t_air_quality` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '记录编号',
  `district_id` int(11) DEFAULT NULL COMMENT '区域编号',
  `monitor_time` varchar(30) DEFAULT NULL COMMENT '监测时间',
  `pm10` int(10) DEFAULT NULL COMMENT 'pm10值',
  `pm2.5` int(10) DEFAULT NULL COMMENT 'pm2.5值',
  `monitoring_station` varchar(200) DEFAULT NULL COMMENT '监测站',
  `last_modify_time` varchar(30) DEFAULT NULL COMMENT '最后更改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8;

  (2)创建第二张表 名为:t_district_info

DROP TABLE IF EXISTS `t_district_info`;
CREATE TABLE `t_district_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '区域编号',
  `name` varchar(30) DEFAULT NULL COMMENT '区域名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

 注:表中需要添加几条数据,便于查询,分页查询越多数据越好

第二步:使用idea工具搭建配置文件

(1)创建一个新项目

(2)需要添加web文件

(3)引入ssh整合的全部jar包

(4)配置文件(需要放在一个资源文件下面)

        (4.1)web.xml配置



    
        struts2
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    
    
        struts2
        /*
    
    
        openSessionInViewFilter
        org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    
    
        openSessionInViewFilter
        /*
    
    
        org.springframework.web.context.ContextLoaderListener
    
    
        contextConfigLocation
        classpath:applicationContext.xml
    

         (4.2)applicationContext.xml配置(以下是全部xml的头部,整合过的配置文件)




	

	
		
	

	
		
	

	
		
	

	

        (4.3)hibernate.cfg.xml配置




	
		org.hibernate.dialect.MySQLDialect
		com.mysql.jdbc.Driver
		
		root
		123456
		true
		true
		
	

        (4.4)orm.hbm.xml配置





    
        
            
        
        
        
        
        
        
        
    
    
        
            
        
        
    

        (4.5)log4j.properties配置文件(可要可不要)

(5)src文件下的Package分类

 (6)编写业务代码

        (6.1)Entity(实体类)

                (6.1.1)AirQuality(对应数据库里面的t_air_quality表)

package com.ssh.crud.entity;

public class AirQuality {
    private int id;
    private int districtId;
    private String monitorTime;
    private int pm10;
    private int pm25;
    private String monitoringStation;
    private String lastModifyTime;
    private District district;

    public District getDistrict() {
        return district;
    }

    public void setDistrict(District district) {
        this.district = district;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getDistrictId() {
        return districtId;
    }

    public void setDistrictId(int districtId) {
        this.districtId = districtId;
    }

    public String getMonitorTime() {
        return monitorTime;
    }

    public void setMonitorTime(String monitorTime) {
        this.monitorTime = monitorTime;
    }

    public int getPm10() {
        return pm10;
    }

    public void setPm10(int pm10) {
        this.pm10 = pm10;
    }

    public int getPm25() {
        return pm25;
    }

    public void setPm25(int pm25) {
        this.pm25 = pm25;
    }

    public String getMonitoringStation() {
        return monitoringStation;
    }

    public void setMonitoringStation(String monitoringStation) {
        this.monitoringStation = monitoringStation;
    }

    public String getLastModifyTime() {
        return lastModifyTime;
    }

    public void setLastModifyTime(String lastModifyTime) {
        this.lastModifyTime = lastModifyTime;
    }
}

                (6.1.2)District(对应数据库里面的t_district_info表)

package com.ssh.crud.entity;

public class District {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

                (6.1.3)PagingParam(给到前端的数据)

package com.ssh.crud.entity.param;

public class PagingParam {
    private int indexPage = 1;      //当前页
    private int rows =5;           //当前行

    public int getIndexPage() {
        return indexPage;
    }

    public void setIndexPage(int indexPage) {
        this.indexPage = indexPage;
    }

    public int getRows() {
        return rows;
    }

    public void setRows(int rows) {
        this.rows = rows;
    }
}

                (6.1.4)PagingVo(前端给我们的数据)

package com.ssh.crud.entity.vo;

import java.util.List;

public class PagingVo {

    public PagingVo(int pageCount, int rows, int indexPage, List list){
        this.pageCount = pageCount;
        this.rows = rows;
        this.indexPage = indexPage;
        this.list = list;
    }

    public PagingVo(){

    }

    private int pageCount;      //总页数
    private int rows;           //总行数
    private int indexPage;      //当前页数
    private List list;          //全部数据

    public int getPageCount() {
        return pageCount;
    }

    public void setPageCount(int pageCount) {
        this.pageCount = pageCount;
    }

    public int getRows() {
        return rows;
    }

    public void setRows(int rows) {
        this.rows = rows;
    }

    public int getIndexPage() {
        return indexPage;
    }

    public void setIndexPage(int indexPage) {
        this.indexPage = indexPage;
    }

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }
}

        (6.2)Controller(控制层)

package com.ssh.crud.controller.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.ssh.crud.entity.param.PagingParam;
import com.ssh.crud.entity.vo.PagingVo;
import com.ssh.crud.service.PagingService;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
@Namespace("/")
@ParentPackage("struts-default")
public class PagingController extends ActionSupport implements ModelDriven {

    private PagingParam pagingParam = new PagingParam();

    private PagingVo pagingVo;

    public PagingVo getPagingVo() {
        return pagingVo;
    }

    @Autowired
    private PagingService pagingService;

    @Action(value = "paging",results = @Result(name = "success",location = "/index.jsp"))
    public String paging(){
        pagingVo = pagingService.paging(pagingParam);
        return SUCCESS;
    }

    @Override
    public PagingParam getModel() {
        return pagingParam;
    }
}

        分析:(1)以上使用的是注解的方式编写的,需要导入一个注解的包,不然会报错;

                   (2)使用的是模型驱动,也可以根据自己喜欢的方式来;     

(6.3)Service(业务层)

                (6.3.1)接口

package com.ssh.crud.service;

import com.ssh.crud.entity.param.PagingParam;
import com.ssh.crud.entity.vo.PagingVo;

public interface PagingService {
    PagingVo paging(PagingParam pagingParam);
}

                (6.3.2)实现类

package com.ssh.crud.service.impl;

import com.ssh.crud.dao.PagingDao;
import com.ssh.crud.entity.AirQuality;
import com.ssh.crud.entity.param.PagingParam;
import com.ssh.crud.entity.vo.PagingVo;
import com.ssh.crud.service.PagingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class PagingServiceImpl implements PagingService {

    @Autowired
    private PagingDao pagingDao;

    @Override
    public PagingVo paging(PagingParam pagingParam) {
        //1、先查询总行数(第一个优点:获取到总欧诺个多少页 第二个优点:获取到是否有数据,没有的话就没有必要执行后面的操作)
        int count = pagingDao.count(pagingParam);
        //判断总行数是否==0
        if (count == 0){
            return new PagingVo(1,count,pagingParam.getIndexPage(),null);
        }
        //2、根据总行数获取到总页数
        int pageCount = count%pagingParam.getRows() == 0 ? count/pagingParam.getRows() : count/pagingParam.getRows()+1;
        //3、获取到起始行数 = (等于当前页数-1)*每页行数
        int startIndex = (pagingParam.getIndexPage()-1)*pagingParam.getRows();
        //4、根据起始行数和查询多少行去查询到数据列表
        List airQualityList = pagingDao.paging(pagingParam,startIndex);
        //5、封装数据,返回给到controller
        return new PagingVo(pageCount,count,pagingParam.getIndexPage(),airQualityList);
    }
}

(6.4)Dao(与数据库交互)

        (6.4.1)接口

package com.ssh.crud.dao;

import com.ssh.crud.entity.AirQuality;
import com.ssh.crud.entity.param.PagingParam;

import java.util.List;

public interface PagingDao {
    int count(PagingParam pagingParam);

    List paging(PagingParam pagingParam, int startIndex);
}

            (6.4.2)实现类

package com.ssh.crud.dao.impl;

import com.ssh.crud.dao.PagingDao;
import com.ssh.crud.entity.AirQuality;
import com.ssh.crud.entity.District;
import com.ssh.crud.entity.param.PagingParam;
import org.hibernate.SQLQuery;
import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class PagingDaoImpl implements PagingDao {
    @Autowired
    private SessionFactory sessionFactory;
    @Autowired
    private HibernateTemplate hibernateTemplate;

    @Override
    public int count(PagingParam pagingParam) {
        StringBuffer stringBuffer = new StringBuffer("select count(0) from t_air_quality");

        Session currentSession = sessionFactory.getCurrentSession();
        SQLQuery sqlQuery = currentSession.createSQLQuery(stringBuffer.toString());
        Object object = sqlQuery.uniqueResult();
        if (object == null){
            return 0;
        }

        return Integer.valueOf(String.valueOf(object));
    }

    @Override
    public List paging(PagingParam pagingParam, int startIndex) {
        StringBuffer stringBuffer = new StringBuffer("select id,district_id,monitor_time,pm10,`pm2.5`,monitoring_station,last_modify_time from t_air_quality where 1=1");
        //(limit 查询起始行数,查询每页多少行)
        stringBuffer.append(" limit "+startIndex+","+pagingParam.getRows());

        Session currentSession = sessionFactory.getCurrentSession();
        SQLQuery sqlQuery = currentSession.createSQLQuery(stringBuffer.toString());
        sqlQuery.addEntity(AirQuality.class);
        List list = sqlQuery.list();
        for (int i=0;i 

(6.5)index.jsp(前端的分页展示)

)">上一页
第">页
,)">下一页
总共

         注释:分页按钮一般都是在table标签下面,body标签上面即可

(6.6)jquery,js代码


  

  

第三步:运行结果:

        分析:(1)不符合条件则会弹窗提示;

                   (2)数据是随便新增进去的;

                   (3)有些地方没注释,要是不理解可以评论或私信;

                   (4)以上只是一个较简单的分页查询;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/423153.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号