您现在的位置是:首页 > 文章详情

SpringBoot(四)_Spring Data JPA的使用

日期:2018-05-27点击:338

JPA 绝对是简化数据库操作的一大利器。

概念

首先了解 JPA 是什么?

JPA(Java Persistence API)是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。

注意:JPA 是一套规范,不是一套产品,那么像 Hibernate、TopLink、JDO 它们是一套产品,如果说这些产品实现了这个 JPA 规范,那么就可以叫它们为 JPA 的实现产品。

实例操作

添加依赖
 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
配置文件

application.yml

spring: profiles: active: dev datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/dbgirl?characterEncoding=utf8&useSSL=false username: root password: root jpa: hibernate: ddl-auto: update show-sql: true

其实这个 hibernate.hbm2ddl.auto 参数的作用主要用于:自动创建 | 更新 | 验证数据库表结构,有四个值:

create:每次加载 hibernate 时都会删除上一次的生成的表,然后根据 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。

create-drop:每次加载 hibernate 时根据 model 类生成表,但是 sessionFactory 一关闭,表就自动删除。

update:最常用的属性,第一次加载 hibernate 时根据 model 类会自动建立起表的结构(前提是先建立好数据库),以后加载 hibernate 时根据 model 类自动更新表结构,即使表结构改变了,但表中的行仍然存在,不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。

validate:每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

实体类和 Dao
@Entity public class Girl { @Id @GeneratedValue private int id; private String name; private int age; //添加无参构造 public Girl() { } // get和set方法省略 } 

Dao 只要继承 JpaRepository 类,不需要写方法

public interface GirlRepository extends JpaRepository<Girl,Integer> { }
GirlController类
@RestController public class GirlController { @Resource private GirlRepository girlRepository; @GetMapping("/girls") public List<Girl> getList(){ return girlRepository.findAll(); } @PostMapping("/girls") public Girl girlAdd(@RequestParam("name") String name, @RequestParam("age") int age){ Girl girl = new Girl(); girl.setAge(age); girl.setName(name); return girlRepository.save(girl); } @GetMapping(value = "/girls/{id}") public Girl find(@PathVariable(value = "id") Integer id){ return girlRepository.findById(id).get(); } @PostMapping(value = "/girls/{id}") public Girl update(@PathVariable(value = "id") Integer id, @RequestParam("name") String name, @RequestParam("age") int age){ Girl girl = new Girl(); girl.setId(id); girl.setAge(age); girl.setName(name); return girlRepository.save(girl); } @DeleteMapping(value = "/girls/{id}") public void delete(@PathVariable(value = "id") Integer id){ girlRepository.deleteById(id); } @GetMapping(value = "/girls/age/{age}") public List<Girl> findByAge(@PathVariable(value = "age") Integer age){ return girlRepository.findByAge(age); } } 

注意:

  • 数据库建库dbgirl
  • 我使用的是springboot2.0.2版本,已经没有findOne 方法,使用findById(id).get() 来获得
  • 测试大家可以使用谷歌浏览器插件Restlet Client - REST API Testing
  • 源码下载:github
学习不是要么0分,要么100分的。80分是收获;60分是收获;20分也是收获。有收获最重要。但是因为着眼于自己的不完美,最终放弃了,那就是彻底的0分了。
原文链接:https://yq.aliyun.com/articles/640681
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章