使用Hibernate与Mysql进行SpringBoot集成

时间:2018-07-17 20:42:50

标签: mysql spring hibernate spring-boot

我是springboot和hibernate的新手,无法弄清楚不同的注释,并且我了解到对于其他设置(例如数据库属性),在资源文件夹中有一个名为application.properties的文件,我们可以在其中设置数据库url,用户名,密码等。

application properties
#Database
db.driver: com.mysql.jdbc.Driver
db.url: jdbc:mysql://localhost:3306/scm
db.username: root
db.password: password
# Hibernate
hibernate.dialect: org.hibernate.dialect.MySQLDialect
hibernate.show_sql: true
hibernate.hbm2ddl.auto: create

但是我遇到了一个文件DatabaseConfiguration.java,它具有类似这样的代码。

import java.util.Properties;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

 @Configuration
@EnableTransactionManagement
public class HibernateConfiguration {

  @Value("${db.driver}")
  private String DB_DRIVER;

   @Value("${db.password}")
   private String DB_PASSWORD;

   @Value("${db.url}")
   private String DB_URL;

   @Value("${db.username}")
   private String DB_USERNAME;

  @Value("${hibernate.dialect}")
  private String HIBERNATE_DIALECT;

  @Value("${hibernate.show_sql}")
  private String HIBERNATE_SHOW_SQL;

  @Value("${hibernate.hbm2ddl.auto}")
  private String HIBERNATE_HBM2DDL_AUTO;

  @Value("${entitymanager.packagesToScan}")
  private String ENTITYMANAGER_PACKAGES_TO_SCAN;

  @Bean
  public LocalSessionFactoryBean sessionFactory() {
  LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
  sessionFactory.setDataSource(dataSource());
  sessionFactory.setPackagesToScan(ENTITYMANAGER_PACKAGES_TO_SCAN);
  Properties hibernateProperties = new Properties();
    hibernateProperties.put("hibernate.dialect", HIBERNATE_DIALECT);
    hibernateProperties.put("hibernate.show_sql", HIBERNATE_SHOW_SQL);
    hibernateProperties.put("hibernate.hbm2ddl.auto", HIBERNATE_HBM2DDL_AUTO);
    sessionFactory.setHibernateProperties(hibernateProperties);
    return sessionFactory;
}

@Bean
public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName(DB_DRIVER);
    dataSource.setUrl(DB_URL);
    dataSource.setUsername(DB_USERNAME);
    dataSource.setPassword(DB_PASSWORD);
    return dataSource;
}

@Bean
public HibernateTransactionManager transactionManager() {
    HibernateTransactionManager txManager = new HibernateTransactionManager();
    txManager.setSessionFactory(sessionFactory().getObject());
    return txManager;
}

}

为什么我应该两次提及数据库属性(在应用程序属性中,DatabaseConfig.java)

我为什么要为上述方法提供@Bean批注,以及@Bean@Autowire批注与

之间的关系是什么?

有些自动装配的注释,例如@UserDao,没有提供@Bean注释,那么如何接受sessionFactory自动装配,应该提供像bean这样的接受。

 package com.candidjava.spring.service;

import java.util.List;

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

import com.candidjava.spring.bean.User;
import com.candidjava.spring.dao.UserDao;

@Service
@Transactional
public class UserServiceImp implements UserService {
@Autowired
UserDao userDao;


public List<User> getUser() {
    // TODO Auto-generated method stub
    return userDao.getUser();
}

public User findById(int id) {
    // TODO Auto-generated method stub
    return userDao.findById(id);
}

public void createUser(User user) {
    // TODO Auto-generated method stub
    userDao.addUser(user);
}

public void deleteUserById(int id) {
    // TODO Auto-generated method stub
    userDao.delete(id);
}
@Override
public User updatePartially(User user, int id) {
    userDao.updateCountry(user,id);
    return userDao.findById(id);
}

@Override
public User update(User user,int id) {
    // TODO Auto-generated method stub
    return userDao.update(user, id);
}

}

请解释在DatabaseConfig中使用的批注(例如@value)以及什么是HibernateTransactionmanager,为什么要这样做。

1 个答案:

答案 0 :(得分:0)

我更喜欢使用 application.properties 来配置我的Spring Boot Application,这是维护它甚至定义一个概要文件以外的更有效方法。

您的示例DatabaseConfiguration.java文件是一种强制应用程序以编程方式读取属性的方法,并且在需要时还会添加一些逻辑。