SpringBoot和Hibernate整合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot和Hibernate整合相关的知识,希望对你有一定的参考价值。

1.先使用idea创建maven项目(这个就不详细讲了,很简单的操作)

2.创建完maven项目之后添加springboot依赖,pom.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<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>cn.tongdun.gwl</groupId>
    <artifactId>SpringBootTest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!--springboot依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

    <build>
        <finalName>hibernateSpringDemo</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

pom文件编写完毕,配置maven路径,并导入依赖.

3.接下来写一个SpringBoot入门程序

(1)新建类MyTest.java

技术分享

 1 package cn.huawei.gwl;
 2 
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 import org.springframework.context.annotation.ComponentScan;
 6 
 7 @SpringBootApplication
 8 @ComponentScan(basePackages = "cn")
 9 public class MyTest {
10 
11     public static void main(String[] args) {
12         SpringApplication.run(MyTest.class, args);
13     }
14 }

需要注意的是:这个类的上面需要添加SpringBoot的注解@SpringBootApplication,然后在主函数中开始启动.

(2)然后创建一个HelloContreller类,用来测试SpringBoot

 1 package cn.huawei.gwl;
 2 
 3 import org.springframework.web.bind.annotation.PathVariable;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RestController;
 6 
 7 
 8 @RestController
 9 public class HelloController {
10 
11     @RequestMapping("/say")
12     String home() {
13         System.out.println("get into");
14         return "hello world";
15     }
16 
17     @RequestMapping("/hello/{name}")
18     String hello(@PathVariable String name) {
19         return "hello" + name;
20     }
21 }

需要注意的是这上面的几个注解:

  • @RestController:表示这是个控制器,和Controller类似
  • @EnableAutoConfiguration:springboot没有xml配置文件因为这个注解帮助我们干了这些事情,有了这个注解springboot启动的时候回自动猜测你的配置文件从而部署你的web服务器
  • @RequestMapping(“/say”):这个和SpringMvc中的类似了。
  • @PathVariable:参数

4.在浏览器中输入:http://localhost:8080/say 和 http://localhost:8080/hello/haha 浏览器上即可得到输出结果.

  SpringBoot程序验证完毕.

5.接下来再pom.xml文件里面添加要使用的jpa依赖:

1         <dependency>
2             <groupId>org.springframework.boot</groupId>
3             <artifactId>spring-boot-starter-data-jpa</artifactId>
4         </dependency>
5         <dependency>
6             <groupId>mysql</groupId>
7             <artifactId>mysql-connector-java</artifactId>
8         </dependency>

并导入依赖

6.添加依赖之后需要配置一些连接MySQL所需要的配置,创建一个application.properties:

 1 spring.datasource.url = jdbc:mysql://localhost:3306/test
 2 spring.datasource.username = root
 3 spring.datasource.password = abcd1234
 4 spring.datasource.driverClassName = com.mysql.jdbc.Driver
 5 # Specify the DBMS
 6 spring.jpa.database = MYSQL
 7 # Show or not log for each sql query
 8 spring.jpa.show-sql = true
 9 # Hibernate ddl auto (create, create-drop, update)
10 spring.jpa.hibernate.ddl-auto = update
11 # Naming strategy
12 spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
13 # stripped before adding them to the entity manager
14 spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

7.为main方法添加注解@EnableJpaRepositories

 1 package cn.tongdun.gwl;
 2 
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 import org.springframework.context.annotation.ComponentScan;
 6 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 7 
 8 
 9 @SpringBootApplication
10 @EnableJpaRepositories
11 @ComponentScan(basePackages = "cn")
12 public class MyTest {
13 
14     public static void main(String[] args) {
15         SpringApplication.run(MyTest.class, args);
16     }
17 }

8.接下来创建dao层,不过在这里是repository包,例如创建一个User实体,然后再创建一个UserRepository:

 1 package cn.tongdun.gwl;
 2 
 3 import org.springframework.data.jpa.repository.Query;
 4 import org.springframework.data.repository.CrudRepository;
 5 import org.springframework.data.repository.query.Param;
 6 
 7 public interface UserRepository extends CrudRepository<User, Long> {
 8 
 9     public User findOne(Long id);
10 
11     public User save(User user);
12 }

这里面是创建一个UserRepository接口,并不需要创建UserRepository实现,springboot默认会帮你实现,继承自CrudRepository,@Param代表的是sql语句中的占位符,例如这里的@Param(“name”)代表的是:name占位符。 

9.下面再控制层使用UserRepository,创建一个HibernateController:

 1 package cn.tongdun.gwl;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 5 import org.springframework.stereotype.Controller;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7 import org.springframework.web.bind.annotation.ResponseBody;
 8 
 9 import java.util.Date;
10 
11 @Controller
12 @RequestMapping("/hibernate")
13 @EnableAutoConfiguration
14 public class HibernateController {
15 
16     @Autowired
17     private UserRepository userRepository;
18 
19     @RequestMapping("getUserById")
20     @ResponseBody
21     public User getUserById(Long id) {
22         User u = userRepository.findOne(id);
23         System.out.println("userRepository: " + userRepository);
24         System.out.println("id: " + id);
25         return u;
26     }
27 
28     @RequestMapping("saveUser")
29     @ResponseBody
30     public void saveUser() {
31         User u = new User();
32         u.setUserName("wan");
33         u.setAddress("浙江省杭州市滨江区");
34         u.setBirthDay(new Date());
35         u.setSex("男");
36         userRepository.save(u);
37     }
38 }

@Autowired代表按照类型注入,@Resource按照名称注入 

至此,代码已经编写完毕,下面进入测试

10.访问http://localhost:8080/hibernate/saveUser 之后,jpa自动生成sql语句: 

技术分享

访问http://localhost:8080/hibernate/getUserById?id=2: 

技术分享

 

以上是关于SpringBoot和Hibernate整合的主要内容,如果未能解决你的问题,请参考以下文章

springboot 整合hibernate

springboot 整合hibernate

SpringBoot整合Hibernate自定义数据验证及多种方式异常处理

SpringBoot整合Hibernate-Validator校验器

SpringBoot整合Hibernate-Validator校验器

Java:SpringBoot整合hibernate-validator实现入参数据校验