Maven Spring Hibernate MySqlの例

Maven + Spring + Hibernate + MySqlの例

この例では、Mavenを使用して簡単なJavaプロジェクト構造を作成し、MySQLデータベースでデータフレームワーク(挿入、選択、更新、削除)を行うためにSpringフレームワークでHibernateを使用する方法を示します。

最終プロジェクト構造

最終的なプロジェクトファイル構造は次のようになります。フォルダ構造の作成に迷った場合は、ここでこのフォルダ構造を確認してください。

image

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

ModelBusiness 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







    
      
    

    
       
         org.hibernate.dialect.MySQLDialect
         true
       
     

     
    
           /hibernate/Stock.hbm.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