我是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,为什么要这样做。
答案 0 :(得分:0)
我更喜欢使用 application.properties 来配置我的Spring Boot Application,这是维护它甚至定义一个概要文件以外的更有效方法。
您的示例DatabaseConfiguration.java文件是一种强制应用程序以编程方式读取属性的方法,并且在需要时还会添加一些逻辑。