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 フロントエンド部分):
[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 } |
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 フレームワークがデータベース データのページング クエリを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック

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

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

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

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

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

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。ユーザー列にタイトルを挿入

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