>  기사  >  백엔드 개발  >  MVC 프레임워크가 데이터베이스 데이터의 페이징 쿼리를 구현하는 방법

MVC 프레임워크가 데이터베이스 데이터의 페이징 쿼리를 구현하는 방법

青灯夜游
青灯夜游앞으로
2018-10-20 17:38:343804검색

이 글의 내용은 MVC 프레임워크가 데이터베이스 데이터의 페이징 쿼리를 구현하는 방법을 소개하는 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

이 글은 MVC 모드를 사용하여 페이징 쿼리를 구현한 것입니다. 블로그에는 포괄적이고 자세한 설명이 많이 있습니다. 먼저, 실행 원리를 이해하기 위한 간단한 다이어그램이 있습니다. MVC 프레임워크:


MVC 프레임워크가 데이터베이스 데이터의 페이징 쿼리를 구현하는 방법

MVC 패턴(3계층 아키텍처 패턴)

(모델-뷰-컨트롤러)은 소프트웨어 시스템을 세 가지 기본 부분으로 나누는 소프트웨어 엔지니어링의 소프트웨어 아키텍처 패턴입니다. 모델) 및 뷰(View) 및 컨트롤러.

MVC 패턴은 1974년 Trygve Reenskaug가 처음 제안했습니다. 1980년대 Xerox PARC가 프로그래밍 언어 Smalltalk를 위해 발명한 소프트웨어 디자인 패턴입니다. MVC 패턴의 목적은 동적 프로그래밍 디자인을 구현하고, 프로그램의 후속 수정 및 확장을 단순화하며, 프로그램의 특정 부분을 재사용할 수 있도록 하는 것입니다. 또한 이 모드는 복잡성을 단순화하여 프로그램 구조를 보다 직관적으로 만듭니다. 소프트웨어 시스템은 기본 부분을 분리하고 각 기본 부분에 적절한 기능을 제공합니다. 전문가는 자신의 전문 지식에 따라 그룹화될 수 있습니다.

(컨트롤러) - 요청 전달 및 처리를 담당합니다.

(보기) - 인터페이스 디자이너는 그래픽 인터페이스 디자인을 수행합니다.

(모델) - 프로그래머는 프로그램이 가져야 할 기능(알고리즘 구현 등)을 작성하고, 데이터베이스 전문가는 데이터 관리 및 데이터베이스 설계(특정 기능 구현 가능)를 수행합니다.

MVC 작동 방식

MVC는 애플리케이션의 입력, 처리 및 출력을 분리하도록 하는 디자인 패턴입니다. MVC를 사용하는 애플리케이션은 모델, 뷰, 컨트롤러의 세 가지 핵심 구성 요소로 나뉩니다. 그들은 각자 자신의 업무를 처리합니다.

View
  뷰는 사용자가 보고 상호 작용하는 인터페이스입니다. 기존 웹 애플리케이션의 경우 뷰는 HTML 요소로 구성된 인터페이스입니다. 새로운 스타일의 웹 애플리케이션에서는 HTML이 여전히 뷰에서 중요한 역할을 하지만 Macromedia Flash 및 일부 마크업 언어를 비롯한 일부 새로운 기술이 끊임없이 등장했습니다. ​​및 XHTML, XML/XSL, WML 등과 같은 웹 서비스. 애플리케이션의 인터페이스를 처리하는 방법이 점점 더 어려워지고 있습니다. MVC의 가장 큰 장점 중 하나는 애플리케이션에 대해 다양한 뷰를 처리할 수 있다는 것입니다. 데이터가 온라인에 저장되어 있든 직원 목록에 저장되어 있든 관계없이 뷰에서는 실제 처리가 발생하지 않습니다. 뷰는 데이터를 출력하고 사용자가 이를 조작할 수 있는 방법으로만 사용됩니다.

Model
  모델은 기업 데이터와 비즈니스 규칙을 나타냅니다. MVC의 세 가지 구성 요소 중에서 모델이 가장 많은 처리 작업을 수행합니다. 예를 들어 EJB 및 ColdFusion 구성 요소와 같은 구성 요소 개체를 사용하여 데이터베이스를 처리할 수 있습니다. 모델이 반환하는 데이터는 중립적입니다. 즉, 모델은 데이터 형식과 아무런 관련이 없으므로 모델은 여러 보기에 데이터를 제공할 수 있습니다. 모델에 적용된 코드는 한 번만 작성하면 여러 뷰에서 재사용할 수 있으므로 코드 중복이 줄어듭니다.

Controller
컨트롤러는 사용자 입력을 받아들이고 모델과 뷰를 호출하여 사용자 요구를 충족합니다. 따라서 웹 페이지의 하이퍼링크를 클릭하고 HTML 양식이 전송되면 컨트롤러 자체는 아무것도 출력하거나 처리하지 않습니다. 요청을 수신하고 요청을 처리하기 위해 호출할 모델 구성 요소를 결정한 다음 모델 처리에서 반환된 데이터를 표시하는 데 사용할 뷰를 결정합니다. 이제 MVC 처리 프로세스를 요약합니다. 먼저 컨트롤러는 사용자의 요청을 수신하고 처리를 위해 어떤 모델을 호출해야 하는지 결정합니다. 그런 다음 모델은 비즈니스 로직을 사용하여 사용자의 요청을 처리하고 데이터를 반환합니다. 해당 뷰와 함께 데이터는 프리젠테이션 레이어를 통해 사용자에게 제공됩니다.

이제 소개가 완료되었으므로 페이징 쿼리 단계부터 시작해 보겠습니다.
이전 규칙을 고수하고 코드로 직접 이동합니다.
1부(가이드 패키지, 구성 파일, JSP 프런트 엔드 부분):
MVC 프레임워크가 데이터베이스 데이터의 페이징 쿼리를 구현하는 방법
[jar 패키지 다운로드 주소] http:/ /archive.apache.org/dist

구성 파일:

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/factory

jdbc.username=root

jdbc.password=ps123456

JSP 부분:

    
nbsp;html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


<meta>
<title>Insert title here</title>

<style>
	table tr td{
		border:1px solid black;
	}
</style>




雇员姓名:
雇员编号 雇员姓名 雇员薪水 雇员职位
${tt.empno} ${tt.ename} ${tt.sal} ${tt.job }
上一页  ${i} 当前页:${requestScope.pb.curPage} 总页数是:${requestScope.pb.totalPage} 总条数是:${requestScope.pb.total}  下一页

두 번째 속성 클래스 부분(Emp):

package cn.pk.entity;

public class Emp {
	
	private String empno;
	private String ename;
	private String deptno;
	private int sal;
	private String job;
	
	
	public String getEmpno() {
		return empno;
	}
	public void setEmpno(String empno) {
		this.empno = empno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public String getDeptno() {
		return deptno;
	}
	public void setDeptno(String deptno) {
		this.deptno = deptno;
	}
	public int getSal() {
		return sal;
	}
	public void setSal(int sal) {
		this.sal = sal;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	
}

세 번째 컨트롤러 부분(EmpServlet):

package cn.pk.controller;

import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.lang.StringUtils;
import cn.pk.entity.Emp;
import cn.pk.servlet.EmpService;
import cn.pk.servlet.impl.EmpServiceImpl;
import cn.pk.util.MyDbUtils;
import cn.pk.util.PageBean;

/**
 * Servlet implementation class EmpSerlvet
 */
@WebServlet(urlPatterns="/listEmp")
public class EmpSerlvet extends HttpServlet {
	
	private EmpService service=new EmpServiceImpl();
	
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String ename = request.getParameter("ename");
		String curPage=request.getParameter("curPage");
		String pageNum= request.getParameter("pageNum");
		try {
			PageBean<emp> pb=service.queryEmp(ename, curPage, pageNum);
			
			request.setAttribute("pb", pb);
			request.getRequestDispatcher("/emp.jsp").forward(request, response);
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
	}

}</emp>

네 번째 도구 클래스 Util 부분:
연결 데이터베이스:

/**
 * 
 */
package cn.pk.util;

import java.io.IOException;
import java.util.Properties;

import org.apache.tomcat.dbcp.dbcp2.BasicDataSource;

/**
 * @author 摸摸大白兔
 *时间 2017年10月19日 下午3:55:46
 * 
 */
public class MyDbUtils {
	
	public static BasicDataSource bds=new BasicDataSource();
	static {
		Properties p=new Properties();
		try {
			p.load(MyDbUtils.class.getResourceAsStream("/jdbc.properties"));
			bds.setDriverClassName(p.getProperty("jdbc.driver"));
			bds.setUrl(p.getProperty("jdbc.url"));
			bds.setUsername(p.getProperty("jdbc.username"));
			bds.setPassword(p.getProperty("jdbc.password"));
			
		} catch (IOException e) {
		
			e.printStackTrace();
		}
		
	}
}

Paging 도움말 클래스:

package cn.pk.util;

import java.util.List;

/**
 * 分页的帮助类
 * @author 摸摸大白兔
 *时间 2017年10月20日 下午2:14:26
 *
 */
public class PageBean<t> {
	
	public void calc() {
	
	}
	
	/**
	 * 构造方法
	 * @param curPage当前页
	 * @param pageNum每页显示的条数
	 * @param total总条数
	 */
	
	public PageBean(int curPage,int pageNum,int total) {
		//计算上一页
		this.prePage = curPage==1?1:curPage-1;
		//计算总页数
		this.totalPage=total%pageNum==0?total/pageNum:total/pageNum+1;
		//下一页
		this.nextPage=curPage==totalPage?totalPage:curPage+1;
		//当前页数的下标
		this.startIndex=(curPage-1)*pageNum;
		
		this.total=total;
		this.curPage=curPage;
		this.pageNum=pageNum;
		
	}
	
	/**
	 * 当前查询的默认当前页=1;
	 * (页面传递参数)
	 */
	private int curPage;
	
	/**
	 * 每一页的数据条数默认10条
	 * 页面传递的参数
	 */
	private int pageNum=10;
	
	/**
	 * 上一页
	 *根据当前页判断
	 *curPage=1  prePage=1;
	 *curPage>1  prePage=curPage-1;
	 */
	private int prePage;
	
	/**
	 * 下一页
	 * curPage=totalpage nextPage=totalpage;
	 * curPage<totalpage private> data;
	
	/**
	 * 开始的索引
	 * startIndex = (curPage-1)*pageNum
	 */
	private int startIndex;
	

	public int getCurPage() {
		return curPage;
	}

	public int getStartIndex() {
		return startIndex;
	}
	
	

	public void setStartIndex(int startIndex) {
		this.startIndex = startIndex;
	}

	public void setCurPage(int curPage) {
		this.curPage = curPage;
	}

	public int getPageNum() {
		return pageNum;
	}

	public void setPageNum(int pageNum) {
		this.pageNum = pageNum;
	}

	public int getPrePage() {
		return prePage;
	}

	public void setPrePage(int prePage) {
		this.prePage = prePage;
	}

	public int getNextPage() {
		return nextPage;
	}

	public void setNextPage(int nextPage) {
		this.nextPage = nextPage;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}

	public List<t> getData() {
		return data;
	}

	public void setData(List<t> data) {
		this.data = data;
	}

}</t></t></totalpage></t>

다섯 번째 모델 레이어의 지속성 레이어 부분:

아아아아

실례 수업 부분:

package cn.pk.dao;

import java.sql.SQLException;
import java.util.List;
import cn.pk.entity.Emp;

public interface EmpDao {
	
	public int countEmp(String ename) throws SQLException ;
	List<emp> queryEmp(String name,int startIndex,int pageNum) throws SQLException;
}</emp>

第六servlet部分:

package cn.pk.servlet.impl;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.lang.StringUtils;

import cn.pk.dao.EmpDao;
import cn.pk.dao.impl.EmpDaoImp;
import cn.pk.entity.Emp;
import cn.pk.servlet.EmpService;
import cn.pk.util.PageBean;

public class EmpServiceImpl implements EmpService{

	private EmpDao dao=new EmpDaoImp();
	@Override
	public PageBean<emp> queryEmp(String ename,String curPage,String pageNum) throws Exception {
		//如果第一次没有访问当前页
		if(StringUtils.isEmpty(curPage)) {
			curPage="1";
		}
		if(StringUtils.isEmpty(pageNum)) {
			pageNum="10";
		}
		
		//转换为int类型
		int curPageIn =Integer.parseInt(curPage);
		int pageNumIn= Integer.parseInt(pageNum);
		int total=dao.countEmp(ename);
		
		
		PageBean<emp> pb=new PageBean(curPageIn,pageNumIn,total);
		
		List<emp> queryEmp = dao.queryEmp(ename,pb.getStartIndex(), pb.getPageNum()); 
		pb.setData(queryEmp);
		
		return pb;
	}
}</emp></emp></emp>

servlet接口类部分:

package cn.pk.servlet;

import java.sql.SQLException;
import java.util.List;
import cn.pk.entity.Emp;
import cn.pk.util.PageBean;

public interface EmpService {

	public  PageBean<emp> queryEmp(String ename, String curPage,String pageNum) throws Exception;
	
}</emp>

最后的执行效果如图:
MVC 프레임워크가 데이터베이스 데이터의 페이징 쿼리를 구현하는 방법

好了。一个简易完整版的数据库表查询就完成了;

위 내용은 MVC 프레임워크가 데이터베이스 데이터의 페이징 쿼리를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제