实际开发中,不可避免地会对数据进行反复的增删改查操作,然而这部分工作是十分繁琐枯燥的。那么,随即而生的ORM框架就能很好的解决这个问题。
我们常用的ORM框架有:Hibernate、Mybatis、Jpa 等。本文介绍SpringBoot 中集成 Jpa 框架。

集成 JPA (Java Persistence API) ,持久层框架。

Spring-data-jpa 依赖于 Hibernate,对Hibernate有一定的了解有助于使用JPA框架。

一、pom.xml添加依赖

<!-- mysql数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency> <!-- 数据层 Spring-data-jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
查看spring-boot-starter-data-jpa的具体依赖,可以发现有依赖hibernate

二、配置数据库连接信息

#数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update
如果你熟悉hibernate,那么会清楚spring.jpa.properties.hibernate.hbm2ddl.auto 的作用
# 配置指定对数据库表结构的处理方式,值有:create、create-drop、update、validate
#
# create:每次加载hibernate的时候,都会重新根据模型生成表。如果表已存在,会先删除该表再生成。
# create-drop:启动项目加载hibernate的时候,会生成表。停止项目时,会把生成的表删除掉。
# update:常用属性。每次加载hibernate的时候,会生成表。如果表存在,会根据模型的属性变化来更新表结构,这个过程不会做删表处理。
# validate:每次加载hibernate的时候,会检查表结构,但不会生成表。

三、创建实体类,并使用注解进行映射。

package com.sam.demo.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id; /**
* @author sam
* @since 2017/7/18
*/
@Entity
@Table(name = "t_person") //指定表名
public class Person { @Id
@GeneratedValue
private Long id; @Column(nullable = false)
private String name; @Column
private int age; // getter & setter
}

四、创建 PersonRepository 接口 继承 JpaRepository

package com.sam.demo.repository;

import com.sam.demo.domain.Person;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; /**
* @author sam
* @since 2017/7/18
*/
public interface PersonRepository extends JpaRepository<Person, Long> { Person findByName(String name); Person findByNameAndAge(String name, int age); @Query("FROM Person p WHERE p.id=:id")
Person findPersonById(@Param("id") Long id); }
PersonRepository 继承了 jpa提供的 JpaRepository。查看JpaRepository可以发现,已经封装好了基本的增删改查操作,直接使用即可。

除了默认提供的增删改成之外,jpa 还提供了极其简便的方式来自定义查询等方法(不需要编写任何sql语句):
如上面的 Person findByName(String name) 方法,JPA 会根据方法名(驼峰式),解析出相应的sql语句进行具体的查询操作。
当我们需要执行复杂的语句的时候,我们还可以使用 @Query() 创建自定义sql语句查询:
@Query("FROM Person p WHERE p.id=:id"),查询语句与hibernate的HQL语句相同,可以通过 :id 来绑定 @Param("id") 的参数。

五、controller 中使用 PersonRepository

package com.sam.demo.controller;

import com.sam.demo.domain.Person;
import com.sam.demo.repository.PersonRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; /**
* @author sam
* @since 2017/7/16
*/
@RequestMapping("/person")
@RestController
public class PersonController { @Autowired
private PersonRepository personRepository; @RequestMapping(method = RequestMethod.GET)
public Person index() { Person person = new Person();
person.setName("sam");
person.setAge(25); //保存person
personRepository.save(person); // Person temp = personRepository.findPerson(1l);
Person temp = personRepository.findByName("sam"); return temp;
} }
访问:http://localhost:8080/person 正确返回:
{"id":1,"name":"sam","age":25}
到此,基本完成了Spring Boot 集成 Spring-data-jpa 框架。
Spring-data-jpa 详细使用请参考:Spring Data JPA 官方文档

版权声明:本文为博主原创文章,转载请注明出处。

Spring Boot 系列(九)数据层-集成Spring-data-jpa的更多相关文章

  1. Spring Boot系列(三):Spring Boot整合Mybatis源码解析

    一.Mybatis回顾 1.MyBatis介绍 Mybatis是一个半ORM框架,它使用简单的 XML 或注解用于配置和原始映射,将接口和Java的POJOs(普通的Java 对象)映射成数据库中的记 ...

  2. Spring Boot系列(四):Spring Boot源码解析

    一.自动装配原理 之前博文已经讲过,@SpringBootApplication继承了@EnableAutoConfiguration,该注解导入了AutoConfigurationImport Se ...

  3. spring boot 系列之六:深入理解spring boot的自动配置

    我们知道,spring boot自动配置功能可以根据不同情况来决定spring配置应该用哪个,不应该用哪个,举个例子: Spring的JdbcTemplate是不是在Classpath里面?如果是,并 ...

  4. Spring Boot系列(一):Spring Boot快速开始

    一.Spring Boot介绍 Spring Boot可以很容易的创建可直接运行的独立的基于Spring的应用程序. 功能特点: 创建独立的Spring应用程序: 直接嵌入Tomcat.Jetty等W ...

  5. Spring Boot系列教程十二:Spring boot集成Redis

    一.创建项目 项目名称为 "springboot_redis",创建过程中勾选 "Web","Redis",第一次创建Maven需要下载依赖 ...

  6. Spring Cloud Alibaba学习笔记(24) - Spring Boot Actuator 监控数据可视化:Spring Boot Admin

    我们都知道,Spring Boot Actuator 提供监控数据是Json数据,在某种程度来说并不利于分析查看,那么如何将其进行可视化呢?我们有很多种选择,但是目前在这个领域,最流行的是Spring ...

  7. Spring Boot系列教程十四:Spring boot同时支持HTTP和HTTPS

    自签证书 openssl生成服务端证书,不使用CA证书直接生成 -in server.csr -signkey server.key -out server.crt # 5.server证书转换成ke ...

  8. 小马哥-Java 微服务实践 - Spring Boot 系列-01Java 微服务实践 - Spring Boot 系列(一)初体验

    课程github地址 https://github.com/mercyblitz/segmentfault-lessons 传统的web应用架构.微服务是一种架构.不限定什么语言 单体应用和微服务的对 ...

  9. Spring Boot系列(二):Spring Boot自动装配原理解析

    一.Spring Boot整合第三方组件(Redis为例) 1.加依赖 <!--redis--> <dependency> <groupId>org.springf ...

  10. (2)Spring Boot返回json数据【从零开始学Spring Boot】

    在做如下操作之前,我们对之前的Hello进行简单的修改,我们新建一个包com.kfit.test.web 然后新建一个类HelloControoler, 然后修改App.java类,主要是的这个类就是 ...

随机推荐

  1. vue + spring boot + spring security 前后端分离 携带 Cookie 登录实现 只写了个登录

    最近想弄一下vue 所以就自己给自己找坑入   结果弄的满身是伤 哈哈哈 首先我说下 前后端分离  跨域请求  我在网上找了一些  可是都是针对于 spring boot 的 我自己还有 securi ...

  2. 突破内网限制上网(ssh+polipo)

    最近到客户这里来做项目,发现客户对网络的把控实在严格,很多网站都不能访问到,搜索到的技术文档也屏蔽了.突然想到了FQ工具的原理,刚好自己也有台服务器在外头,部署个Polipo代理然后用ssh隧道连接. ...

  3. python 0228

    01 cpu 内存 硬盘 操作系统 CPU:中央处理器,相当于人大脑. 飞机 内存:临时存储数据. 8g,16g, 高铁 1,成本高. 2,断电即消失. 硬盘:长期存储大量的数据. 1T 512G等等 ...

  4. Android手机app的adb命令测试电量

    Android手机app电量测试 Android 5.0及以上的设备, 允许我们通过adb命令dump出电量使用统计信息 第一步:手机安装要测试的应用,打开手机开发者模式-USB模式,运行cmd.ex ...

  5. 【洛谷P2584】【ZJOI2006】GameZ游戏排名系统题解

    [洛谷P2584][ZJOI2006]GameZ游戏排名系统题解 题目链接 题意: GameZ为他们最新推出的游戏开通了一个网站.世界各地的玩家都可以将自己的游戏得分上传到网站上.这样就可以看到自己在 ...

  6. position 小结

    position: static fixed relative absolute sticky 1.static static定位是HTML元素的默认值,即没有定位,元素出现在正常的流中.因此,这种定 ...

  7. Android插件化的兼容性(中):Android P的适配

    Android系统的每次版本升级,都会对原有代码进行重构,这就为插件化带来了麻烦. Android P对插件化的影响,主要体现在两方面,一是它重构了H类中Activity相关的逻辑,另一个是它重构了I ...

  8. Python math库常用函数

    math库常用函数及举例: 注意:使用math库前,用import导入该库>>> import math 取大于等于x的最小的整数值,如果x是一个整数,则返回x>>> ...

  9. Java程序员的成长之路

    阅读本文大概需要 8.2 分钟. tips:虽然题目是写的Java程序员,但对其他语言的开发来说也会有借鉴作用. 本篇介绍的是大体思路,以及每个节点所需要学习的书籍内容,如果大家对详细的技术点有需要, ...

  10. PHP7 ?:和??的区别

    ?:和??是PHP添加的新特性,我们可以通过下面的代码来理解 $z = $x ?? $y; //等价于下面 $z = isset($x) ? $x : $y; $z = $x ?: $y; //等价于 ...