struts&hibernate應用(對數據庫增刪改查)實例

 【數據庫方面】:
(最好先自己創建一個用戶,創建一個表空間)

1.配置數據源
在 Myeclipse Database explorer perspective中的 DB browser 中 右鍵new 一個數據源
選者 oracle thin 配置jdbc:oracle:thin:@localhost:1521/APP1 添加用戶名和密碼 然後導入class12.jar包

2.創建表
create table hb1(id number primary key,uname varchar2(20)not null,upass varchar2(10));

3.因爲oracle不支持自動編號,所以要先創建一個序列
create sequence my_seq1 nocycle maxvalue 1000 start with 01;

4.使用下列語句增加數據(不需要)
insert into hb1(id,uname,upass)values(my_seq.nextval,'gm','gm');
到此數據庫部分結束

(以下以hb1表,my_seq1序列爲例)
【myeclipse方面】:

1.創建web-project

2.添加struts組件 選擇struts 1.2

3.在struts控制文件struts-config.xml中,創建 Jsp Form and Action,比如創建一個add(開戶)功能,給addForm添加forward導向顯示頁面
,其他如del update 等功能和add功能類似

4.添加hibernate支持,選擇hibernate3.1  最好兩個library都勾上,然後 點copy checked library jars to project...(注意這裏一定要選擇此項,來把對應的jar支持添加到項目中)。最後一步,不需要選者創建 create sessionFactory,自己手工創建
5.在 hibernate.cfg.xml控制文件中,在Specify additional Hibernate properties選項中添加show_sql 值爲true,爲了頁面操作完後在控制檯打印出sql語句的信息

6.打開數據源,連接數據庫

7.把對應的表添加hibernate持久層選者hibernate Reserve Engerning...,添加的時候,要在src下先創建一個com.pojo包,把表對應添加到這個包中,不要直接添加到src下。選者要添加的Hibernate mapping file  以及 java data object(不需要創建abstract class抽象內)
另外,添加的時候選擇 sequence 選項。

8.添加完表映射文件後,在pojo包下的Hb1.hbm.xml配置文件中,配置如下: 
 <hibernate-mapping>
     <class name="com.pojo.Hb1" table="HB1" schema="SCOTT">
         <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="sequence" >
            <param   name="sequence">MY_SEQ1</param> (這裏很關鍵)
            </generator>

9.創建一個com.DAO包,在包下創建一個 Hb1dao.java文件
這個文件中包含了所有的業務方法。具體代碼如下

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.pojo.Hb;
import com.pojo.Hb1;

public class HBDAO {
 public static Session session;//創建數據庫的連接對象
 //private connection conn;
 public HBDAO(){
  Configuration cfg = new Configuration().configure();//創建配置對象
  SessionFactory sf = cfg.buildSessionFactory();//創建連接工廠
  //使用hibernate.cfg.xml配置連接數據庫
  session = sf.openSession();//打開數據庫的會話 --相當於使用connection conn
  //conn = session.connection();
 }
 public void closeSession(){
  if(session!=null){
   session.close();
   session = null;
  }
 }
 //增加
 public void AddUser(Hb1 user){
  Transaction tx = session.beginTransaction();
  session.saveOrUpdate(user);
  tx.commit();
 }
 //查詢全部內容操作
 public List<Hb1> getAll(){
  Query query = session.createQuery("from Hb1");
  //分頁操作
  query.setFirstResult(0);//0代表第一頁
  query.setMaxResults(2);//每頁顯示個數
  List<Hb1> list =  query.list();
  return list;
 }
 //修改
 public void UpdateUser(Integer id,Hb1 user){   //傳入的user是update.jsp頁面中生成的新的用戶信息,id是必須要正確的
  Transaction tx = session.beginTransaction();  //開始一個事務,爲了能夠往數據庫中添加數據,如果沒有事務的話
  //Query query = session.createQuery("update Hb1 user"+  // 可能會導致不能添加
  //    "set user.uname=:newuname,user.upass = : newpass" +"where user.id = ?");
  //query.setInteger(0, id);
  //query.setString("newuname", newuname);
  //query.setString("newpass", newpass);
  //query.executeUpdate();
  //Hb1 user = (Hb1)query.uniqueResult();
  Query query = session.createQuery("from Hb1 p where p.id = ?"); //
  query.setInteger(0, id);         //
  Hb1 olduser = (Hb1)query.uniqueResult();//以上三句,實現了通過id查找數據庫中原始數據的功能
  olduser.setUname(user.getUname());
  olduser.setUpass(user.getUpass());
  session.save(olduser);
  session.flush();      //當有大量數據需要修改時,使用此語句
  tx.commit();       //提交事務
 }
 //刪除
 public static void DelUser(Integer id){
  /*Transaction tx = session.beginTransaction();
  Hb1 user = (Hb1)session.get(Hb1.class, id);
  session.delete(user);
  tx.commit();
  */
  Transaction tx = session.beginTransaction();
  Query query = session.createQuery("from Hb1 p where p.id = ?");
  query.setInteger(0, id);
  Hb1 user = (Hb1)query.uniqueResult();
  session.delete(user);
  //query.executeUpdate();
  tx.commit();
 }
 //查詢特定內容
 public Hb1 getOnebyId (Integer id){
  Query query = session.createQuery("from Hb1 p where p.id = ?");
  query.setInteger(0, id);
  Hb1 user = (Hb1)query.uniqueResult();
  return user;
 }
 //模糊查詢
 public List<Hb1> getOnebyName(String name){
  Query query = session.createQuery("from Hb1 p where p.uname like ?");
  query.setString(0, "%"+name+"%");
  List<Hb1> list = query.list();
  return list;
 }
}
10.在對應的界面中添加以上對應的方法。比如
在addaction中調用adduser方法
  String name = addForm.getUname();
  String pass = addForm.getUpass();
  
  Hb1 user = new Hb1(name,pass);
  HBDAO dao = new HBDAO();
  
  if( name != null& pass!=null){
   dao.AddUser(user);
   
   List<Hb1>list = dao.getAll();  //注意這裏,當添加完數據後,要調用查詢數據庫的方法,讀一次數據庫,
   dao.closeSession();  //並把讀出來的數據存放在 List 列表中
   request.getSession().setAttribute("rs", list); //設置"rs",爲了在show頁面中,調用logic:iterate標籤時
   request.removeAttribute("AddForm");  //使用,然後調用removeAttribute清空在頁面填寫完後的內
   return mapping.findForward("show");  //容
  }
11.在顯示頁面中,首先要添加 struts標籤庫
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

在顯示頁面中有個迭代器
<body>
 <center>
 <table border="1">
 <tr><td>id</td><td>name</td><td>password</td></tr>
 <logic:iterate id="user" name = "rs" scope = "session">
 <tr>
 <td>
  ${user.id}
 </td>
 <td>
  ${user.uname}
 </td>
 <td>
  ${user.upass}
 </td>
 </tr>
 </logic:iterate>
 </table>
 </center>
  </body>
顯示的效果如下
id         name         password
${user.id}  ${user.uname}  ${user.upass}

12.配置過濾器和國際化

(過濾器):爲了能往oracle數據庫中添加中文數據

1.首先創建一個fiter包,包下創建一個Myfiter.java文件。創建包時注意添加一下繼承接口RequestProcessor

package com.fiter;

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.RequestProcessor;

public class Myfiter2 extends RequestProcessor {

 @Override
 protected boolean processPreprocess(HttpServletRequest request,
   HttpServletResponse response)  {
  try {
   request.setCharacterEncoding("gb2312");
  } catch (UnsupportedEncodingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  return true;
 }

}
2.創建完後在 struts-config.xml中配置一個controller:
<controller processorClass = "com.fiter.Myfiter2">
</controller>
另外注意的是,把每個jsp文件(比如add.jsp del.jsp)中的頁頂<%@ page language="java" pageEncoding="gbk"%>。這樣才能在頁面中顯示中文。

(國際化):爲了不同國家的人,都能方便使用此頁面

1.首先在 IE 瀏覽器Internet選項--語言--添加語言首選項(中文或者其他語言)
struts 在每個form中,都提供了 validate方法和reset方法,前者爲了錯誤判斷,後者爲了初始化設置頁面選項框中,默認顯示“請輸入您的姓名”等等

比如在addForm中的validate方法中,代碼如下
  if(uname.length()==0 ){
   ActionErrors error1 = new ActionErrors();
   error1.add("uname", new ActionMessage("nullname"));//uanme爲對應的add.jsp中的 errpr對應的uname
   return error1;  //uname : <html:text property="uname"/><html:errors property="uname"/><br/>
  }
  if(upass.length()<=2){
   ActionErrors error2 = new ActionErrors();
   error2.add("upass",new ActionMessage("shortpass"));
   return error2;
  }
  return null;

2.其中 nullname 對應了com.yourcompany.struts包下的

ApplicationResouces_cn.properties中的內容
nullname = /u60a8/u8f93/u5165/u7684/u7528/u6237/u540d/u4e3a/u7a7a(您輸入的用戶名爲空)
shortpass = /u60a8/u8f93/u5165/u7684/u5bc6/u7801/u957f/u5ea6/u5c0f/u4e8e3
nullid = /u60a8/u8f93/u5165/u7684/u5e10/u53f7/u4e3a/u7a7a

在java安裝包下的bin文件夾下有一個 native2acci ,將中文轉換爲如上語言

ApplicationResouces_en.properties中的內容
nullname = your input name is null
shortpass = your input password is less than 3
nullid = your input id is null

3.最後一步:struts-config.xml中配置一個controller:
</controller>
  <message-resources parameter="com.yourcompany.struts.ApplicationResources_cn" />
</struts-config>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章