Рубрики
Без рубрики

Maven + (Весна + Спящий режим) Аннотация + Пример MySQL

– Maven + (Весна + Спящий режим) Аннотация + Пример MySQL

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

Предварительное требование

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

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

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

1. Создание таблицы

Создайте таблицу “запасы” в базе данных MySQL. Инструкция SQL выглядит следующим образом:

CREATE TABLE  `mkyong`.`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: создать ‘, см. Пример здесь . Преобразуйте его в проект Eclipse ( mvn eclipse: eclipse ) и импортируйте в среду разработки Eclipse.

E:\workspace>mvn archetype:generate
[INFO] Scanning for projects...
...
Choose a number:  
(1/2/3....) 15: : 15
...
Define value for groupId: : com.mkyong.common
Define value for artifactId: : HibernateExample
Define value for version:  1.0-SNAPSHOT: :
Define value for package:  com.mkyong.common: : com.mkyong.common
[INFO] OldArchetype created in dir: E:\workspace\HibernateExample
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------

3. Pom.xml конфигурация файла

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


  4.0.0
  com.mkyong.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) полезен для четкой идентификации слоя, чтобы избежать путаницы в структуре проекта.

Модель запаса (Аннотация)

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

package com.mkyong.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 = "mkyong", 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), он используется для хранения бизнес-функции проекта, в этом классе не должны использоваться операции с реальными базами данных (CRUD), вместо этого для этого используется класс DAO (stockdao).

package com.mkyong.stock.bo;

import com.mkyong.stock.model.Stock;

public interface StockBo {
	
	void save(Stock stock);
	void update(Stock stock);
	void delete(Stock stock);
	Stock findByStockCode(String stockCode);
}

Сделайте этот класс бобовым “мальчиком на складе” в контейнере Spring Ioc и автоматически подключите класс dao.

package com.mkyong.stock.bo.impl;

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

import com.mkyong.stock.bo.StockBo;
import com.mkyong.stock.dao.StockDao;
import com.mkyong.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 “, но это невозможно сделать в режиме аннотации, потому что у вас нет возможности автоматически подключить компонент фабрики сеансов из вашего класса DAO. Обходным путем является создание пользовательского класса ( CustomHibernateDaoSupport ) и расширение ” HibernateDaoSupport ” и автоматическое подключение фабрики сеансов, а ваши классы DAO расширяют этот класс.

package com.mkyong.stock.dao;

import com.mkyong.stock.model.Stock;

public interface StockDao {
	
	void save(Stock stock);
	void update(Stock stock);
	void delete(Stock stock);
	Stock findByStockCode(String stockCode);

}
package com.mkyong.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.mkyong.stock.dao.impl;

import java.util.List;

import org.springframework.stereotype.Repository;

import com.mkyong.stock.dao.StockDao;
import com.mkyong.stock.model.Stock;
import com.mkyong.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. Конфигурация ресурсов

Создайте папку ” ресурсы ” в папке “имя_проекта/главная/java/ “, Maven будет обрабатывать все файлы в этой папке как файл ресурсов. Он будет использоваться для хранения файла конфигурации Spring, Hibernate и других.

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

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

Создайте файл свойств (database.properties ) для получения сведений о базе данных поместите ее в папку ” ресурсы/свойства “. Рекомендуется разделять сведения о базе данных и конфигурацию компонентов Spring в разных файлах.

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

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

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

Создайте файл конфигурации компонента “Источник данных” (|| DataSource.xml ||) для вашей базы данных и импортируйте свойства из database.properties, поместите их в папку || “ресурсы/база данных||”.


	

	
		properties/database.properties
	



	
	
	
	



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

Создайте файл конфигурации компонента фабрики сеансов (Hibernate.xml ), поместите его в папку “ресурсы/база данных “. В аннотации вы должны использовать Аннотациясессияфакторибеан , вместо LocalSessionFactoryBean и укажите свои аннотированные классы моделей в ‘ Аннотированные классы‘ свойство вместо ‘ сопоставление ресурсов

|| ‘|| ‘ свойство вместо ‘||сопоставление ресурсов || ‘ свойство.



    



    
      
    

    
       
         org.hibernate.dialect.MySQLDialect
         true
       
    
    	
    
	
		com.mkyong.stock.model.Stock
	
    

    
    

Импортируйте все файлы конфигурации компонентов Spring в один файл (BeanLocations.xml ), поместите его в папку ” ресурсы/конфигурация “.

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



	
	
	
	
	
	
	

6. Запустите его

У вас есть все файлы и конфигурации, запустите его.

package com.mkyong.common;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.mkyong.stock.bo.StockBo;
import com.mkyong.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 mkyong.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 mkyong.stock stock0_ where stock0_.STOCK_CODE=?
Stock [stockCode=7668, stockId=11, stockName=HAIO]
Hibernate: update mkyong.stock set STOCK_CODE=?, STOCK_NAME=? where STOCK_ID=?
Hibernate: delete from mkyong.stock where STOCK_ID=?
Done

Вывод

Все классы Spring, Hibernate, связанные с ними, и файлы конфигурации аннотированы, они просто оставили сведения о базе данных в XML-файле. Если вы знаете, как аннотировать детали конфигурации базы данных, пожалуйста, дайте мне знать. Лично я не очень часто использую функцию аннотаций, потому что вам может потребоваться какое-то обходное решение для определенной ситуации, например, “customhibernatedaosupport” расширяет “HibernateDaoSupport” выше. Зрелый разработанный XML-файл весной и в спящем режиме. это более предпочтительно.

Оригинал: “https://mkyong.com/spring/maven-spring-hibernate-annotation-mysql-example/”