设置Spring + hibernate + postgresql

时间:2014-08-16 05:47:46

标签: mysql spring hibernate postgresql

有人为初学者提供了一个关于Spring + hibernate + postgresql(mysql)for mave项目的好教程吗?请shrare。

我在互联网上发现了很多教程,但大多数(全部)教程已经过时了。我一直在尝试设置3天的权利,但无法做到正确。很难过,现在我不知道哪一个是正确的:(

谢谢

3 个答案:

答案 0 :(得分:1)

查看http://spring.io/guides处的指南 - 特别是Spring Boot应该简化设置。

答案 1 :(得分:0)

从开发角度来看,最快的方法是使用像@stivlo这样的Spring Boot。 Spring Boot允许您使用各种Spring项目快速启动项目,并相当快速地创建数据感知Java应用程序。如果您希望通过深入了解详细信息来学习堆栈,则应阅读指南和项目文档。

简单来说,如果您希望使用Spring创建一个数据驱动的应用程序,那么最好将Spring Data及其子项目与Spring Core一起使用。通常,您可以使用以下技术来简化开发:

  1. Spring Core用于依赖注入,面向方面编程等;
  2. Spring Data JPA,用于连接到RDBMS;
  3. 事务管理的Spring事务。
  4. 此堆栈最常见的开发工作流程将是:

    1. 将域实体建模为JPA实体类。
    2. 使用扩展JpaRepository的接口生成数据访问层,以实现开箱即用的数据库连接。
    3. 开发服务或业务逻辑层以编排数据访问层并应用业务规则。
    4. 在目前为止开发的代码之上开发消费者应用程序。这些可以是Web层,REST API,SOAP接口等。
    5. 使用Spring配置连接所有内容(可以通过Java类或XML文件完成)。
    6. 示例应用是available on Github。它具有以下内容:

      1. 一个名为org.example.domain.Person
      2. 的域名实体
      3. 一个名为org.example.data.PersonRepository的数据访问接口。
      4. 一个名为org.example.service.PersonService的业务逻辑类。
      5. 一个名为org.example.web.PersonController的消费者类。
      6. Spring配置文件springDataContext.xmlspringServiceContext.xmlspringWebContext.xml。这些可能是一个文件,但是已经创建为单独的文件,以便更好地控制Spring如何处理每个层中的托管组件。
      7. 该应用程序使用Scala作为编程语言以简化代码,但等效的Java代码将类似。 Hibernate用作持久性提供程序,H2用作内存数据库作为持久性存储。通过springDataContext.xml中的配置,可以使用其他适当的替代方法轻松替换它们,而无需对已编译的代码进行任何更改。

        您可以调整此应用程序的任何部分以满足特定需求,例如,摆脱Spring Data JPA并将其替换为Spring JdbcTemplate以用于手动编码SQL等。

答案 2 :(得分:0)

在这里查看一个非常简单的示例,说明如何在 Sping Boot Web应用程序(使用JPA + Hibernate)中使用 MySQL http://blog.netgloo.com/2014/08/17/use-mysql-database-in-a-spring-boot-web-application-through-hibernate/

您应该在pom.xml文件中添加以下依赖项:

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.1.5.RELEASE</version>
  <relativePath />
</parent>

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
  </dependency>
</dependencies>

application.properties文件中设置数据库配置:

# Database
db.driver: com.mysql.jdbc.Driver
db.url: jdbc:mysql://localhost:8889/coderpills
db.username: root
db.password: root

# Hibernate
hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql: true
hibernate.hbm2ddl.auto: update
entitymanager.packagesToScan: coderpills

创建一个Spring配置java类(例如DatabaseConfig.java):

@Configuration
@EnableTransactionManagement
public class DatabaseConfig {

  @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 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 LocalSessionFactoryBean sessionFactory() {
    LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
    sessionFactoryBean.setDataSource(dataSource());
    sessionFactoryBean.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);
    sessionFactoryBean.setHibernateProperties(hibernateProperties);
    return sessionFactoryBean;
  }

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

}

然后你可以创建一个实体类,例如User类:

@Entity
@Table(name="users")
public class User {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  public long id;

  @NotNull
  public String email;

  @NotNull
  public String name;

  public User() { }

  public User(long id) { 
    this.id = id;
  }

  public User(String email, String name) {
    this.email = email;
    this.name = name;
  }

}

使用其DAO对象:

@Repository
@Transactional
public class UserDao {

  @Autowired
  private SessionFactory _sessionFactory;

  private Session getSession() {
    return _sessionFactory.getCurrentSession();
  }

  public void save(User user) {
    getSession().save(user);
  }

  // Other methods
  // ...

}

最后,您可以使用控制器内的DAO对象自动装配它:

@Controller
public class UserController {

  @Autowired
  private UserDao _userDao;

  // You can use the UserDao methods in this controller
  // ...

}

修改上面的示例代码以与PostgresSQL而不是MySQL建立连接应该不难。