ホームページ バックエンド開発 PHPチュートリアル MVC フレームワークがデータベース データのページング クエリを実装する方法

MVC フレームワークがデータベース データのページング クエリを実装する方法

Oct 20, 2018 pm 05:38 PM
jsp MVCモード

この記事の内容は、MVC フレームワークがデータベース データのページング クエリを実装する方法を紹介することです。一定の参考値があるので、困っている友人は参考にしていただければ幸いです。

この記事では、MVC モードを使用してページング クエリを実装します。これは、単純な MVC エントリの例です。ブログには包括的で詳細な説明が多数あります。いくつかの段落を要約します。まず、理解するための簡単な図があります。 MVC フレームワークの実行原理:


MVC フレームワークがデータベース データのページング クエリを実装する方法

MVC パターン (3 層アーキテクチャ パターン)

(モデル- View-Controller) は、ソフトウェア エンジニアリングの一種です。ソフトウェア システムを 3 つの基本部分 (モデル、ビュー、コントローラー) に分割するソフトウェア アーキテクチャ モデルです。

MVC パターンは、1974 年に Trygve Reenskaug によって最初に提案されました。これは、1980 年代に Xerox PARC によってプログラミング言語 Smalltalk 用に発明されたソフトウェア設計パターンです。 MVC パターンの目的は、動的プログラミング設計を実装し、その後のプログラムの変更と拡張を簡素化し、プログラムの特定の部分を再利用できるようにすることです。さらに、このモードは複雑さを単純化することでプログラム構造をより直感的にします。ソフトウェアシステムは基本的な部分を分離し、またそれぞれの基本的な部分に適切な機能を与えます。専門家は、それぞれの専門知識によってグループ化できます。

(コントローラー) - リクエストの転送と処理を担当します。

(表示) - インターフェイス デザイナーは、グラフィカル インターフェイスを設計します。

(モデル) - プログラマーはプログラムが持つべき機能を書き(アルゴリズムの実装など)、データベースの専門家はデータ管理とデータベースの設計を行います(特定の機能を実現できます)。

MVC の仕組み

MVC は、アプリケーションの入力、処理、出力の分離を強制する設計パターンです。 MVC を使用するアプリケーションは、モデル、ビュー、コントローラーの 3 つのコア コンポーネントに分割されます。彼らはそれぞれ独自のタスクを処理します。

View
View は、ユーザーが表示して操作するインターフェイスです。旧式の Web アプリケーションの場合、ビューは HTML 要素で構成されるインターフェイスです。新しいスタイルの Web アプリケーションでは、HTML は依然としてビュー内で重要な役割を果たしていますが、Macromedia Flash や一部のマークアップ言語など、いくつかの新しいテクノロジが際限なく登場しています。 XHTML、XML/XSL、WML などの Web サービス。アプリケーションのインターフェイスをどのように処理するかは、ますます困難になっています。 MVC の大きな利点の 1 つは、アプリケーションのさまざまなビューを処理できることです。データがオンラインで保存されているか、従業員のリストで保存されているかにかかわらず、ビューでは実際の処理は発生せず、ビューとしてはデータを出力し、ユーザーがデータを操作できるようにする手段としてのみ機能します。

モデル
モデルは企業データとビジネス ルールを表します。 MVC の 3 つのコンポーネントの中で、モデルには最も多くの処理タスクがあります。たとえば、EJB や ColdFusion コンポーネントなどのコンポーネント オブジェクトを使用してデータベースを処理する場合があります。モデルによって返されるデータはニュートラルです。これは、モデルがデータ形式とは何の関係もないことを意味するため、モデルは複数のビューにデータを提供できます。モデルに適用されるコードは 1 回記述するだけで済み、複数のビューで再利用できるため、コードの重複が削減されます。

コントローラー
コントローラーはユーザー入力を受け入れ、モデルとビューを呼び出してユーザーのニーズを満たします。そのため、Web ページ内のハイパーリンクがクリックされて HTML フォームが送信された場合、コントローラー自体は何も出力したり、処理を実行したりしません。リクエストを受信し、リクエストを処理するためにどのモデル コンポーネントを呼び出すかを決定し、モデル処理によって返されたデータを表示するためにどのビューを使用するかを決定するだけです。 MVC の処理プロセスを要約します。まず、コントローラーはユーザーのリクエストを受け取り、処理のためにどのモデルを呼び出すかを決定します。次に、モデルはビジネス ロジックを使用してユーザーのリクエストを処理し、データを返します。最後に、コントローラーはモデルの戻り値をフォーマットします。データはプレゼンテーション層を通じてユーザーに表示されます。

導入が完了したので、ページング クエリの手順に進みましょう:
まだ古いルールに従い、コードに直接進みます:
最初の部分 (ガイド パッケージ) 、設定ファイル、JSP フロントエンド部分):
MVC フレームワークがデータベース データのページング クエリを実装する方法
[jar パッケージのダウンロード アドレス]http://archive.apache.org/dist

Configurationファイル:

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}  下一页

2 番目の属性クラス部分 (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;
	}
	
}
ログイン後にコピー

3 番目のコントローラー パーツ (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>
ログイン後にコピー

4 番目のツール クラスユーティリティ パーツ:
データベースへの接続:

/**
 * 
 */
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();
		}
		
	}
}
ログイン後にコピー

ページング ヘルプ クラス:

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>
ログイン後にコピー

5 番目のモデル層の永続層部分:

package cn.pk.dao.impl;

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

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.lang.StringUtils;

import cn.pk.dao.EmpDao;
import cn.pk.entity.Emp;
import cn.pk.util.MyDbUtils;
/**
 * 模型层的持久层(数据库的sql语句)
 * @author 摸摸大白兔
 *时间 2017年10月20日 下午1:24:12
 *
 */
public class EmpDaoImp implements EmpDao{
	
	public int countEmp(String ename) throws SQLException {
		QueryRunner qr=new  QueryRunner(MyDbUtils.bds);
		
		String sql="select count(*) as myCount from newemp";
		if(StringUtils.isNotEmpty(ename)) {
			sql+=" where ename like '%"+ename+"%'";
		}
		Map map=(Map)qr.query(sql,new MapHandler());
		return Integer.parseInt(map.get("myCount").toString());
	}


	@Override
	public List<emp> queryEmp(String ename,int startIndex,int pageNum) throws SQLException {
		QueryRunner qr=new  QueryRunner(MyDbUtils.bds);
		
		String sql="select * from newemp";
		if(StringUtils.isNotEmpty(ename)) {
			sql+=" where ename like '%"+ename+"%'";
		}
		sql+=" limit "+startIndex+","+pageNum;
		List<emp> empList = (List<emp>)qr.query(sql,new BeanListHandler(Emp.class));
		
		return empList;
	}

}</emp></emp></emp>
ログイン後にコピー

Excuse クラス部分:

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 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JSP はフロントエンドですか、それともバックエンドですか? JSP はフロントエンドですか、それともバックエンドですか? Jan 28, 2023 pm 06:23 PM

jsp はバックエンドに属します。 jsp の本質はサーブレットであり、サーブレットはサーバー側の Java アプリケーションであるため、jsp はバックエンド テクノロジです。 JSP はネットワーク サーバー上に展開され、クライアントから送信されたリクエストに応答し、リクエストの内容に基づいて HTML、XML、またはその他の形式のドキュメントの Web ページを動的に生成し、リクエスターに返します。 JSP テクノロジは、Java をスクリプト言語として使用して、ユーザーの HTTP 要求にサービスを提供し、サーバー上の他の Java プログラムとともに複雑なビジネス要件を処理できます。

SpringBootプロジェクトにJSPを統合する方法 SpringBootプロジェクトにJSPを統合する方法 May 12, 2023 pm 07:40 PM

新しい springboot プロジェクトが作成された後のディレクトリは次のようになります。 ステップ 1: jsp の構成に必要な jar パッケージ コードをプロジェクトの pom ファイルに追加します: org.apache.tomcat.embedtomcat-embed-jasperprovided ステップ 2: 新しいディレクトリを作成しますメイン パスの下に webapp を作成し、webapp の下に新しいパス WEB-INF を作成し、WEB-INF の下に新しいパス jsp を作成し、このパスの下に使用する jsp ファイルを配置します。 ステップ 3: アクセス パスとサフィックス コードを設定します。メイン設定ファイル内の jsp ファイル: spring .mvc.view.prefix=/WEB-INF/jsp/sp

jspとhtmlの違いは何ですか jspとhtmlの違いは何ですか Jan 09, 2024 am 10:46 AM

jspとhtmlの違い: 1. 動作の仕組み; 2. 目的; 3. Javaとの関係; 4. 機能; 5. バックエンドとの関係; 6. 速度; 7. 保守性と拡張性; 8. 学習と使用の難易度; 9. ファイルサフィックスと識別ツール; 10. コミュニティとサポート; 11. セキュリティ。詳細な紹介: 1. 動作メカニズム. HTML は、主に Web ページのコンテンツの記述と定義に使用されるマークアップ言語です. クライアント上で実行され、ブラウザによって解釈および実行されます. JSP は、上で実行される動的 Web ページ テクノロジですサーバー側などは待ちます。

PHP 開発: CodeIgniter を使用して MVC パターンと RESTful API を実装する PHP 開発: CodeIgniter を使用して MVC パターンと RESTful API を実装する Jun 16, 2023 am 08:09 AM

Web アプリケーションは進化し​​続けるため、アプリケーションをより迅速かつ効率的に開発することが重要です。また、RESTful API は Web アプリケーションで広く使用されているため、開発者は RESTful API の作成および実装方法を理解する必要があります。この記事では、CodeIgniter フレームワークを使用して MVC パターンと RESTful API を実装する方法について説明します。 MVC パターン MVC (Model-Vie) の概要

JSPページング関数の実装方法 JSPページング関数の実装方法 Mar 04, 2024 pm 04:40 PM

実装手順: 1. JSP ページに JSTL タグ ライブラリを導入する; 2. データベースからデータを取得する; 3. データをページングする; 4. ページにページング ナビゲーション バーを表示する; 5. 現在のページに応じて番号を表示する番号と各ページを指定し、ページングデータから対応するデータを取得してページ上に表示するだけです。

jspとはどのような形式ですか? jspとはどのような形式ですか? Jan 24, 2024 pm 04:01 PM

JSP は動的 Web テクノロジ標準であり、そのファイル形式は、Java プログラム セグメント (スクリプトレット) と JSP タグ (タグ) を従来の Web ページ HTML ファイル (.htm、.html) に挿入して JSP ファイル (*.jsp ) を形成するものです。

jsp+mysqlを使用してWebページにページングクエリを実装する方法 jsp+mysqlを使用してWebページにページングクエリを実装する方法 May 30, 2023 pm 03:58 PM

1. ページング クエリを実装するためのコア SQL ステートメント (1) データベース内のレコードの総数をクエリする SQL ステートメント: selectcount(*)from+(table name); (2) レコード数をクエリする SQL ステートメント各クエリ: ここで、0 は検索インデックス、2 は毎回検索される項目の数です。 select*from table name limit0,2; 2. コードの実装* 前回の記事で、データベース接続を取得するために使用される DBconnection クラス、Author オブジェクト クラスの 2 つのクラスを作成しました。リンクをクリックして、これら 2 つのクラスのコードを表示します。リンクをクリックすると、DBconnection クラスと Author オブジェクト クラスが表示されます (1) ログイン ページ:index.jsp。ユーザー列にタイトルを挿入

Web 開発のための Java テクノロジー スタック: Java EE、サーブレット、JSP、Spring、および Web 開発で一般的に使用されるその他のテクノロジーを理解します。 Web 開発のための Java テクノロジー スタック: Java EE、サーブレット、JSP、Spring、および Web 開発で一般的に使用されるその他のテクノロジーを理解します。 Dec 26, 2023 pm 02:29 PM

JavaWeb 開発技術スタック: JavaEE、Servlet、JSP、Spring など Web 開発に使用される技術をマスターする インターネットの急速な発展に伴い、今日のソフトウェア開発分野では、Web アプリケーションの開発が非常に重要な技術要件となっています。 Java は広く使用されているプログラミング言語として、Web 開発の分野でも重要な役割を果たしています。 JavaWeb 開発テクノロジ スタックには、JavaEE、サーブレット、JSP、Spr などの複数のテクノロジが含まれます。

See all articles