spring boot集成hibernate

来源:互联网 发布:mac ifconfig en0 编辑:程序博客网 时间:2024/06/16 04:08

这里主要介绍springboot集成hibernate,通过在dao中注入SessionFactory来访问数据库

创建一个maven项目chapter12-hibernate,pom配置文件如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.study</groupId>  <artifactId>chapter12-hibernate</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>jar</packaging>  <name>chapter12-hibernate</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>   <parent>       <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.3.0.RC1</version>  </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-data-jpa</artifactId>    <exclusions>    <exclusion>      <groupId>org.apache.tomcat</groupId>                      <artifactId>tomcat-jdbc</artifactId>    </exclusion>    </exclusions></dependency><dependency>               <groupId>mysql</groupId>               <artifactId>mysql-connector-java</artifactId>        </dependency><dependency>                <groupId>commons-dbcp</groupId>                <artifactId>commons-dbcp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>  </dependencies>     <build>        <plugins>                    <plugin>            <artifactId>maven-compiler-plugin</artifactId>            <configuration>            <source>1.7</source>            <target>1.7</target>            </configuration>            </plugin>                        <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build>  <repositories>        <repository>            <id>spring-milestone</id>            <url>http://repo.spring.io/libs-milestone</url>            <snapshots>                <enabled>false</enabled>            </snapshots>        </repository>    </repositories>        <pluginRepositories>        <pluginRepository>            <id>spring-milestone</id>            <url>http://repo.spring.io/libs-milestone</url>            <snapshots>                <enabled>false</enabled>            </snapshots>        </pluginRepository>    </pluginRepositories></project>


配置application.properties文件

spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver


spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect


创建启动类

package com.study.chapter12;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}

创建实体类

package com.study.chapter12.model;import javax.persistence.*;@Entity@Tablepublic class UserDetails {@Id@Column@GeneratedValue(strategy = GenerationType.IDENTITY)private int id;@Columnprivate String firstName;@Columnprivate String lastName;@Columnprivate String email;@Columnprivate String password;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}

创建dao接口

package com.study.chapter12.dao;import java.util.List;import com.study.chapter12.model.UserDetails;public interface UserDao {public List<UserDetails> getUserDetails() ;}


创建dao接口实现类,并注入SessionFactory

package com.study.chapter12.dao.impl;import java.util.List;import org.hibernate.Criteria;import org.hibernate.SessionFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import com.study.chapter12.dao.UserDao;import com.study.chapter12.model.UserDetails;@Repositorypublic class UserDaoImpl implements UserDao {@Autowiredprivate SessionFactory sessionFactory;@Overridepublic List<UserDetails> getUserDetails() {Criteria criteria = sessionFactory.openSession().createCriteria(UserDetails.class);return criteria.list();}}

创建service接口

package com.study.chapter12.service;import java.util.List;import com.study.chapter12.model.UserDetails;public interface UserService {public List<UserDetails> getUserDetails();}

创建service接口实现类

package com.study.chapter12.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.study.chapter12.dao.UserDao;import com.study.chapter12.model.UserDetails;import com.study.chapter12.service.UserService;@Servicepublic class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;public List<UserDetails> getUserDetails() {return userDao.getUserDetails();}}

创建我们的控制器

package com.study.chapter12.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.study.chapter12.model.UserDetails;import com.study.chapter12.service.UserService;@Controllerpublic class UserController {@Autowiredprivate UserService userService;@RequestMapping(value = "/list", method = RequestMethod.GET)public ResponseEntity userDetails() {List<UserDetails> userDetails = userService.getUserDetails();return new ResponseEntity(userDetails, HttpStatus.OK);}}

最后步骤,也是最重要的一步:配置注入SessionFactory

新建一个HibernateConfig,该类必须加入@Configuration注解

package com.study.chapter12.config;import javax.persistence.EntityManagerFactory;import org.hibernate.SessionFactory;import org.hibernate.jpa.HibernateEntityManagerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.orm.jpa.vendor.HibernateJpaSessionFactoryBean;@Configurationpublic class HibernateConfig {/** * 配置SessionFactory * /public SessionFactory sesssionFactory(EntityManagerFactory entityManagerFactory){if (entityManagerFactory.unwrap(SessionFactory.class) == null) {        throw new NullPointerException("factory is not a hibernate factory");    }else{    return entityManagerFactory.unwrap(SessionFactory.class);    }}}


测试:访问http://localhost:8080/list

源码下载地址:http://download.csdn.net/detail/guishengbin/9848564



备注:

也可通过如下二种方式配置SessionFactory对象

/**
* 1.在application.properties配置文件中加入:spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
* 2.配置HibernateJpaSessionFactoryBean
* @Bean
public HibernateJpaSessionFactoryBean sessionFactory() {
   return new HibernateJpaSessionFactoryBean();
}
3.在dao中注入SessionFactory 
 @Autowired
 private SessionFactory sessionFactory;
*/
@Bean
public HibernateJpaSessionFactoryBean sessionFactory() {
   return new HibernateJpaSessionFactoryBean();
}

/*@Bean
public SessionFactory sessionFactory(HibernateEntityManagerFactory hemf) {
   return hemf.getSessionFactory();
}*/






原创粉丝点击