想要使用数据库,需要添加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参数,那每次重启之后:数据库只有表结构!没有数据!
总结:
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接口就具备了通用的数据访问控制层的能力。
参考资料: