Spring Boot整合Hibernate(法一).md

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/marvHuang/article/details/82921361

  • JPA全称JavaPersistenceAPI.JPA通过JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
  1. 配置pom.xml文件:
<!--jpa dependency-->  
<dependency>  
  <groupId>org.springframework.boot</groupId>  
  <artifactId>spring-boot-starter-data-jpa</artifactId>  
</dependency>  
<!--mysql dependency-->  
<dependency>  
  <groupId>mysql</groupId>  
  <artifactId>mysql-connector-java</artifactId>  
  <version>5.1.43</version>  
</dependency>
  1. 配置application.properties:
在application.properties文件中添加数据库连接的相关信息配置

########################################################  
###datasource  
########################################################  
spring.datasource.url = jdbc:mysql://localhost:3306/spring-boot  
spring.datasource.username = root  
spring.datasource.password = root  
spring.datasource.driverClassName = com.mysql.jdbc.Driver
上面的数据库属性必须配置
#spring.datasource.max-active=20  
#spring.datasource.max-idle=8  
#spring.datasource.min-idle=8  
#spring.datasource.initial-size=10  
########################################################  
### Java Persistence Api  
########################################################  
# Specify the DBMS  
spring.jpa.database = MYSQL  
# Show or not log for each sql query  
spring.jpa.show-sql = true  
# Hibernate ddl auto (create, create-drop, update)  
spring.jpa.hibernate.ddl-auto = update  

spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate的配置属性,其主要作用是:自动创建、更新、验证数据库表结构。该参数的几种配置如下:

- create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
- create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
- update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。
- validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
  
# Naming strategy  
#[org.hibernate.cfg.ImprovedNamingStrategy #org.hibernate.cfg.DefaultNamingStrategy]  
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy  
# stripped before adding them to the entity manager)  
spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL5Dialect
  1. 创建实体类User:
@Entity  
@Table(name = "user")  
public class User implements Serializable {  
    private String id;  
    private String userName;  
    private String password;  
  
    public User() {  
    }  
  
    @Id  
    public String getId() {  
        return id;  
    }  
    @Column  
    public void setId(String id) {  
        this.id = id;  
    }  
  
    public String getUserName() {  
        return userName;  
    }  
    @Column  
    public void setUserName(String userName) {  
        this.userName = userName;  
    }  
  
    public String getPassword() {  
        return password;  
    }  
    @Column  
    public void setPassword(String password) {  
        this.password = password;  
    }  
  
}
  1. 创建Dao层的UserDao接口:、
为了解决抽象各个Java实体基本的“增删改查”操作,我们通常会以泛型的方式封装一个模板Dao来进行抽象简化,但是这样依然不是很方便,我们需要针对每个实体编写一个继承自泛型模板Dao的接口,再编写该接口的实现。虽然一些基础的数据访问已经可以得到很好的复用,但是在代码结构上针对每个实体都会有一堆Dao的接口和实现。

由于模板Dao的实现,使得这些具体实体的Dao层已经变的非常“薄”,有一些具体实体的Dao实现可能完全就是对模板Dao的简单代理,并且往往这样的实现类可能会出现在很多实体上。Spring-data-jpa的出现正可以让这样一个已经很“薄”的数据访问层变成只是一层接口的编写方式。
public interface UserDao extends JpaRepository<User,String> {  
}
  1. 创建业务层接口UserService:
public interface UserService {  
  
    User getUser();  
  
    void save(User user);  
}
  1. 创建业务接口实现类UserServiceImpl:
@Service  
public class UserServiceImpl implements UserService{  
    @Autowired  
    private UserDao userDao;  
    @Override  
    public User getUser() {  
       User user =  userDao.findOne("09e7b25c-12f7-43ea-a553-fb34189fce17");  
       return user;  
    }  
  
    @Override  
    public void save(User user) {  
        User u = userDao.save(user);  
        return;  
    }  
}
  1. 控制层注入业务bean:
在UserController类中注入业务bean:

@Controller  
@RequestMapping("/user")  
public class UserController {  
    @Autowired  
    private UserService userService;  
  
    @RequestMapping("/hello")  
    @ResponseBody//返回json数据  
    String home() {  
        return "Hello World    !";  
    }  
  
    @RequestMapping("/get")  
    @ResponseBody  
    public User getUser() {  
       User user = userService.getUser();  
       return user;  
    }  
    @RequestMapping("/save")  
    public String save(Model model){  
        User user = new User();  
        user.setUserName("李四");  
        user.setPassword("123456789");  
        user.setId(UUID.randomUUID().toString());  
        userService.save(user);  
        model.addAttribute("msg","添加数据哇啊");  
        return "index";  
    }  
}
  1. 程序main入口类的注解配置:
找到main程序入口类,在上面加上实体类、持久类的注解@EnableJpaRepositories、@EntityScan:

package com.yunlian.controller;  
  
import com.yunlian.entity.User;  
import org.springframework.boot.*;  
import org.springframework.boot.autoconfigure.*;  
import org.springframework.boot.autoconfigure.domain.EntityScan;  
import org.springframework.context.annotation.ComponentScan;  
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;  
import org.springframework.stereotype.*;  
import org.springframework.ui.Model;  
import org.springframework.web.bind.annotation.*;  
  
@Controller//让当前启动入口也成为控制层,如果不想让当前入口也成为控制层,当前程序入口类可以不加Controller注解  
@SpringBootApplication  
@ComponentScan("com.yunlian")//包名:扫描这个包下面的加了@Controller注解的类及其子包的加了@Controller注解的类,或者加了@Service注解等其他组件注解的类  
@EnableJpaRepositories("com.yunlian.dao") // JPA扫描该包路径下的Repositorie  
@EntityScan("com.yunlian.entity") // 扫描实体类  
public class SpringBootController {  
  
    public static void main(String[] args) throws Exception {  
        //程序启动入口,一般该入口文件不写成控制层  
        SpringApplication.run(SpringBootController.class, args);  
    }  
    @RequestMapping("/hello")  
    @ResponseBody//返回json数据  
    String home() {  
        return "Hello World!";  
    }  
  
    @RequestMapping("/user")  
    @ResponseBody  
    public User getUser() {  
        User user = new User();  
        user.setId("1");  
        user.setUserName("张三111");  
        user.setPassword("123456789");  
        return user;  
    }  
  
    @RequestMapping("/toJSP")  
    public String toPage(Model model) {  
        System.out.println("3456789");  
        model.addAttribute("msg","欢迎来到异次元世界");  
        return "index";//返回视图  
    }  
}
  1. 运行访问:运行main程序,启动好后,打开浏览器根据配置的地址访问即可

猜你喜欢

转载自blog.csdn.net/marvHuang/article/details/82921361