J2EE 通用分页01(超详细解析)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: J2EE 通用分页01(超详细解析)

1.什么是通用分页?它是什么?能做什么?

J2EE(Java 2 Platform, Enterprise Edition)是一种基于Java语言的企业级应用开发平台,该平台提供了完整的分布式计算环境和一系列的API,以便于实现各种企业级应用。通用分页是J2EE中经常用到的功能之一,用于展示分页数据。

J2EE通用分页通常采用的是MVC(Model-View-Controller)架构模式,其中Model层负责数据获取和处理,View层负责数据展示,Controller层负责协调Model和View之间的交互。通用分页的数据获取和处理主要在Model层中实现,通常需要查询数据库来获得需要分页展示的数据。

在实现J2EE通用分页时,常用的框架是Hibernate和Spring Framework。Hibernate是一个开源的对象关系映射(ORM)框架,它提供了一种将Java对象映射到关系型数据库中的方式,可以自动化地处理数据库相关操作。Spring Framework是一个开源的全栈企业级应用开发框架,它提供了一系列的工具和API,以便于开发人员实现各种企业级应用需求。

通用分页的展示和交互一般在View层中实现,常用的技术有JSP(JavaServerPage)、EL(Expression Language)、JSTL(JSP Standard Tag Library)、Bootstrap等。JSP是一种动态网页技术,可以在网页中嵌入Java代码,EL和JSTL则提供了一些常用的标记和表达式以简化网页编程。Bootstrap是一个流行的前端框架,可以提供一些易用的组件和样式以提高用户体验。

2.通用分页的特点有哪些?

2.1 可复用性高

J2EE通用分页是基于Java EE技术的通用功能,可以被应用到各种企业级应用中。开发人员可以在不同的应用中重复使用J2EE通用分页,减少了开发成本和时间。

2.2 灵活性好

J2EE通用分页可以根据不同的需求进行定制化开发。开发人员可以根据页面布局、数据量、用户需求等因素来设置分页参数,例如页数、每页显示的记录条数等。

2.3 实现简单

J2EE通用分页使用MVC模式,将数据获取、数据处理、数据展示等分离开来,开发人员只需要关注业务逻辑的实现即可。同时,使用Hibernate等ORM框架可以大大简化数据库操作,让分页实现更为简单。

2.4 用户体验好

J2EE通用分页可以使用一些交互效果和前端框架,例如Bootstrap等,让数据的展示更为美观、易用,提高了用户体验。

2.5 可扩展性强

J2EE通用分页可以根据业务需求进行扩展。例如,在数据量较大时,通常需要使用异步加载等技术来提高性能,可以通过定制化开发来实现。

2.6 对性能有一定要求

J2EE通用分页通常需要查询数据库来获得需要分页展示的数据,因此对数据库的性能有一定要求。同时,在分页过程中也需要考虑首页、尾页等情况,避免出现数据异常。

3.J2EE 通用分页的 pageBean为什么要封装?封装的优点有哪些?

3.1.1 简化参数传递

在进行数据分页时,需要传递多个参数,如当前页码、每页记录数、总记录数等等。将这些参数封装到 PageBean 中,可以方便参数传递和管理。

3.1.2 简化代码编写

将分页的数据与分页参数封装在 PageBean 中,可以减少程序员对分页逻辑的编写,提升代码的简洁度和可维护性。

3.1.3 提高代码可复用性

一般情况下,数据分页是一个被多个模块或页面所使用的功能,将分页逻辑封装在 PageBean 中,各个模块只需要调用对应的接口即可,提高代码可复用性。

3.1.4 方便扩展

PageBean 封装的数据类型和结构比较灵活,可以根据不同需求进行扩展,例如支持查询条件、排序等。

3.1.5 提高开发效率

使用 PageBean 进行数据分页,可以让开发人员更加专注于业务逻辑的实现,提高开发效率。

3.2.1方便管理数据

PageBean将所有与分页有关的参数封装到一个对象中,方便进行管理和维护。这个对象中会保存分页信息、分页数据等一些必要的参数,而且代码逻辑清晰,易于理解。

3.2.2封住了分页逻辑

封装Pagebean的好处是,将数据和分页逻辑打包在一起。开发人员不需要了解分页的具体实现细节,只需要操作PageBean提供的接口即可。这样能大大提高代码复用性,并使系统易于维护。

3.3.3方便展示数据

PageBean中不仅保存了分页相关的参数,还可以保存需要展示的数据集合。在前端页面展示数据时,只需要从PageBean中获取数据即可。这种方式可以使展示层与业务层直接的调用更加便捷。

3.3.4增加可扩展性

PageBean可以实现接口Serializable,将对象序列化后传输给其他系统或进程,这就增加了系统的可扩展性方便了业务拓展。

4.反射通用后台查询方法是怎么实现的?运用的哪些类?

4.0 Book类

package com.yuan.entity;
public class Book {
  private Integer bid;
  private String bname;
  private Float price;
  public Integer getBid() {
    return bid;
  }
  public void setBid(Integer bid) {
    this.bid = bid;
  }
  public String getBname() {
    return bname;
  }
  public void setBname(String bname) {
    this.bname = bname;
  }
  public Float getPrice() {
    return price;
  }
  public void setPrice(Float price) {
    this.price = price;
  }
  public Book() {
    // TODO Auto-generated constructor stub
  }
  public Book(Integer bid, String bname, Float price) {
    super();
    this.bid = bid;
    this.bname = bname;
    this.price = price;
  }
  @Override
  public String toString() {
    return "Book [bid=" + bid + ", bname=" + bname + ", price=" + price + "]";
  }
}
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14
• 15
• 16
• 17
• 18
• 19
• 20
• 21
• 22
• 23
• 24
• 25
• 26
• 27
• 28
• 29
• 30
• 31
• 32
• 33
• 34
• 35
• 36
• 37
• 38
• 39
• 40
• 41
• 42
• 43

4.1 BaseDao查询类的方法(反射)

它是一个公用的类
• 1
package com.yuan.utils;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class BaseDao<T> {
  public List<T> queryAll(Class clz,PageBean pagebean,String sql) throws Exception{
    List<T> list = new ArrayList<T>();
    Connectionconn =  DBAccess.getConnection();
    PreparedStatement  ps = conn.prepareStatement(countSQL);
    ResultSet rs = ps.executeQuery();
    while(rs.next()) {
      T t = (T) clz.newInstance();//实例化
      Field[] fields = clz.getDeclaredFields();//反射拿到一个数组
      for (Field field : fields) {
        field.setAccessible(true);
        field.set(t, rs.getObject(field.getName()));//将里面的每一个属性进行赋值
      }
      list.add(t);
    }
    return list;
  } 
}
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14
• 15
• 16
• 17
• 18
• 19
• 20
• 21
• 22
• 23
• 24
• 25
• 26
• 27
• 28
• 29
• 30
• 31
• 32

4.2BookDao查询类的方法(反射)

package com.yuan.dao;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.yuan.entity.Book;
import com.yuan.utils.BaseDao;
import com.yuan.utils.PageBean;
import com.yuan.utils.StringUtils;
public class BookDao extends BaseDao<Book>{
  public List<Book> queryAll(Book book,PageBean pagebean) throws Exception{
    String sql = "select * from t_mvc_book where 1=1";
    String bname = book.getBname();
    if(StringUtils.isNotBlank(bname)) {
      sql += " and bname like '%"+bname+"%'";
    }
    return super.queryAll(book.getClass(), pagebean, sql);
  };
  public static void main(String[] args) throws Exception {
    List<Book> list = new BookDao().queryAll(new Book(1, "圣墟", 12f), new PageBean());
    System.out.println(list);
  }
}
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14
• 15
• 16
• 17
• 18
• 19
• 20
• 21
• 22
• 23
• 24
• 25
• 26
• 27
• 28

4.3运行的打印结果(反射)

5.后台通用后台查询方法是怎么实现的?运用的哪些类?

5.1 BaseDao查询类的方法(后台)

package com.yuan.utils;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class BaseDao<T> {
  public List<T> queryAll(Class clz,PageBean pagebean,String sql) throws Exception{
    List<T> list = new ArrayList<T>();
    Connection conn = null;
    PreparedStatement ps =null;
    ResultSet rs =null;
    if(pagebean!=null && pagebean.isPagination()) {
      String countSQL = getCountSQL(sql);
       conn =  DBAccess.getConnection();
       ps = conn.prepareStatement(countSQL);
       rs = ps.executeQuery();
       if(rs.next()) {
         pagebean.setTotal(rs.getObject("n").toString());
       }   
      String pageSQL = getPageSQL(sql,pagebean);
       conn =  DBAccess.getConnection();
       ps = conn.prepareStatement(pageSQL);
       rs = ps.executeQuery();
    }else {
       conn =  DBAccess.getConnection();
       ps = conn.prepareStatement(sql);
       rs = ps.executeQuery();
    } 
    while(rs.next()) {
      T t = (T) clz.newInstance();//实例化
      Field[] fields = clz.getDeclaredFields();//反射拿到一个数组
      for (Field field : fields) {
        field.setAccessible(true);
        field.set(t, rs.getObject(field.getName()));//将里面的每一个属性进行赋值
      }
      list.add(t);
    }
    return list;
  }
  private String getCountSQL(String sql) {
    return "select count(1) as n from ("+sql+") t";
  }
  private String getPageSQL(String sql, PageBean pagebean) {
    return sql+=" limit "+pagebean.getStartIndex()+","+pagebean.getRows();
  } 
}
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14
• 15
• 16
• 17
• 18
• 19
• 20
• 21
• 22
• 23
• 24
• 25
• 26
• 27
• 28
• 29
• 30
• 31
• 32
• 33
• 34
• 35
• 36
• 37
• 38
• 39
• 40
• 41
• 42
• 43
• 44
• 45
• 46
• 47
• 48
• 49
• 50
• 51
• 52
• 53
• 54
• 55

5.2 BookDao查询类的方法(后台)

package com.yuan.dao;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.yuan.entity.Book;
import com.yuan.utils.BaseDao;
import com.yuan.utils.PageBean;
import com.yuan.utils.StringUtils;
public class BookDao extends BaseDao<Book>{
  public List<Book> queryAll(Book book,PageBean pagebean) throws Exception{
    String sql = "select * from t_mvc_book where 1=1";
    String bname = book.getBname();
    if(StringUtils.isNotBlank(bname)) {
      sql += " and bname like '%"+bname+"%'";
    }
    return super.queryAll(book.getClass(), pagebean, sql);
  };
  public static void main(String[] args) throws Exception {
    List<Book> list = new BookDao().queryAll(new Book(1, "圣墟", 12f), new PageBean());
    System.out.println(list);
  }
}
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14
• 15
• 16
• 17
• 18
• 19
• 20
• 21
• 22
• 23
• 24
• 25
• 26
• 27
• 28
• 29

5.3运行的打印结果(后台)

6.junit4是什么?junit4的特点有哪些?怎么去使用junit4?

6.1 junit4是什么?

6.1.1 JUnit4 是一个 Java 编程语言的单元测试框架,它是JUnit3 的升级版。JUnit4 提供了一些新的注释(Annotation),并更加灵活、强大和易于使用。JUnit4 支持注释、运行测试、展示测试结果、测试异常和性能等。

6.2 以下是JUnit4的几个主要特点:

  • 6.2.1: 支持注释:JUnit4 引入了多个新的注释,如@BeforeClass、@AfterClass、@Before 和 @After等,可以更加方便的管理测试的前置条件和后置条件,也减少了测试代码的重复。
  • 6.2.2: 灵活的测试运行:JUnit4 允许通过注释来执行测试用例,例如 @Ignore、@RunWith和@Suite 等,使得测试用例的运行更加灵活。
  • 6.2.3: 支持断言:JUnit4 将断言放入了一个独立的类库中,提供了大量的内置断言方法,如 assertEquals(), assertNotNull(), assertSame()等,使得编写测试用例更加简单、灵活和容易。
  • 6.2.4 : 显示测试结果:JUnit4 支持多种测试结果展示方式,如文本显示、HTML 报表和 XML 报表等,使得测试结果的展示更加直观和易于分析。
  • 6.2.5 强大的扩展性:JUnit4 提供了丰富的扩展点,支持自定义测试运行器和监听器,可以通过实现这些扩展点来扩展测试框架的功能和特性。

6.3 junit4的使用

@Test 
  public void text1() throws Exception {
    PageBean pageBean = new PageBean();
    List<Book> list = new BookDao().queryAll(new Book(1, "圣墟", 12f), pageBean);
    for (Book book : list) {
      System.out.println(book);
    }
  }
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8

7.总结

通用分页能够提高数据的展示效率,改善用户体验。同时,在大数据量的情况下,还能帮助提升系统的稳定性和性能。在实际应用中,可以采用第三方框架或手写通用分页工具类进行分页实现。需要注意的是,在实现分页时需要考虑数据的安全性问题,避免信息泄露和数据损坏等情况的发生。


相关文章
|
XML 存储 开发框架
J2EE之XML解析(超详细)
J2EE之XML解析(超详细)
74 0
|
XML 存储 开发框架
J2EE XML最详细解析
J2EE XML最详细解析
57 0
|
安全 Java
J2EE&XML解析&dom4j的使用
J2EE&XML解析&dom4j的使用
|
5月前
|
存储 数据库 开发者
Elasticsearch中的三种分页策略深度解析:原理、使用及对比
Elasticsearch中的三种分页策略深度解析:原理、使用及对比
|
开发框架 Java
J2EE(反射解析)
J2EE(反射解析)
53 0
|
6月前
|
SQL Java 数据库连接
Javaweb之SpringBootWeb案例分页插件的详细解析
Javaweb之SpringBootWeb案例分页插件的详细解析
26 0
|
6月前
|
JavaScript
Javaweb之Vue组件库Element案例分页工具栏的详细解析
4.4.3.5.3 分页工具栏 分页条我们之前做过,所以我们直接找到之前的案例,复制即可,代码如下: 其中template模块代码如下:
96 0
|
XML 开发框架 JavaScript
J2EE(XML的解析)
J2EE(XML的解析)
60 0
|
XML 数据采集 开发框架
J2EE基础之XML解析
J2EE基础之XML解析
46 0
|
关系型数据库 MySQL 索引
Mysql建表3大约束+条件查询、分页语法+难点聚合案例解析
Mysql建表3大约束+条件查询、分页语法+难点聚合案例解析
176 0

推荐镜像

更多
下一篇
无影云桌面