想要使用数据库,需要添加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接口就具备了通用的数据访问控制层的能力。
参考资料: