SpringBoot入门:SpringBoot的数据库操作:spring-data-jpa的使用







想要使用数据库,需要添加2个组件:

在pom里面添加2个jar包:
spring-boot-starter-data-jpa和mysql-connector-java

                <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>





======================================

然后配置属性:

这里我们选择yml风格的配置:

我们创建3个yml配置:

application.yml【这是用来设置共同的配置,在这里面可以设置选择哪种环境】

application-dev.yml【这是开发环境配置】

application-prod.yml【这是生产环境配置】


application.yml共同属性:

spring:
  profiles:
    active: dev
#    active: prod
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dbgirl
    username: root
    password: 123456
  jpa:
    hibernate:
      ddl-auto: create
    show-sql: true

ddl-auto是属于:
hibernate里面的内容,

不止这一种属性:ddl-auto: create

还有:
create: 
每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。 
create-drop : 
每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。 
update: 
最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。 
validate : 
每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
auto参数的作用主要用于:自动创建|更新|验证数据库表结构。如果不是此方面的需求建议set value=”none”。 



特别注意:
如果设置成auto参数,那每次重启之后:数据库只有表结构!没有数据!

你可以尝试一下,在自动生成的表里面添加一些数据,重启之后刷新一下,全部都是null!之前的数据,全都被null覆盖了!


总结:
1.请慎重使用此参数,没必要就不要随便用。
2.如果发现数据库表丢失,请检查hibernate.auto的配置

============================================


dev开发环境:

application-dev.yml


server:
  port: 8081

girl:
  cupSize:  B
  age:  18




prod生产环境:

application-prod.yml

server:
  port: 8082

girl:
  cupSize:  F
  age:  20

=====================

然后在数据库里面新建一个数据库dbgirl

注意:只需要建一个数据库,空的即可!不需要建表!


接下来,我们新建一个类,使用类加注解,自动生成数据库表

Girl

package com.imooc;

import javax.persistence.Id;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;

@Entity
public class Girl {
    @Id
    @GeneratedValue
    private Integer id;
    private String cupSize;
    private Integer age;

    public Girl() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getCupSize() {
        return cupSize;
    }

    public void setCupSize(String cupSize) {
        this.cupSize = cupSize;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
//注意:这个@Id一定不要导错包了!否则浪费了半天时间还找不到错误所在!
//需要导的包是import javax.persistence.Id;!!!!!
//这个类是用来自动生成数据库表的!
//前提条件是:
// 1,需要在pom文件里面添加2个jar包:spring-boot-starter-data-jpa和mysql-connector-java
// 2,要先新建一个数据库,空的即可。
// 3,需要在配置文件里面指定数据库信息(驱动,url,username,password)
//只要按照上面的方法执行就可以成功!
//重要的事情再说一遍:@Id需要导的包是import javax.persistence.Id;!!!!!



注意事项:

//这个@Id一定不要导错包了!否则浪费了半天时间还找不到错误所在!
//需要导的包是import javax.persistence.Id;!!!!!
//这个类是用来自动生成数据库表的!
//前提条件是:
// 1,需要在pom文件里面添加2个jar包:spring-boot-starter-data-jpa和mysql-connector-java
// 2,必须要先新建一个数据库,空的即可。
// 3,需要在配置文件里面指定数据库信息(驱动,url,username,password)
//只要按照上面的方法执行就可以成功!
//重要的事情再说一遍:@Id需要导的包是import javax.persistence.Id;!!!!!

然后重新运行程序!

打开数据库,刷新之后:



成功!

===================================



首先,创建一个类GirlRepository (数据访问层类似dao,文末有详细解释

package com.imooc;

import org.springframework.data.jpa.repository.JpaRepository;

public interface GirlRepository extends JpaRepository<Girl,Integer> {
}

然后再创建一个类GirlController

package com.imooc;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class GirlController {
    @Autowired
    private GirlRepository girlRepository;
    @GetMapping(value = "/girls")
    public List<Girl> girlList(){
        return girlRepository.findAll();
    }
}

然后重启运行:


因为数据库里面没有数据所以显示的空。

接下来,我们可以在数据库里面他添加一些数据:


然后,重启程序:


下面专门写一下增删查改:

继续操作GirlController


==============================================

附录

相关解释:

什么是Repository? 
2.1 Repository(资源库):通过用来访问领域对象的一个类似集合的接口,在领域与数据映射层之间进行协调。这个叫法就类似于我们通常所说的DAO,在这里,我们就按照这一习惯把数据访问层叫Repository 
Spring Data给我们提供几个Repository,基础的Repository提供了最基本的数据访问功能,其几个子接口则扩展了一些功能。它们的继承关系如下: 
Repository: 仅仅是一个标识,表明任何继承它的均为仓库接口类,方便Spring自动扫描识别 
CrudRepository: 继承Repository,实现了一组CRUD相关的方法 
PagingAndSortingRepository: 继承CrudRepository,实现了一组分页排序相关的方法 
JpaRepository: 继承PagingAndSortingRepository,实现一组JPA规范相关的方法 
JpaSpecificationExecutor: 比较特殊,不属于Repository体系,实现一组JPA Criteria查询相关的方法 
我们自己定义的XxxxRepository需要继承JpaRepository,这样我们的XxxxRepository接口就具备了通用的数据访问控制层的能力。 

参考资料:

APPLE框架之高效便捷的Repository解决方案



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页