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