Maison > Article > développement back-end > Comment le framework MVC implémente la requête de pagination des données de base de données
Le contenu de cet article est de présenter comment le framework MVC implémente la requête de pagination des données de base de données. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
Cet article utilise le mode MVC pour implémenter la requête de pagination. C'est un exemple simple de démarrage avec MVC. Le blog contient de nombreuses explications complètes et détaillées. Je vais résumer quelques paragraphes. pour comprendre le principe d'exécution du framework MVC :
Modèle MVC (modèle d'architecture à trois niveaux)
( Model-View-Controller) est un type d'ingénierie logicielle. Un modèle d'architecture logicielle qui divise le système logiciel en trois parties de base : modèle, vue et contrôleur.
Le modèle MVC a été proposé pour la première fois par Trygve Reenskaug en 1974. Il s'agit d'un modèle de conception logicielle inventé par Xerox PARC dans les années 1980 pour le langage de programmation Smalltalk. Le but du modèle MVC est de mettre en œuvre une conception de programmation dynamique, de simplifier les modifications et extensions ultérieures du programme et de permettre la réutilisation de certaines parties du programme. De plus, ce mode rend la structure du programme plus intuitive en simplifiant la complexité. Le système logiciel sépare ses parties de base et donne également à chaque partie de base ses fonctions qui lui sont dues. Les professionnels peuvent être regroupés selon leur propre expertise :
(Contrôleur) - Responsable de l'acheminement des demandes et de leur traitement.
(Afficher) - Les concepteurs d'interfaces conçoivent des interfaces graphiques.
(Modèle) - Les programmeurs écrivent les fonctions que le programme devrait avoir (implémentation d'algorithmes, etc.), et les experts en bases de données effectuent la gestion des données et la conception de bases de données (peuvent réaliser des fonctions spécifiques).
Comment fonctionne MVC
MVC est un modèle de conception qui force la séparation de l'entrée, du traitement et de la sortie de l'application. Les applications utilisant MVC sont divisées en trois composants principaux : le modèle, la vue et le contrôleur. Ils gèrent chacun leurs propres tâches.
Vue
Une vue est l'interface que les utilisateurs voient et avec laquelle ils interagissent. Pour les applications Web anciennes, la vue est une interface composée d'éléments HTML. Dans les applications Web de nouveau style, HTML joue toujours un rôle important dans la vue, mais de nouvelles technologies ont émergé sans cesse, notamment Macromedia Flash et certains langages de balisage. et des services Web comme XHTML, XML/XSL, WML, etc. La gestion de l'interface de l'application devient de plus en plus difficile. L'un des grands avantages de MVC est qu'il peut gérer de nombreuses vues différentes pour votre application. Aucun traitement réel n'a lieu dans la vue, que les données soient stockées en ligne ou dans une liste d'employés. En tant que vue, cela sert simplement à générer les données et à permettre à l'utilisateur de les manipuler.
Modèle
Le modèle représente les données de l'entreprise et les règles métier. Parmi les trois composants de MVC, le modèle comporte le plus de tâches de traitement. Par exemple, il peut utiliser des objets composants tels que les EJB et les composants ColdFusion pour gérer les bases de données. Les données renvoyées par le modèle sont neutres, ce qui signifie que le modèle n'a rien à voir avec le format des données, de sorte qu'un modèle peut fournir des données pour plusieurs vues. La duplication de code est réduite car le code appliqué au modèle ne doit être écrit qu'une seule fois et peut être réutilisé par plusieurs vues.
Contrôleur
Le contrôleur accepte les entrées de l'utilisateur et appelle des modèles et des vues pour répondre aux besoins de l'utilisateur. Ainsi, lorsqu'un lien hypertexte dans une page Web est cliqué et qu'un formulaire HTML est envoyé, le contrôleur lui-même ne génère rien et n'effectue aucun traitement. Il reçoit simplement la demande et décide quel composant de modèle appeler pour gérer la demande, puis détermine quelle vue utiliser pour afficher les données renvoyées par le traitement du modèle. Résumons maintenant le processus de traitement MVC. Tout d'abord, le contrôleur reçoit la demande de l'utilisateur et décide quel modèle doit être appelé pour le traitement. Ensuite, le modèle utilise la logique métier pour traiter la demande de l'utilisateur et renvoie les données. avec la vue correspondante. Les données sont présentées à l'utilisateur via la couche de présentation.
Maintenant que l'introduction est terminée, passons aux étapes de requête de pagination :
Retenez les anciennes règles et accédez directement au code :
La première partie (package guide, fichier de configuration, partie frontale JSP) :
[adresse de téléchargement du package jar] http://archive.apache.org/dist
Fichier de configuration :
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/factory jdbc.username=root jdbc.password=ps123456
Partie 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 } |
Deuxième partie de classe d'attribut (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; } }
Troisième partie du contrôleur (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>
La quatrième partie Util de la classe d'outils :
Se connecter à la base de données :
/** * */ 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(); } } }
Classe d'aide à la pagination :
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>
Couche de persistance faisant partie de la cinquième couche de modèle :
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>
Excusez la partie cours :
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>
最后的执行效果如图:
好了。一个简易完整版的数据库表查询就完成了;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!