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

本文介绍了J2EE通用分页的概念、特点,包括可复用性、灵活性和用户体验等方面,并详细讲解了PageBean封装的原因和优点。此外,还探讨了使用反射进行后台查询的方法以及JUnit4单元测试框架的特点和使用。
摘要由CSDN通过智能技术生成

在这里插入图片描述

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.总结

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值