Maven + (Spring + Hibernate) Anmerkung + MySql-Beispiel

Maven + (Spring + Hibernate) Annotation + MySQL-Beispiel

Laden Sie es herunter -Spring-Hibernate-Annotation-Example.zip

Inlast tutorial verwenden Sie Maven, um eine einfache Java-Projektstruktur zu erstellen, und zeigen, wie Sie mit Hibernate in Spring Framework die Datenmanipulationsarbeiten (Einfügen, Auswählen, Aktualisieren und Löschen) in der MySQL-Datenbank ausführen. In diesem Lernprogramm erfahren Sie, wie Sie auf die gleiche Weise die Annotation "Frühling" und "Ruhezustand" ausführen.

Voraussetzung

- Installierte und konfigurierte Maven, MySQL, Eclipse IDE.

Diejavaee.jar-Bibliothek ist ebenfalls erforderlich. Sie können sie aus dem j2ee SDK herunterladen und manuell einbinden. Es ist noch keine Vollversion vonjavaee.jar in einem der Maven-Repositorys verfügbar.

Endgültige Projektstruktur

Ihre endgültige Projektdateistruktur sollte genau wie folgt aussehen: Wenn Sie bei der Erstellung der Ordnerstruktur verloren gehen, überprüfen Sie diese Ordnerstruktur hier.

image

1. Tabellenerstellung

Erstellen Sie eine Bestandsliste in der MySQL-Datenbank. SQL-Anweisung wie folgt:

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. Projektdateistruktur

Erstellen Sie eine schnelle Projektdateistruktur mit dem Maven-Befehl 'mvn archetype:generate',see example here. Konvertieren Sie es in ein Eclipse-Projekt (mvn eclipse:eclipse) und importieren Sie es in die Eclipse-IDE.

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

Fügen Sie die Dateien Spring, Hibernate, Annotation und MySQL sowie deren Abhängigkeit in die pom.xml-Datei des Maven ein.


  4.0.0
  com.example.common
  SpringExample
  jar
  1.0-SNAPSHOT
  SpringExample
  http://maven.apache.org

  
    
      JBoss repository
      http://repository.jboss.com/maven2/
    
  

  

        
        
                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
    

    
    
        hibernate-annotations
        hibernate-annotations
        3.3.0.GA
    

    
        hibernate-commons-annotations
        hibernate-commons-annotations
        3.0.0.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. Model & BO & DAO

Das MusterModel,Business Object (BO) undData Access Object (DAO) ist nützlich, um die Ebene eindeutig zu identifizieren und ein Durcheinander der Projektstruktur zu vermeiden.

Lagermodell (Anmerkung)

Eine Annotation-Klasse für das Stock-Modell zum Speichern der Stock-Daten.

package com.example.stock.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

@Entity
@Table(name = "stock", catalog = "example", uniqueConstraints = {
        @UniqueConstraint(columnNames = "STOCK_NAME"),
        @UniqueConstraint(columnNames = "STOCK_CODE") })
public class Stock implements java.io.Serializable {

    private Integer stockId;
    private String stockCode;
    private String stockName;

    public Stock() {
    }

    public Stock(String stockCode, String stockName) {
        this.stockCode = stockCode;
        this.stockName = stockName;
    }

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "STOCK_ID", unique = true, nullable = false)
    public Integer getStockId() {
        return this.stockId;
    }

    public void setStockId(Integer stockId) {
        this.stockId = stockId;
    }

    @Column(name = "STOCK_CODE", unique = true, nullable = false, length = 10)
    public String getStockCode() {
        return this.stockCode;
    }

    public void setStockCode(String stockCode) {
        this.stockCode = stockCode;
    }

    @Column(name = "STOCK_NAME", unique = true, nullable = false, length = 20)
    public String getStockName() {
        return this.stockName;
    }

    public void setStockName(String stockName) {
        this.stockName = stockName;
    }

    @Override
    public String toString() {
        return "Stock [stockCode=" + stockCode + ", stockId=" + stockId
                + ", stockName=" + stockName + "]";
    }
}
Bestandsgeschäftsobjekt (BO)

Stock Business Object (BO) -Schnittstelle und -Implementierung, wird zum Speichern der Geschäftsfunktion des Projekts verwendet. Die CRUD-Funktion (Real Database Operations) sollte nicht in diese Klasse einbezogen werden. Stattdessen wird eine DAO-Klasse (StockDao) verwendet.

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);
}

Stellen Sie diese Klasse als Bean "stockBo" im Spring Ioc-Container ein und führen Sie eine automatische Verdrahtung der Klasse "stock dao" durch.

package com.example.stock.bo.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.stock.bo.StockBo;
import com.example.stock.dao.StockDao;
import com.example.stock.model.Stock;

@Service("stockBo")
public class StockBoImpl implements StockBo{

    @Autowired
    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);
    }
}
Bestandsdatenzugriffsobjekt

Eine Stock DAO-Schnittstelle und Implementierung. Im letzten Lernprogramm werden Ihre DAO-Klassen direkt um "HibernateDaoSupport" erweitert. Dies ist jedoch im Anmerkungsmodus nicht möglich, da Sie die Session Factory-Bean nicht automatisch mit Ihrer DAO-Klasse verbinden können. Die Problemumgehung besteht darin, eine benutzerdefinierte Klasse (CustomHibernateDaoSupport) zu erstellen und die "HibernateDaoSupport" zu erweitern und die Sitzungsfactory automatisch zu verkabeln. Ihre DAO-Klassen erweitern diese Klasse.

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.util;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public abstract class CustomHibernateDaoSupport extends HibernateDaoSupport
{
    @Autowired
    public void anyMethodName(SessionFactory sessionFactory)
    {
        setSessionFactory(sessionFactory);
    }
}
package com.example.stock.dao.impl;

import java.util.List;

import org.springframework.stereotype.Repository;

import com.example.stock.dao.StockDao;
import com.example.stock.model.Stock;
import com.example.util.CustomHibernateDaoSupport;

@Repository("stockDao")
public class StockDaoImpl extends CustomHibernateDaoSupport 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. Ressourcenkonfiguration

Erstellen Sie einenresources-Ordner unter‘project_name/main/java/. Maven behandelt alle Dateien in diesem Ordner als Ressourcendatei. Es wird verwendet, um die Konfigurationsdatei von Spring, Hibernate und anderen zu speichern.

Federkonfiguration

Datenbankbezogen….

Erstellen Sie eine Eigenschaftendatei(database.properties) für die Datenbankdetails und legen Sie sie im Ordner "resources/properties" ab. Es wird empfohlen, die Datenbankdetails und die Spring Bean-Konfiguration in verschiedene Dateien zu unterteilen.

database.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/example
jdbc.username=root
jdbc.password=password

Erstellen Sie eine Bean-Konfigurationsdatei "dataSource" (DataSource.xml) für Ihre Datenbank, importieren Sie die Eigenschaften aus database.properties und legen Sie sie im Ordner "“resources/database" ab.

DataSource.xml




    
        properties/database.properties
    



    
    
    
    


Ruhezustand im Zusammenhang….

Erstellen Sie eine Session Factory Bean-Konfigurationsdatei(Hibernate.xml) und legen Sie sie im Ordner“resources/database ab. In Annotationen müssen SieAnnotationSessionFactoryBean anstelle vonLocalSessionFactoryBean verwenden und Ihre annotierten Modellklassen in der Eigenschaft "annotatedClasses" anstelle der Eigenschaft "mappingResources" angeben.

Hibernate.xml






    
      
    

    
       
         org.hibernate.dialect.MySQLDialect
         true
       
    

    
    
        com.example.stock.model.Stock
    
    

    

Importieren Sie alle Bean-Konfigurationsdateien von Spring in eine einzige Datei (BeanLocations.xml) und legen Sie sie im Ordner "resources/config" ab.

BeanLocations.xml
Importieren Sie die Spring-Datenbankkonfiguration und aktivieren Sie die automatische Scanfunktion von Spring.



    
    
    

    
    

6. Starte es

Sie haben alle Dateien und Konfigurationen, führen Sie es aus.

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");
    }
}

Ausgabe

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

Fazit

Alle mit Spring, Hibernate zusammenhängenden Klassen und Konfigurationsdateien sind mit Anmerkungen versehen. Es wurden lediglich die Datenbankdetails in der XML-Datei belassen. Wenn Sie wissen, wie Sie die Details der Datenbankkonfiguration mit Anmerkungen versehen, lassen Sie es mich bitte wissen. Persönlich verwende ich die Anmerkungsfunktion nur selten, da Sie in bestimmten Situationen möglicherweise eine Problemumgehung benötigen, z. B. "CustomHibernateDaoSupport" oder "HibernateDaoSupport". Die ausgereifte entwickelte XML-Datei in Spring and Hibernate. ist besonders bevorzugt.