通用分页目录
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 + "]";
}
}
4.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>();
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;
}
}
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);
}
}
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();
}
}
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);
}
}
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);
}
}
7.总结
通用分页能够提高数据的展示效率,改善用户体验。同时,在大数据量的情况下,还能帮助提升系统的稳定性和性能。在实际应用中,可以采用第三方框架或手写通用分页工具类进行分页实现。需要注意的是,在实现分页时需要考虑数据的安全性问题,避免信息泄露和数据损坏等情况的发生。