java工厂模式应用——多数据库分页实现(结合Spring)

来源:互联网 发布:mac安装的软件在哪 编辑:程序博客网 时间:2024/06/01 09:38

1.由于数据库的不同,每种数据库实现的分页的SQL语句不同,其实方法是一样的,这样我们可以抽象出数据库查询分页的方法接口,如下:

package com.hibernate.pageService;import java.util.List;public interface PageInterface {// 获取记录条数public int allRecordsNum();// 获取总记录的页数public int allPagesNum();// 上一页public List beforePageRecs(int currentPageNum);// 下一页public List nextPageRecs(int currentPageNum);// 第一页public List firstPageRecs();// 最后一页public List lastPageRecs(int lastPageNum);// 当前页记录public List currentPageRecs();}


2.创建分页接口的实现类,比如我在这里创建了Mysql和Oracle的两种数据库分页的类。

MySql:(在这里就不具体实现分页的功能了,只是分享我的实现想法)

package com.hibernate.pageService.impl;import java.util.List;import com.hibernate.pageService.PageInterface;public class MySqlPageImpl implements PageInterface {public int allRecordsNum() {System.out.println("MySql数据库");return 0;}public int allPagesNum() {return 0;}public List beforePageRecs(int currentPageNum) {return null;}public List nextPageRecs(int currentPageNum) {return null;}public List firstPageRecs() {return null;}public List lastPageRecs(int lastPageNum) {return null;}public List currentPageRecs() {return null;}}
Oracle:(在这里就不具体实现分页的功能了,只是分享我的实现想法)

package com.hibernate.pageService.impl;import java.util.List;import com.hibernate.pageService.PageInterface;public class OraclePageImpl implements PageInterface {public int allRecordsNum() {System.out.println("Oracle数据库");return 0;}public int allPagesNum() {return 0;}public List beforePageRecs(int currentPageNum) {return null;}public List nextPageRecs(int currentPageNum) {return null;}public List firstPageRecs() {return null;}public List lastPageRecs(int lastPageNum) {return null;}public List currentPageRecs() {return null;}}
3.创建工厂类,用于生成分页接口的实现类。

package com.hibernate.pageService;public class PageFactory {private PageInterface pageInterface;public PageFactory(PageInterface pageInterface) {this.pageInterface = pageInterface;}public PageInterface returnPageImpl() {return pageInterface;}}

4.创建测试服务类。
public class PageService {private PageFactory pageFactory;public void pageTest() {PageInterface pageInterface = pageFactory.returnPageImpl();pageInterface.allRecordsNum();}public void setPageFactory(PageFactory pageFactory) {this.pageFactory = pageFactory;}}

5.将上面的各自关系注入到Spring中,applicationContext.xml文件的配置如下。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!-- 分页工厂注入 --><!-- START --><bean id="mysqlPage" class="com.hibernate.pageService.impl.MySqlPageImpl" /><bean id="oraclePage" class="com.hibernate.pageService.impl.OraclePageImpl" /><bean id="pageFactory" class="com.hibernate.pageService.PageFactory"><constructor-arg ref="oraclePage" /></bean><bean id="pageService" class="com.hibernate.pageService.PageService"><property name="pageFactory" ref="pageFactory" /></bean><!-- END --></beans>


6.编写测试类。


package com.tool;import org.springframework.beans.factory.BeanFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringBeanFactory {public Object createInstanse(String beanId) {BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext.xml");Object obj = beanFactory.getBean(beanId);return obj;}}


// /测试类class mainClass {public static void main(String[] args) {PageService pageService = (PageService) new SpringBeanFactory().createInstanse("pageService");pageService.pageTest();}}
测试类输出为:Oracle数据库