Struts2+Hibernate使用Full Hibernate Plugin集成
在上篇 Struts2 + Hibernate集成 實例中, 它使用 servlet 上下文監聽 Hibernate 的 Session,而且把Struts2和Hibernate框架集成。
但是,總有一些東西要提高。在本教程中,我們將展示如何整合Struts2+Hibernate,並使用Struts2一個名爲「Full Hibernate Plugin「的插件。
見下面的集成步驟:
- 把 「Full Hibernate Plugin」 jar 放入到工程類路徑。
- 使用 「@SessionTarget」 註釋來注入到 Hibernate session; 當「@TransactionTarget」 註釋注入到Hibernate 事務。
- 在 struts.xml, 讓包擴展 「hibernate-default「,而不是默認的堆棧。
看看下面的關係:
Struts 2 <-- (Full Hibernate Plugin) ---> Hibernate <-----> Database
注,
本教程是從以前的 Struts2 + Hibernate集成 實例(servlet context listener)更新版本。 因此,JSP 和 Hibernate 配置基本相同,只是 整合的部分是有點不同,嘗試比較既能發現不同。
1. 工程結構
在節教程,我們創建一個工程名爲 full-hibernate 的web工程。看看這個項目文件夾的完整結構。
2. MySQL創建表腳本
Customer表結構
CREATE TABLE `customer` (
`customer_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
`address` varchar(255) NOT NULL,
`create_date` datetime NOT NULL,
PRIMARY KEY (`customer_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
3. Hibernate相關配置
所有 Hibernate 的模型和配置的東西。
Customer.java – 爲customer 表創建一個類。
package com.yiibai.customer.model;
import java.util.Date;
public class Customer implements java.io.Serializable {
private Long customerId;
private String name;
private String address;
private Date createdDate;
//getter and setter methods
}
Customer.hbm.xml – Hibernate 的 customer 表映射。
文件: hibernate.cfg.xml, Hibernate 數據庫配置
5. DAO
實現DAO設計模式執行數據庫操作。在 CustomerDAOImpl 類, 聲明Hibernate會話和事務爲類成員。在Struts 2的項目初始化, 「Full Hibernate Plugin」 使用 @SessionTarget 和 @TransactionTarget 分別標註將注入相應的 Hibernate 會話和事務成爲類成員。
CustomerDAO.java
package com.yiibai.customer.dao;
import java.util.List;
import com.yiibai.customer.model.Customer;
public interface CustomerDAO{
void addCustomer(Customer customer);
List<Customer> listCustomer();
}
CustomerDAOImpl.java
package com.yiibai.customer.dao.impl;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.googlecode.s2hibernate.struts2.plugin.annotations.SessionTarget;
import com.googlecode.s2hibernate.struts2.plugin.annotations.TransactionTarget;
import com.yiibai.customer.dao.CustomerDAO;
import com.yiibai.customer.model.Customer;
public class CustomerDAOImpl implements CustomerDAO{
@SessionTarget
Session session;
@TransactionTarget
Transaction transaction;
//add the customer
public void addCustomer(Customer customer){
session.save(customer);
}
//return all the customers in list
public List<Customer> listCustomer(){
return session.createQuery("from Customer").list();
}
}
6. Action
在Action類,調用DAO類來執行數據庫操作。
CustomerAction.java
package com.yiibai.customer.action;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.yiibai.customer.dao.CustomerDAO;
import com.yiibai.customer.dao.impl.CustomerDAOImpl;
import com.yiibai.customer.model.Customer;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class CustomerAction extends ActionSupport
implements ModelDriven{
Customer customer = new Customer();
List<Customer> customerList = new ArrayList<Customer>();
CustomerDAO customerDAO = new CustomerDAOImpl();
public String execute() throws Exception {
return SUCCESS;
}
public Object getModel() {
return customer;
}
public List<Customer> getCustomerList() {
return customerList;
}
public void setCustomerList(List<Customer> customerList) {
this.customerList = customerList;
}
//save customer
public String addCustomer() throws Exception{
//save it
customer.setCreatedDate(new Date());
customerDAO.addCustomer(customer);
//reload the customer list
customerList = null;
customerList = customerDAO.listCustomer();
return SUCCESS;
}
//list all customers
public String listCustomer() throws Exception{
customerList = customerDAO.listCustomer();
return SUCCESS;
}
}
7. JSP 頁面
JSP頁面添加並列出客戶。
customer.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
Struts 2 Full Hibernate Plugin example
Add Customer
All Customers
<s:if test="customerList.size() > 0">
Customer Id | Name | Address | Created Date |
---|---|---|---|
8. struts.xml
鏈接所有〜讓包擴展 「hibernate-default」 來代替 「struts-default「.
<action name="addCustomerAction"
class="com.yiibai.customer.action.CustomerAction" method="addCustomer" >
<result name="success">pages/customer.jsp</result>
</action>
<action name="listCustomerAction"
class="com.yiibai.customer.action.CustomerAction" method="listCustomer" >
<result name="success">pages/customer.jsp</result>
</action>
9. 實例
訪問以下網址 : http://localhost:8080/full-hibernate/addCustomerAction.action
參考
- Struts2 Full Hibernate插件文檔
- Struts2 + Hibernate集成實例
- 安裝庫到Maven本地資源庫
下載代碼
下載所有源代碼 – http://pan.baidu.com/s/1o6tjSam