SSH-Projektkundenliste und BaseDao-Kapselungsbeispiel
一、客户列表
1.分析
2.书写步骤
(1)封装PageBean
public class PageBean {//当前页数private Integer currentPage;//总记录数private Integer totalCount;//每页显示条数private Integer pageSize;//总页数private Integer totalPage;//分页列表数据private List list;public PageBean(Integer currentPage, Integer totalCount, Integer pageSize) {this.totalCount = totalCount; this.pageSize = pageSize; this.currentPage = currentPage; if(this.currentPage == null){//如页面没有指定显示那一页.显示第一页.this.currentPage = 1; } if(this.pageSize == null){//如果每页显示条数没有指定,默认每页显示3条this.pageSize = 3; } //计算总页数this.totalPage = (this.totalCount+this.pageSize-1)/this.pageSize; //判断当前页数是否超出范围//不能小于1if(this.currentPage < 1){this.currentPage = 1; }//不能大于总页数if(this.currentPage > this.totalPage){this.currentPage = this.totalPage; } }//计算起始索引public int getStart(){return (this.currentPage-1)*this.pageSize; } public Integer getCurrentPage() {return currentPage; }public void setCurrentPage(Integer currentPage) {this.currentPage = currentPage; }public Integer getTotalCount() {return totalCount; }public void setTotalCount(Integer totalCount) {this.totalCount = totalCount; }public Integer getPageSize() {return pageSize; }public void setPageSize(Integer pageSize) {this.pageSize = pageSize; }public Integer getTotalPage() {return totalPage; }public void setTotalPage(Integer totalPage) {this.totalPage = totalPage; }public List getList() {return list; }public void setList(List list) {this.list = list; } }
(2)书写Action
public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {private Customer customer = new Customer(); private CustomerService cs;private Integer currentPage;private Integer pageSize;public String list() throws Exception {//封装离线查询对象DetachedCriteria dc = DetachedCriteria.forClass(Customer.class);//判断并封装参数if(StringUtils.isNotBlank(customer.getCust_name())){ dc.add(Restrictions.like("cust_name", "%"+customer.getCust_name()+"%")); } //1 调用Service查询分页数据(PageBean)PageBean pb = cs.getPageBean(dc,currentPage,pageSize);//2 将PageBean放入request域,转发到列表页面显示ActionContext.getContext().put("pageBean", pb);return "list"; } @Overridepublic Customer getModel() {return customer; }public void setCs(CustomerService cs) {this.cs = cs; }public Integer getCurrentPage() {return currentPage; }public void setCurrentPage(Integer currentPage) {this.currentPage = currentPage; }public Integer getPageSize() {return pageSize; }public void setPageSize(Integer pageSize) {this.pageSize = pageSize; } }
(3)书写Service
public class CustomerServiceImpl implements CustomerService {private CustomerDao cd; @Overridepublic PageBean getPageBean(DetachedCriteria dc, Integer currentPage, Integer pageSize) {//1 调用Dao查询总记录数Integer totalCount = cd.getTotalCount(dc);//2 创建PageBean对象PageBean pb = new PageBean(currentPage, totalCount, pageSize);//3 调用Dao查询分页列表数据 List<Customer> list = cd.getPageList(dc,pb.getStart(),pb.getPageSize());//4 列表数据放入pageBean中.并返回 pb.setList(list);return pb; }public void setCd(CustomerDao cd) {this.cd = cd; } }
(4)书写Dao
public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {public Integer getTotalCount(DetachedCriteria dc) {//设置查询的聚合函数,总记录数 dc.setProjection(Projections.rowCount()); List<Long> list = (List<Long>) getHibernateTemplate().findByCriteria(dc); //清空之前设置的聚合函数dc.setProjection(null); if(list!=null && list.size()>0){ Long count = list.get(0);return count.intValue(); }else{return null; } }public List<Customer> getPageList(DetachedCriteria dc, int start, Integer pageSize) { return (List<Customer>) getHibernateTemplate().findByCriteria(dc, start, pageSize); } }
(5)完成struts以及spring的配置
strus.xml添加代码:
<action name="CustomerAction_*" class="customerAction" method="{1}" > <result name="list" >/jsp/customer/list.jsp</result></action>
applicationContext.xml添加代码:
<bean name="customerAction" class="cn.xyp.web.action.CustomerAction" scope="prototype" ><property name="cs" ref="customerService" ></property></bean><bean name="customerService" class="cn.xyp.service.impl.CustomerServiceImpl" ><property name="cd" ref="customerDao" ></property></bean><bean name="customerDao" class="cn.xyp.dao.impl.CustomerDaoImpl" ><!-- 注入sessionFactory --><property name="sessionFactory" ref="sessionFactory" ></property></bean>
(6)书写前台list.jsp页面
主要通过表单提交隐藏域的数据、jq和ognl表达式来实现。
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><TITLE>客户列表</TITLE> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><LINK href="${pageContext.request.contextPath }/css/Style.css?1.1.11" type=text/css rel=stylesheet><LINK href="${pageContext.request.contextPath }/css/Manage.css?1.1.11" type=text/cssrel=stylesheet><script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.4.4.min.js?1.1.11"></script><SCRIPT language=javascript>function changePage(pageNum){ //1 将页码的值放入对应表单隐藏域中 $("#currentPageInput").val(pageNum); //2 提交表单 $("#pageForm").submit(); }; function changePageSize(pageSize){ //1 将页码的值放入对应表单隐藏域中 $("#pageSizeInput").val(pageSize); //2 提交表单 $("#pageForm").submit(); }; </SCRIPT><META content="MSHTML 6.00.2900.3492" name=GENERATOR></HEAD><body><TABLE cellSpacing=0 cellPadding=0 width="98%" border=0><Tbody><TR><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_019.jpg"border=0></TD><TD width="100%" background="${pageContext.request.contextPath }/images/new_020.jpg"height=20></TD><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_021.jpg"border=0></TD></TR></Tbody></TABLE><TABLE cellSpacing=0 cellPadding=0 width="98%" border=0><Tbody><TR><TD width=15 background=${pageContext.request.contextPath }/images/new_022.jpg><IMGsrc="${pageContext.request.contextPath }/images/new_022.jpg" border=0></TD><TD vAlign=top width="100%" bgColor=#ffffff><TABLE cellSpacing=0 cellPadding=5 width="100%" border=0><TR><TD class=manageHead>当前位置:客户管理 > 客户列表</TD></TR><TR><TD height=2></TD></TR></TABLE><TABLE borderColor=#cccccc cellSpacing=0 cellPadding=0width="100%" align=center border=0><Tbody><TR><TD height=25><FORM id="pageForm" name="customerForm"action="${pageContext.request.contextPath }/CustomerAction_list"method=post><!-- 隐藏域.当前页码 --><input type="hidden" name="currentPage" id="currentPageInput" value="<s:property value="#pageBean.currentPage" />" /><!-- 隐藏域.每页显示条数 --><input type="hidden" name="pageSize" id="pageSizeInput" value="<s:property value="#pageBean.pageSize" />" /><TABLE cellSpacing=0 cellPadding=2 border=0><Tbody><TR><TD>客户名称:</TD><TD><INPUT class=textbox id=sChannel2style="WIDTH: 80px" maxLength=50 name="cust_name" value="${param.cust_name}"></TD><TD><INPUT class=button id=sButton2 type=submitvalue=" 筛选 " name=sButton2></TD></TR></Tbody></TABLE></FORM></TD></TR><TR><TD><TABLE id=gridstyle="BORDER-TOP-WIDTH: 0px; FONT-WEIGHT: normal; BORDER-LEFT-WIDTH: 0px; BORDER-LEFT-COLOR: #cccccc; BORDER-BOTTOM-WIDTH: 0px; BORDER-BOTTOM-COLOR: #cccccc; WIDTH: 100%; BORDER-TOP-COLOR: #cccccc; FONT-STYLE: normal; BACKGROUND-COLOR: #cccccc; BORDER-RIGHT-WIDTH: 0px; TEXT-DECORATION: none; BORDER-RIGHT-COLOR: #cccccc"cellSpacing=1 cellPadding=2 rules=all border=0><Tbody><TRstyle="FONT-WEIGHT: bold; FONT-STYLE: normal; BACKGROUND-COLOR: #eeeeee; TEXT-DECORATION: none"><TD>客户名称</TD><TD>客户级别</TD><TD>客户来源</TD><TD>联系人</TD><TD>电话</TD><TD>手机</TD><TD>操作</TD></TR><s:iterator value="#pageBean.list" var="cust" ><TR style="FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none"><TD><s:property value="#cust.cust_name" /></TD><TD><s:property value="#cust.cust_level" /></TD><TD><s:property value="#cust.cust_source" /></TD><TD><s:property value="#cust.cust_linkman" /></TD><TD><s:property value="#cust.cust_phone" /></TD><TD><s:property value="#cust.cust_mobile" /></TD><TD><a href="${pageContext.request.contextPath }/customerServlet?method=edit&custId=${customer.cust_id}">修改</a> <a href="${pageContext.request.contextPath }/customerServlet?method=delete&custId=${customer.cust_id}">删除</a></TD></TR></s:iterator></Tbody></TABLE></TD></TR><TR><TD><SPAN id=pagelink><DIV style="LINE-HEIGHT: 20px; HEIGHT: 20px; TEXT-ALIGN: right">共[<B><s:property value="#pageBean.totalCount" /> </B>]条记录,[<B><s:property value="#pageBean.totalPage" /></B>]页 ,每页显示 <%-- changePageSize($('#pageSizeSelect option').filter(':selected').val()) --%> <select name="pageSize" onchange="changePageSize($('#pageSizeSelect option:selected').val())" id="pageSizeSelect" ><option value="3" <s:property value="#pageBean.pageSize==3?'selected':''" /> >3</option><option value="5" <s:property value="#pageBean.pageSize==5?'selected':''" /> >5</option></select>条 [<A href="javaScript:void(0)" onclick="changePage(<s:property value='#pageBean.currentPage-1' />)" >前一页</A>]<B><s:property value="#pageBean.currentPage" /></B>[<A href="javaScript:void(0)" onclick="changePage(<s:property value='#pageBean.currentPage+1' />)" >后一页</A>] 到<input type="text" size="3" id="page" name="page" value="<s:property value="#pageBean.currentPage" />" /> 页 <input type="button" value="Go" onclick="changePage($('#page').val())"/></DIV></SPAN></TD></TR></Tbody></TABLE></TD><TD width=15 background="${pageContext.request.contextPath }/images/new_023.jpg"><IMGsrc="${pageContext.request.contextPath }/images/new_023.jpg" border=0></TD></TR></Tbody></TABLE><TABLE cellSpacing=0 cellPadding=0 width="98%" border=0><Tbody><TR><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_024.jpg"border=0></TD><TD align=middle width="100%"background="${pageContext.request.contextPath }/images/new_025.jpg" height=15></TD><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_026.jpg"border=0></TD></TR></Tbody></TABLE></body></HTML>
二、BaseDao封装
1.抽取BaseDao
2.BaseDao设计思路
3.BaseDao接口书写
public interface BaseDao<T> {//增void save(T t);//删void delete(T t);//删void delete(Serializable id);//改void update(T t);//查 根据id查询 T getById(Serializable id);//查 符合条件的总记录数 Integer getTotalCount(DetachedCriteria dc);//查 查询分页列表数据List<T> getPageList(DetachedCriteria dc,Integer start,Integer pageSize); }
4.BaseDao的实现类
public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {private Class clazz;//用于接收运行期泛型类型 public BaseDaoImpl() {//获得当前类型的带有泛型类型的父类ParameterizedType ptClass = (ParameterizedType) this.getClass().getGenericSuperclass();//获得运行期的泛型类型clazz = (Class) ptClass.getActualTypeArguments()[0]; } @Overridepublic void save(T t) { getHibernateTemplate().save(t); } @Overridepublic void delete(T t) { getHibernateTemplate().delete(t); } @Overridepublic void delete(Serializable id) { T t = this.getById(id);//先取,再删 getHibernateTemplate().delete(t); } @Overridepublic void update(T t) { getHibernateTemplate().update(t); } @Overridepublic T getById(Serializable id) { return (T) getHibernateTemplate().get(clazz, id); } @Overridepublic Integer getTotalCount(DetachedCriteria dc) {//设置查询的聚合函数,总记录数 dc.setProjection(Projections.rowCount()); List<Long> list = (List<Long>) getHibernateTemplate().findByCriteria(dc); //清空之前设置的聚合函数dc.setProjection(null); if(list!=null && list.size()>0){ Long count = list.get(0);return count.intValue(); }else{return null; } } @Overridepublic List<T> getPageList(DetachedCriteria dc, Integer start, Integer pageSize) { List<T> list = (List<T>) getHibernateTemplate().findByCriteria(dc, start, pageSize); return list; } }
5.业务Dao中的应用
public class CustomerDaoImpl extends BaseDaoImpl<Customer> implements CustomerDao { }
Das obige ist der detaillierte Inhalt vonSSH-Projektkundenliste und BaseDao-Kapselungsbeispiel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Python ist eine sehr nützliche Software, die je nach Bedarf für viele verschiedene Zwecke eingesetzt werden kann. Python kann in der Webentwicklung, Datenwissenschaft, maschinellem Lernen und vielen anderen Bereichen eingesetzt werden, die eine Automatisierung erfordern. Es verfügt über viele verschiedene Funktionen, die uns bei der Ausführung dieser Aufgaben helfen. Python-Listen sind eine der sehr nützlichen Funktionen von Python. Wie der Name schon sagt, enthält eine Liste alle Daten, die Sie speichern möchten. Es handelt sich im Grunde um eine Reihe verschiedener Arten von Informationen. Verschiedene Möglichkeiten, eckige Klammern zu entfernen Häufig stoßen Benutzer auf die Situation, dass Listenelemente in eckigen Klammern angezeigt werden. In diesem Artikel erfahren Sie, wie Sie diese Klammern entfernen, um Ihren Eintrag besser sehen zu können. Eine der einfachsten Möglichkeiten, Klammern in Zeichenfolgen und Ersetzungsfunktionen zu entfernen, finden Sie in

Um die Anzahl der Elemente in einer Liste mit der Funktion count() von Python zu zählen, sind bestimmte Codebeispiele erforderlich. Als leistungsstarke und leicht zu erlernende Programmiersprache bietet Python viele integrierte Funktionen zur Verarbeitung unterschiedlicher Datenstrukturen. Eine davon ist die Funktion count(), mit der sich die Anzahl der Elemente in einer Liste zählen lässt. In diesem Artikel erklären wir die Verwendung der count()-Funktion im Detail und stellen spezifische Codebeispiele bereit. Die Funktion count() ist eine in Python integrierte Funktion, mit der ein bestimmter Wert berechnet wird

So erstellen Sie eine Einkaufsliste auf dem iPhone in iOS17. Das Erstellen einer Einkaufsliste in der Erinnerungen-App ist sehr einfach. Sie fügen einfach eine Liste hinzu und füllen sie mit Ihren Artikeln. Die App sortiert Ihre Artikel automatisch in Kategorien und Sie können sogar mit Ihrem Partner oder Ihrer Wohnungspartnerin zusammenarbeiten, um eine Liste der Dinge zu erstellen, die Sie im Geschäft kaufen müssen. Hier sind die vollständigen Schritte dazu: Schritt 1: iCloud-Erinnerungen aktivieren So seltsam es auch klingen mag, Apple sagt, dass Sie Erinnerungen von iCloud aktivieren müssen, um eine Einkaufsliste unter iOS17 zu erstellen. Hier sind die Schritte dafür: Gehen Sie zur App „Einstellungen“ auf Ihrem iPhone und tippen Sie auf [Ihr Name]. Wählen Sie als Nächstes i aus

In iOS 17 hat Apple der Erinnerungs-App eine praktische kleine Listenfunktion hinzugefügt, die Ihnen beim Lebensmitteleinkauf hilft. Lesen Sie weiter, um zu erfahren, wie Sie es verwenden und Ihren Weg zum Geschäft verkürzen. Wenn Sie eine Liste mit dem neuen Listentyp „Lebensmittel“ (außerhalb der USA „Shopping“ genannt) erstellen, können Sie eine Vielzahl von Lebensmitteln und Lebensmitteln eingeben und diese automatisch nach Kategorien organisieren lassen. Diese Organisation macht es einfacher, im Supermarkt oder beim Einkaufen zu finden, was Sie brauchen. Zu den in Warnungen verfügbaren Kategorietypen gehören Obst und Gemüse, Brot und Getreide, Tiefkühlkost, Snacks und Süßigkeiten, Fleisch, Milchprodukte, Eier und Käse, Backwaren, Backwaren, Haushaltsprodukte, Körperpflege und Wellness sowie Wein, Bier und Spirituosen. Folgendes wird in iOS17 erstellt

LösungJa, wir können den Nullwert ganz einfach mit der Methode add() einfügen. Wenn die Listenimplementierung Null nicht unterstützt, löst sie eine NullPointerException aus. Syntaxbooleanadd(Ee) Hängt das angegebene Element an das Ende dieser Liste an. Typparameter E – Der Laufzeittyp des Elements. Parameter e – Element, das an diese Liste angehängt werden soll

Bevor wir die Unterschiede besprechen, wollen wir zunächst verstehen, was Del und Remove() in Python-Listen sind. Schlüsselwort „del“ in der Python-Liste Das Schlüsselwort „del“ in Python wird verwendet, um ein oder mehrere Elemente aus einer Liste zu löschen. Wir können auch alle Elemente löschen, also die gesamte Liste löschen. Beispiel für die Verwendung des Schlüsselworts del zum Löschen von Elementen aus einer Python-Liste #CreateaListmyList=["Toyota", "Benz", "Audi", "Bentley"]print("List="

Aufgrund seiner Einfachheit und Vielseitigkeit hat sich Python zu einer der beliebtesten Programmiersprachen für verschiedene Anwendungen entwickelt. Egal, ob Sie ein erfahrener Entwickler sind oder gerade erst mit dem Codieren beginnen, Python bietet eine breite Palette an Funktionen und Bibliotheken, die komplexe Aufgaben bewältigbar machen. In diesem Artikel untersuchen wir ein praktisches Szenario, in dem Python uns helfen kann, indem es den Prozess der Erstellung mehrerer Verzeichnisse basierend auf einer Liste automatisiert. Durch die Nutzung der Leistungsfähigkeit der in Python integrierten Module und Techniken können wir diese Aufgabe effizient und ohne manuelle Eingriffe erledigen. In diesem Tutorial befassen wir uns mit dem Problem der Erstellung mehrerer Verzeichnisse und stellen Ihnen verschiedene Möglichkeiten zur Lösung dieses Problems mit Python vor. Am Ende dieses Artikels liegt unser Ziel bei Ihnen

Die Verwendung der Funktion „reverse()“ von Python zum Umkehren einer Liste erfordert bestimmte Codebeispiele. In Python müssen wir häufig mit Listen arbeiten, und das Umkehren von Listen ist eine häufige Notwendigkeit. Zu diesem Zeitpunkt können wir die in Python integrierte Funktion „reverse()“ verwenden. zu implementierende Funktion. Die Funktion der Funktion reverse() besteht darin, die Reihenfolge der Elemente in der Liste umzukehren, d. h. das erste Element in der Liste wird zum letzten Element, das zweite Element wird zum vorletzten Element und so weiter. Hier erfahren Sie, wie Sie Py verwenden
