Struts Spring Hibernate統合の例
このStruts 1.x Spring Hibernateの例をダウンロードする –
Struts-Spring-Hibernate-Example.zip
このチュートリアルでは、簡単な顧客管理(追加と選択)Webアプリケーション、プロジェクト管理ツールとしてのMaven、WebフレームワークとしてのStruts 1.x、依存性注入フレームワークとしてのSpring、データベースORMフレームワークとしてのHibernateの作成方法を学びます。
全体的な統合アーキテクチャは次のようになります。
Struts (Web page) <---> Spring DI <--> Hibernate (DAO) <---> Database
それらの技術をすべて統合するには、あなたは..
-
SpringとHibernateを統合する
”
LocalSessionFactoryBean
“クラス。
-
Springの準備ができたStrutsプラグインを使用してSpringとStrutsを統合する –
”
ContextLoaderPlugIn
“。
1.プロジェクトの構成
これが最終的なプロジェクト構造です。
2.テーブルスクリプト
顧客の詳細を格納する顧客テーブルを作成します。
DROP TABLE IF EXISTS `mkyong`.`customer`; CREATE TABLE `mkyong`.`customer` ( `CUSTOMER__ID` bigint(20) unsigned NOT NULL AUTO__INCREMENT, `NAME` varchar(45) NOT NULL, `ADDRESS` varchar(255) NOT NULL, `CREATED__DATE` datetime NOT NULL, PRIMARY KEY (`CUSTOMER__ID`) ) ENGINE=InnoDB AUTO__INCREMENT=10 DEFAULT CHARSET=utf8;
3. Mavenの詳細
すべてのStruts、Spring、およびHibernateの依存ライブラリをpom.xmlに定義します。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4__0__0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mkyong.common</groupId> <artifactId>StrutsSpringExample</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>StrutsExample Maven Webapp</name> <url>http://maven.apache.org</url> <repositories> <repository> <id>Java.Net</id> <url>http://download.java.net/maven/2/</url> </repository> <repository> <id>JBoss repository</id> <url>http://repository.jboss.com/maven2/</url> </repository> </repositories> <dependencies> <!-- Spring framework --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-struts</artifactId> <version>2.0.8</version> </dependency> <!-- J2EE library --> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>6.0</version> </dependency> <!-- Unit Test --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- Struts 1.3 framework --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts-core</artifactId> <version>1.3.10</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts-taglib</artifactId> <version>1.3.10</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts-extras</artifactId> <version>1.3.10</version> </dependency> <!-- MySQL database driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.9</version> </dependency> <!-- Hibernate core --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate</artifactId> <version>3.2.7.ga</version> </dependency> <!-- Hibernate core library dependecy start --> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2</version> </dependency> <!-- Hibernate core library dependecy end --> <!-- Hibernate query library dependecy start --> <dependency> <groupId>antlr</groupId> <artifactId>antlr</artifactId> <version>2.7.7</version> </dependency> <!-- Hibernate query library dependecy end --> </dependencies> <build> <finalName>StrutsExample</finalName> </build> </project>
4.休止状態
Hibernateで設定する必要はほとんどありません。顧客のXMLマッピングファイルとモデルを宣言するだけです。
Customer.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.mkyong.customer.model.Customer" table="customer" catalog="mkyong"> <id name="customerId" type="long"> <column name="CUSTOMER__ID"/> <generator class="identity"/> </id> <property name="name" type="string"> <column name="NAME" length="45" not-null="true"/> </property> <property name="address" type="string"> <column name="ADDRESS" not-null="true"/> </property> <property name="createdDate" type="timestamp"> <column name="CREATED__DATE" length="19" not-null="true"/> </property> </class> </hibernate-mapping>
package com.mkyong.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 }
5.春
ビジネスオブジェクト(BO)とデータアクセスオブジェクト(DAO)のSpringのBean宣言。 DAOクラス(CustomerDaoImpl.java)はSpringの「
HibernateDaoSupport
」クラスを拡張し、Hibernate関数に簡単にアクセスします。
CustomerBean.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="customerBo" class="com.mkyong.customer.bo.impl.CustomerBoImpl" > <property name="customerDao" ref="customerDao"/> </bean> <bean id="customerDao" class="com.mkyong.customer.dao.impl.CustomerDaoImpl" > <property name="sessionFactory" ref="sessionFactory"></property> </bean> </beans>
-
CustomerBo.java **
package com.mkyong.customer.bo; import java.util.List; import com.mkyong.customer.model.Customer; public interface CustomerBo{ void addCustomer(Customer customer); List<Customer> findAllCustomer(); }
-
CustomerBoImpl.java **
package com.mkyong.customer.bo.impl; import java.util.List; import com.mkyong.customer.bo.CustomerBo; import com.mkyong.customer.dao.CustomerDao; import com.mkyong.customer.model.Customer; public class CustomerBoImpl implements CustomerBo{ CustomerDao customerDao; public void setCustomerDao(CustomerDao customerDao) { this.customerDao = customerDao; } public void addCustomer(Customer customer){ customerDao.addCustomer(customer); } public List<Customer> findAllCustomer(){ return customerDao.findAllCustomer(); } }
-
CustomerDao.java **
package com.mkyong.customer.dao; import java.util.List; import com.mkyong.customer.model.Customer; public interface CustomerDao{ void addCustomer(Customer customer); List<Customer> findAllCustomer(); }
-
CustomerDaoImpl.java **
package com.mkyong.customer.dao.impl; import java.util.Date; import java.util.List; import com.mkyong.customer.dao.CustomerDao; import com.mkyong.customer.model.Customer; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao{ public void addCustomer(Customer customer){ customer.setCreatedDate(new Date()); getHibernateTemplate().save(customer); } public List<Customer> findAllCustomer(){ return getHibernateTemplate().find("from Customer"); } }
6.春の休止状態
データベースの詳細を宣言し、 ”
LocalSessionFactoryBean
“を介してSpringとHibernateを統合します。
database.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mkyong jdbc.username=root jdbc.password=password
-
DataSource.xml **
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>WEB-INF/classes/config/database/properties/database.properties</value> </property> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> </beans>
-
HibernateSessionFactory.xml **
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- Hibernate session factory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource"/> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show__sql">true</prop> </props> </property> <property name="mappingResources"> <list> <value>com/mkyong/customer/hibernate/Customer.hbm.xml</value> </list> </property> </bean> </beans>
-
SpringBeans.xml **
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- Database Configuration --> <import resource="config/database/spring/DataSource.xml"/> <import resource="config/database/spring/HibernateSessionFactory.xml"/> <!-- Beans Declaration --> <import resource="com/mkyong/customer/spring/CustomerBean.xml"/> </beans>
7.ストラットスプリング
StrutsとSpringを統合するには、struts-config.xmlファイルにSpringのbuild-in Strutsプラグイン「
ContextLoaderPlugIn
」を登録する必要があります。 Actionクラスでは、Springの ”
ActionSupport
“クラスを拡張する必要があり、
getWebApplicationContext()
を介してSpring Beanを取得できます。
-
AddCustomerAction.java **
package com.mkyong.customer.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.springframework.web.struts.ActionSupport; import com.mkyong.customer.bo.CustomerBo; import com.mkyong.customer.form.CustomerForm; import com.mkyong.customer.model.Customer; public class AddCustomerAction extends ActionSupport{ public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception { CustomerBo customerBo = (CustomerBo) getWebApplicationContext().getBean("customerBo"); CustomerForm customerForm = (CustomerForm)form; Customer customer = new Customer(); //copy customerform to model BeanUtils.copyProperties(customer, customerForm); //save it customerBo.addCustomer(customer); return mapping.findForward("success"); } }
-
ListCustomerAction.java **
package com.mkyong.customer.action; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.DynaActionForm; import org.springframework.web.struts.ActionSupport; import com.mkyong.customer.bo.CustomerBo; import com.mkyong.customer.model.Customer; public class ListCustomerAction extends ActionSupport{ public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception { CustomerBo customerBo = (CustomerBo) getWebApplicationContext().getBean("customerBo"); DynaActionForm dynaCustomerListForm = (DynaActionForm)form; List<Customer> list = customerBo.findAllCustomer(); dynaCustomerListForm.set("customerList", list); return mapping.findForward("success"); } }
-
CustomerForm.java **
package com.mkyong.customer.form; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; public class CustomerForm extends ActionForm { private String name; private String address; //getter and setter, basic validation }
-
Customer.properties **
#customer module label message customer.label.name = Name customer.label.address = Address customer.label.button.submit = Submit customer.label.button.reset = Reset #customer module error message customer.err.name.required = Name is required customer.err.address.required = Address is required
-
add__customer.jsp **
Struts + Spring + Hibernate example Add Customer : :
-
list__customer.jsp **
Struts + Spring + Hibernate example List All Customers
顧客名
住所
+
-
struts-config.xml **
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://jakarta.apache.org/struts/dtds/struts-config__1__3.dtd"> <struts-config> <form-beans> <form-bean name="customerForm" type="com.mkyong.customer.form.CustomerForm"/> <form-bean name="dynaCustomerListForm" type="org.apache.struts.action.DynaActionForm"> <form-property name="customerList" type="java.util.List"/> </form-bean> </form-beans> <action-mappings> <action path="/AddCustomerPage" type="org.apache.struts.actions.ForwardAction" parameter="/pages/customer/add__customer.jsp"/> <action path="/AddCustomer" type="com.mkyong.customer.action.AddCustomerAction" name="customerForm" validate="true" input="/pages/customer/add__customer.jsp" > <forward name="success" redirect="true" path="/ListCustomer.do"/> </action> <action path="/ListCustomer" type="com.mkyong.customer.action.ListCustomerAction" name="dynaCustomerListForm" > <forward name="success" path="/pages/customer/list__customer.jsp"/> </action> </action-mappings> <message-resources parameter="com.mkyong.customer.properties.Customer"/> <!-- Spring Struts plugin --> <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> <set-property property="contextConfigLocation" value="/WEB-INF/classes/SpringBeans.xml"/> </plug-in> </struts-config>
-
web.xml **
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app__2__3.dtd" > <web-app> <display-name>Struts Hibernate Examples</display-name> <servlet> <servlet-name>action</servlet-name> <servlet-class> org.apache.struts.action.ActionServlet </servlet-class> <init-param> <param-name>config</param-name> <param-value> /WEB-INF/struts-config.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>** .do</url-pattern> </servlet-mapping> </web-app>
8.デモンストレーション
-
1。リストの顧客ページ** データベースからすべての顧客をリストします。
http://localhost:8080/StrutsSpringExample/ListCustomer.do
-
2。顧客のページを追加する** 顧客の詳細をデータベースに追加する。
http://localhost:8080/StrutsSpringExample/AddCustomerPage.do
リファレンス
-
リンク://struts/struts-spring-integration-example/[Struts Spring
例]。リンク://struts/struts-hibernate-integration-example/[Struts Hibernate
例]。リンク://spring/maven-spring-hibernate-mysql-example/[Spring Hibernate
例]