-首先在由於自己是新手,現在也是剛剛接觸java的三大架構所以可能會出現一些問題希望各位大牛能給我指出,我必虛心的接受。
首先我是用的Hibernate的註解來實現的那麼先搭建Hibernate的註解環境,我是先用反向工程來將實體類和其主設定檔Hibernate.cfg.xml檔案然後將同時產生的hbm.xml檔案移除,在同時在上面的properties中添加current_session_context_class值為thread主要是為後面的session的擷取作準。
然後在實體類中寫配置的屬性例如
@Entity@Table(name="types")public class Types implements java.io.Serializable { // Fields @Id @GeneratedValue(generator="seqs",strategy=GenerationType.SEQUENCE) @SequenceGenerator(name="seqs",sequenceName="seq_id",allocationSize=1) private Integer id; @Column private String name; @OneToMany(mappedBy="types") private Set<House> houses = new HashSet<House>(0);有沒有能直接組建組態註解的方式我不知道,有知道的告訴我一聲謝謝。 - 搭建Struts2的環境 首先在web.xml的的檔案添加過濾器 <filter> <filter-name>users</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>users</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> - 在src下面編寫主要的struts.xml檔案 - `<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "struts-2.1.dtd" ><struts><constant name="struts.ui.theme" value="simple"/> <constant name="struts.i18n.encoding" value="utf-8"/> <package name="default" namespace="/" extends="struts-default"> <default-action-ref name="defaultAction"/> <action name="defaultAction"> <result>/page/error.jsp</result> </action> <action name="user" class="cn.action.UserAction"> <result name="success">/page/manage.jsp</result> <result name="error">/page/login.jsp</result> <result name="input">/page/login.jsp</result> </action> <action name="users" class="cn.action.UserAction"> <result name="success">/page/success.jsp</result> <result name="error">/page/register.jsp</result> <result name="input">/page/register.jsp</result> </action> </package></struts> - 這裡struts的環境搭建好這裡要實現其商務邏輯在jsp頁面的action的映射中可以將jsp頁面的資料轉送過去不過ID要一樣在這個類中在實現欄位的get,set方法。在action的編寫中需要繼承ActionSupport(為了實現服務端校正功能)重寫validateLogin的方法可以實現校正功能將錯誤放入到FieldError標籤中
public void validateLogin(){
if(username.trim().length()==0) { this.addFieldError("errorname", "使用者名稱不可為空"); } if(password.trim().length()==0) { this.addFieldError("errorpwd", "密碼不可為空"); }}
- 實現dao層的資料訪問這裡獲得Session的方法如下
static SessionFactory sf=null;
static {
AnnotationConfiguration cf = new AnnotationConfiguration().configure(); sf=cf.buildSessionFactory();}public static Session getSession(){ return sf.getCurrentSession();}
> 這裡是登入的資料訪問的代碼由於session的擷取方式所以必須開啟事物。
public Users login(String username,String password) throws Exception
{
Users u=null;
Transaction tx=null;
Session s=null;
try {
s=HibernateUtil.getSession();
tx=s.beginTransaction();
String hql=”from Users where name=? and password=?”;
Query query=s.createQuery(hql);
query.setString(0, username);
query.setString(1,password);
u=(Users)query.uniqueResult();
Map session=ActionContext.getContext().getSession();
session.put(“username”,u.getUsername());
tx.commit();
} catch (Exception e) { throw new Exception(e); } return u;}
“`
註冊需要注意的是在可以在Action中將其封裝成USER類在資料訪問層
代碼如下當然在Action裡應該實現註冊的校正。
`public Integer register(Users u) throws Exception{
int result=0; Session s=HibernateUtil.getSession(); Transaction tx=s.beginTransaction(); try { result=(Integer)s.save(u); tx.commit(); } catch (Exception e) { throw new Exception(e); } return result; }