1. 程式人生 > >JAVA專案:訂餐系統步驟解析

JAVA專案:訂餐系統步驟解析

JAVA專案:訂餐系統步驟解析

最近做了個訂餐系統的練習,感覺做完以後自己對JAVA又有了更深的理解,所以來寫下這個訂餐系統專案所需要的步驟。主要是用到Struts2框架和Hibernate框架來進行實現。下面是步驟流程:

一、首先要配置好執行環境所需要的配置檔案,這樣才能進行操作和連結資料庫。

二、新建專案所需要的包,這裡用的是MVC框架所建立的包:

Control包:存來控制處理Model包裡面的處理語句後進行Action的跳轉的類

Model包: 存來寫處理語句對資料庫進行操作的類

Etity包:用來存實體類

Util包:存些所需要的工具類

MyInterceptor包:自定義的攔截器

三、登入介面步驟

1.要先寫好使用者的實體類User,在配置好User.hbm.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
	<hibernate-mapping package="Entity">
		<class name="User">
			<id name="id">
				<generator class="native"></generator>
			</id>
			<property name="userName"></property>
			<property name="passWord"></property>
		</class>
	</hibernate-mapping>

2.再對jsp頁面進行排版


3.form表單提交資訊時進到struts.xml找到對應的Action跳到對應的控制方法對使用者進行驗證,

 <!-- 登入Action -->
    <package name="strutsDemo2" namespace="/test2" extends="struts-default">	
			<global-allowed-methods>regex:.*</global-allowed-methods>
			<action name="mydemo1_*" class="Control.LoginKZ" method="{1}">
			<result name="success">/ShouYe.jsp</result>
			<result name="shibai">/Login.jsp</result>
			<result name="input">/Login.jsp</result>		
		</action>	
	</package> 

這裡我加了校驗器來對使用者輸入進行校驗,空或則小於3位就跳回登入介面

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
<validators>
<field name="us.userName">
<field-validator type="requiredstring">
	<param name="trim">true</param>
	<message>使用者名稱不能為空!</message>
</field-validator>
</field>
<field name="us.passWord">
	<field-validator type="requiredstring">
		<param name="trim">true</param>
		<message>密碼不能為空!</message>
	</field-validator>
	<field-validator type="stringlength">
		<param name="minLength">3</param>
		<message>密碼小於3位</message>
	</field-validator>
</field>

</validators>

4.LoginKZ(控制層)呼叫對應的處理類來獲取資料庫資訊進行驗證,錯誤就跳回Login.jsp,成功就跳到首頁,當登入時將使用者ID存進session裡面,方便後面訂購。

四、首頁的分頁顯示步驟:跳到對應的Action找到對應的控制類,呼叫處理類再返回到對應的檢視進行顯示


1.一樣是先定義好食物的實體類Food,要顯示什麼就自定義什麼屬性。

2.寫好獲取分頁時所需要的總頁數和所需要顯示的個數的處理類,這裡用的是hql來進行操作資料庫

所需要顯示的個數的hql程式碼,存成ArrayList集合,到時遍歷出實體類來

s = HibernateUtil.getSesssion();
ts = s.beginTransaction();
String hql = "from Food f where f.lei=?";
Query q = s.createQuery(hql);
q.setString(0, lei);
//這裡可以像sql的limit一樣可以規定每頁顯示數量
q.setFirstResult((pageNow-1)*pageSize).setMaxResults(pageSize);
List<Food> li = q.list();
list = (ArrayList)li;
ts.commit();

獲取總頁數的hql程式碼

s = HibernateUtil.getSesssion();
ts = s.beginTransaction();
String hql = "from  Food f where f.lei=?";
Query q = s.createQuery(hql);
q.setString(0, lei);
int count = q.list().size();
if(count%pageSize==0){
pageCount = count/pageSize;
}else {
	pageCount = count/pageSize+1;
}

3.當點選首頁時就跳到對應的Action找到對應的方法,在控制的方法裡面呼叫分頁的處理類來獲取總頁數和顯示個數,再跳到Shouye.jsp裡面進行顯示。

<!-- food分頁 -->
    <package name="strutsDemo1" namespace="/test1" extends="struts-default">	
			<global-allowed-methods>regex:.*</global-allowed-methods>
			<action name="mydemo1_*" class="Control.FoodKZ" method="{1}">
				<!-- 檢視詳細 -->
			<result name="xiangxi">/XiangXi.jsp</result>
			<result name="success">/ShouYe.jsp</result>		
		</action>	
		</package>

五、註冊介面步驟

1、因為上面登入已經寫了使用者表實體類,所以可以直接呼叫就可以,所以先排版好jsp頁面,可以寫些js來對使用者名稱和密碼進行判斷不能為空,再加個驗證碼通過才跳Action


2.新建註冊的處理類進行處理和操作資料庫,註冊使用者是可以用Hibernate直接存實體類,再加個排除重複使用者名稱的處理進行判斷

註冊排重處理方法,定義成boolean型別,當hql查到不為空時返回ture

boolean b = false;
s = HibernateUtil.getSesssion();
String hqlStr = "from User as user where user.userName=:name";
Query q = s.createQuery(hqlStr);
q.setString("name", userName);
List<User> list = q.list();
if(list.size()!=0){
	b = true;
}

註冊處理方法也定義成boolean型別,然後再呼叫排重方法

boolean b = false;
s = HibernateUtil.getSesssion();
ts = s.beginTransaction();
//呼叫排重方法,false就儲存使用者
if(!this.getName(us.getUserName())){
	s.save(us);
	b = true;
	}
ts.commit();

3.建立註冊的控制器,在控制器裡面呼叫註冊方法,返回對應的檢視層,成功就跳到登入頁面,失敗就跳回註冊頁面繼續註冊。

 <!-- 註冊Action -->
    <package name="strutsDemo3" namespace="/test3" extends="struts-default">	
			<global-allowed-methods>regex:.*</global-allowed-methods>
			<action name="mydemo1_*" class="Control.ZhuCeKZ" method="{1}">
			<result name="success">/Login.jsp</result>
			<result name="shibai">/zhuce.jsp</result>		
			<result name="input">/zhuce.jsp</result>
		</action>	
	</package> 

六、訂購介面步驟。

1.訂購時先要判斷下使用者是否登入了,沒有就跳到登入介面,也可以加攔截器來攔截。登入後點擊訂購時將對應的食物ID、使用者ID、食物價格、食品數量存進購物車表。所以我們先寫好購物車表的實體類,再配置到hibernate.xml配置裡面。

2.寫好實體類後,再寫處理類裡面的資料操作,就是將需要的屬性存進購物車表裡面。

這裡需要排重下,不讓相同的食物重複的存進購物車表裡面,因為有時使用者不同所以用於不同使用者ID對應不同的食物ID,相同就返回true.

boolean b = false;
s = HibernateUtil.getSesssion();
ts = s.beginTransaction();
String hql = "select count(*) from MyCar as mc where mc.userid=? and mc.foodId=?";
Query q = s.createQuery(hql);
q.setInteger(0, userid);
q.setInteger(1, foodId);
String count = q.uniqueResult().toString();
System.out.println(count);
if(count.equals("1")){
	b = true;
		}
ts.commit();

存訂購資訊到購物車表,進行排重,這裡處理的返回值是boolean型別,已經有該條資訊就直接返回true,沒有就先存再返回。

boolean b = false;
s = HibernateUtil.getSesssion();
s = s.beginTransaction();
//呼叫排重方法,為true就直接返回true,而不儲存
if(this.isAddCar(foodId, userid)){
return true;
}
s.save(mc);
ts.commit();
b = true;

3.存好使用者訂購的食物後,就是如何在頁面中顯示給使用者看並結算,所以就要從資料庫中遍歷出登入使用者訂購了多少種食物,這裡就要用到使用者的ID。因為登入時已經把使用者ID存進session裡面,我們可以直接就獲取的到,所以把獲取到的訂購資訊分別存到ArrayList裡面,方便jsp頁面遍歷

ArrayList list=null;
s = HibernateUtil.getSesssion();
ts = s.beginTransaction();
//這裡我是新建了個實體類,定義了對應屬性的構造器,這樣和sql做左連線差不多
String hql = "select new Entity.JieSuanBean(c.id,f.photo,"
		+ "f.foodname,f.xianJia,c.foodNum,f.id) "
		+ "from Food f,MyCar c "
		+ "where f.id=c.foodId and c.userid=?";
Query q = s.createQuery(hql);
q.setInteger(0, userid);
List<JieSuanBean> li = q.list();
list = (ArrayList) li;
ts.commit();

4.通過控制層對處理類進行操作,再返回到對應的檢視,因為加了攔截器,沒登陸直接跳到登入介面。

<!-- 檢視訂單介面Action -->
		<action name="mydemo2_*" class="Control.ChaKanKZ" method="{1}">
			<result name="success">/JieSuan.jsp</result>
			<result name="shibai">/Login.jsp</result>	
			 <interceptor-ref name="myYZ"></interceptor-ref>	
		</action>	

5.Jsp頁面顯示如下,這裡可以用strut2的標籤直接遍歷出來,加上修改數量的js,和刪除或清空訂單的功能。修改數量在提交訂單時再跳到控制層呼叫處理層來對每種食物數量進行修改


七、結算介面步驟。

1.這裡可以先對jsp頁面進行好排版,但記得把總價傳進裡面。


2.填寫好訂單資訊後,就是把裡面的資訊存進資料庫,所以要有對應的實體類,因此寫好實體類和裡面屬性,再配置到hibernate.xml裡面方便操作資料庫。

3.在處理類裡寫個方法對資料庫進行操作,把訂單實體類存進去。

try {
s = HibernateUtil.getSesssion();
ts = s.beginTransaction();
	s.save(mo);
	ts.commit();
	} finally {
	if(s!=null){
		s.close();
			}
	}

4.控制層呼叫處理層對資料庫進行操作完後,就跳回對應的檢視。

<!-- 填寫提交訂單Action -->
		<action name="mydemo4_*" class="Control.TianXieKZ" method="{1}">
			<result name="success">/WanCheng.jsp</result>
			 <interceptor-ref name="myYZ"></interceptor-ref>	
		</action>

完結