Maven + Spring + Hibernate + MySqlの例
この例では、Mavenを使用して簡単なJavaプロジェクト構造を作成し、MySQLデータベースでデータフレームワーク(挿入、選択、更新、削除)を行うためにSpringフレームワークでHibernateを使用する方法を示します。
最終プロジェクト構造
最終的なプロジェクトファイル構造は次のようになります。フォルダ構造の作成に迷った場合は、ここでこのフォルダ構造を確認してください。
1. テーブル作成
MySQLデータベースに「ストック」テーブルを作成します。 次のようなSQLステートメント:
CREATE TABLE `example`.`stock` ( `STOCK_ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `STOCK_CODE` varchar(10) NOT NULL, `STOCK_NAME` varchar(20) NOT NULL, PRIMARY KEY (`STOCK_ID`) USING BTREE, UNIQUE KEY `UNI_STOCK_NAME` (`STOCK_NAME`), UNIQUE KEY `UNI_STOCK_ID` (`STOCK_CODE`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
2. プロジェクトファイル構造
Mavenコマンド ‘mvn archetype:generate‘、see example hereを使用して、簡単なプロジェクトファイル構造を作成します。 それをEclipseプロジェクト(mvn eclipse:eclipse)に変換し、EclipseIDEにインポートします。
E:\workspace>mvn archetype:generate [INFO] Scanning for projects... ... Choose a number: (1/2/3....) 15: : 15 ... Define value for groupId: : com.example.common Define value for artifactId: : HibernateExample Define value for version: 1.0-SNAPSHOT: : Define value for package: com.example.common: : com.example.common [INFO] OldArchetype created in dir: E:\workspace\HibernateExample [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------
3. Pom.xml file configuration
Mavenのpom.xmlファイルにSpring、Hibernate、MySQL、およびそれらの依存関係を追加します。
4.0.0 com.example.common SpringExample jar 1.0-SNAPSHOT SpringExample http://maven.apache.org junit junit 3.8.1 test org.springframework spring 2.5.6 cglib cglib 2.2 mysql mysql-connector-java 5.1.9 hibernate hibernate3 3.2.3.GA dom4j dom4j 1.6.1 commons-logging commons-logging 1.1.1 commons-collections commons-collections 3.2.1 antlr antlr 2.7.7
4. モデル&BO&DAO
Model、Business Object(BO)、およびData Access Object(DAO)パターンは、プロジェクト構造の混乱を避けるためにレイヤーを明確に識別するのに役立ちます。
ストックモデル
後で株式データを保存する株式モデルクラス。
package com.example.stock.model; import java.io.Serializable; public class Stock implements Serializable { private static final long serialVersionUID = 1L; private Long stockId; private String stockCode; private String stockName; //getter and setter methods... }
ストックビジネスオブジェクト(BO))
ストックビジネスオブジェクト(BO)インターフェースと実装、プロジェクトのビジネス機能を保存するために使用されます。実際のデータベース操作(CRUD)の作業はこのクラスに関係するべきではなく、代わりにDAO(StockDao)クラスがあります。
package com.example.stock.bo; import com.example.stock.model.Stock; public interface StockBo { void save(Stock stock); void update(Stock stock); void delete(Stock stock); Stock findByStockCode(String stockCode); }
package com.example.stock.bo.impl; import com.example.stock.bo.StockBo; import com.example.stock.dao.StockDao; import com.example.stock.model.Stock; public class StockBoImpl implements StockBo{ StockDao stockDao; public void setStockDao(StockDao stockDao) { this.stockDao = stockDao; } public void save(Stock stock){ stockDao.save(stock); } public void update(Stock stock){ stockDao.update(stock); } public void delete(Stock stock){ stockDao.delete(stock); } public Stock findByStockCode(String stockCode){ return stockDao.findByStockCode(stockCode); } }
株式データアクセスオブジェクト
ストックDAOインターフェースと実装であるdao実装クラスは、Springの「HibernateDaoSupport」を拡張して、SpringフレームワークでHibernateをサポートします。 これで、getHibernateTemplate()を介してHibernate関数を実行できます。
package com.example.stock.dao; import com.example.stock.model.Stock; public interface StockDao { void save(Stock stock); void update(Stock stock); void delete(Stock stock); Stock findByStockCode(String stockCode); }
package com.example.stock.dao.impl; import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.example.stock.dao.StockDao; import com.example.stock.model.Stock; public class StockDaoImpl extends HibernateDaoSupport implements StockDao{ public void save(Stock stock){ getHibernateTemplate().save(stock); } public void update(Stock stock){ getHibernateTemplate().update(stock); } public void delete(Stock stock){ getHibernateTemplate().delete(stock); } public Stock findByStockCode(String stockCode){ List list = getHibernateTemplate().find( "from Stock where stockCode=?",stockCode ); return (Stock)list.get(0); } }
5. リソース構成
‘project_name/main/java/ ‘の下に‘resources ‘フォルダーを作成すると、Mavenはこのフォルダーの下のすべてのファイルをリソースファイルとして扱います。 Spring、Hibernate、およびその他の構成ファイルを保存するために使用されます。
休止状態の設定
StockテーブルのHibernateマッピングファイル(Stock.hbm.xml)を作成し、「resources/hibernate/」フォルダーに配置します。
スプリング構成
データベース関連…。
データベースの詳細用のプロパティファイル(database.properties)を作成し、「resources/properties」フォルダに配置します。 データベースの詳細とSpring Beanの構成を異なるファイルに分散することをお勧めします。
database.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/example jdbc.username=root jdbc.password=password
データベースの「dataSource」Bean構成ファイル(DataSource.xml)を作成し、database.propertiesからプロパティをインポートして、「“resources/database」フォルダーに配置します。
DataSource.xml
properties/database.properties
休止状態関連…。
セッションファクトリBean構成ファイル(Hibernate.xml)を作成し、“resources/database”フォルダに配置します。 このLocalSessionFactoryBeanクラスは、Springアプリケーションコンテキストで共有HibernateSessionFactoryをセットアップします。
Hibernate.xml
春豆関連…。
BOクラスとDAOクラスのBean構成ファイル(Stock.xml)を作成し、「resources/spring」フォルダーに配置します。 依存関係は、dao(stockDao)Beanをbo(stockBo)Beanに注入します。 stockDaoへのsessionFactory Bean。
Stock.xml
すべてのSpringのBean構成ファイルを単一のファイル(BeanLocations.xml)にインポートし、それを「resources/config」フォルダーに配置します。
BeanLocations.xml
6. それを実行します
すべてのファイルと構成があり、実行します。
package com.example.common; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.example.stock.bo.StockBo; import com.example.stock.model.Stock; public class App { public static void main( String[] args ) { ApplicationContext appContext = new ClassPathXmlApplicationContext("spring/config/BeanLocations.xml"); StockBo stockBo = (StockBo)appContext.getBean("stockBo"); /** insert **/ Stock stock = new Stock(); stock.setStockCode("7668"); stock.setStockName("HAIO"); stockBo.save(stock); /** select **/ Stock stock2 = stockBo.findByStockCode("7668"); System.out.println(stock2); /** update **/ stock2.setStockName("HAIO-1"); stockBo.update(stock2); /** delete **/ stockBo.delete(stock2); System.out.println("Done"); } }
出力
Hibernate: insert into example.stock (STOCK_CODE, STOCK_NAME) values (?, ?) Hibernate: select stock0_.STOCK_ID as STOCK1_0_, stock0_.STOCK_CODE as STOCK2_0_, stock0_.STOCK_NAME as STOCK3_0_ from example.stock stock0_ where stock0_.STOCK_CODE=? Stock [stockCode=7668, stockId=11, stockName=HAIO] Hibernate: update example.stock set STOCK_CODE=?, STOCK_NAME=? where STOCK_ID=? Hibernate: delete from example.stock where STOCK_ID=? Done
ダウンロード–Spring-Hibernate-Example.zip