Maven (Spring Hibernate) Аннотация MySql Пример

Maven + (Spring + Hibernate) Аннотация + Пример MySql

Скачать -Spring-Hibernate-Annotation-Example.zip

Вlast tutorial вы используете Maven для создания простой структуры проекта Java и демонстрируете, как использовать Hibernate в среде Spring для работы с данными (вставка, выбор, обновление и удаление) в базе данных MySQL. В этом уроке вы узнаете, как сделать то же самое в Spring и Hibernate.

Обязательное требование

- Установлены и настроены Maven, MySQL, Eclipse IDE.

Также требуется библиотекаjavaee.jar, вы можете получить ее из j2ee SDK и включить вручную, полной версииjavaee.jar пока нет ни в одном репозитории Maven.

Окончательная структура проекта

Ваша окончательная структура файла проекта должна выглядеть примерно так: если вы потерялись в создании структуры папок, просмотрите эту структуру папок здесь.

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) и импортируйте в 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

Добавьте Spring, Hibernate, Annotation и MySQL и их зависимости в файле Maven pom.xml.


  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. Модель & BO & DAO

ШаблоныModel,Business Object (BO) иData Access Object (DAO) полезны для четкой идентификации уровня, чтобы избежать нарушения структуры проекта.

Фондовая модель (аннотация)

Класс аннотации модели запаса для хранения данных запаса.

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 + "]";
    }
}
Фондовый бизнес-объект (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);
}

Создайте этот класс в качестве bean-компонента «stockBo» в контейнере Spring Ioc и автоматически подключите класс «Дао».

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);
    }
}
Объект доступа к данным запаса

Стандартный интерфейс DAO и его реализация. В последнем руководстве классы DAO напрямую расширяют «HibernateDaoSupport», но это невозможно сделать в режиме аннотации, потому что у вас нет возможности автоматически подключить компонент Factory сеанса из вашего класса DAO. Обходной путь - создать собственный класс (CustomHibernateDaoSupport) и расширить «HibernateDaoSupport» и автоматически подключить фабрику сеанса, а ваши классы DAO расширяют этот класс.

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. Конфигурация ресурса

Создайте папку «resources» в папке‘project_name/main/java/ », Maven будет рассматривать все файлы в этой папке как файлы ресурсов. Он будет использоваться для хранения конфигурационного файла Spring, Hibernate и других.

Конфигурация пружины

Связано с базой данных….

Создайте файл свойств(database.properties) для деталей базы данных, поместите его в папку «resources/properties». Рекомендуется разделять детали базы данных и конфигурацию bean-компонента Spring в разные файлы.

database.properties

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

Создайте файл конфигурации bean-компонента dataSource (DataSource.xml) для своей базы данных, импортируйте свойства из database.properties и поместите его в папку“resources/database.

DataSource.xml




    
        properties/database.properties
    



    
    
    
    


Связанные с гибернацией….

Создайте файл конфигурации компонента фабрики сеанса(Hibernate.xml), поместите его в папку“resources/database ». В аннотации вы должны использоватьAnnotationSessionFactoryBean вместоLocalSessionFactoryBean и указать классы аннотированной модели в свойстве «annotatedClasses» вместо свойства «mappingResources».

Hibernate.xml







    
      
    

    
       
         org.hibernate.dialect.MySQLDialect
         true
       
    

    
    
        com.example.stock.model.Stock
    
    

    

Импортируйте все файлы конфигурации bean-компонентов Spring в один файл (BeanLocations.xml), поместите его в папку «resources/config».

BeanLocations.xml
Импортируйте конфигурацию базы данных Spring и включите функцию автоматического сканирования Spring.



    
    
    

    
    

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 классы и файлы конфигурации аннотированы, данные о базе данных оставлены в XML-файле. Если вы знаете, как комментировать детали конфигурации базы данных, пожалуйста, дайте мне знать. Лично я не очень часто использую функцию аннотаций, потому что каким-то образом вам может понадобиться обходной путь для определенной ситуации, например «CustomHibernateDaoSupport», расширенный «HibernateDaoSupport» выше. Зрелый разработанный XML-файл в Spring и Hibernate. более предпочтительно.