摘要:持久化,是持久化的标准规范,是持久化规范的技术实现,而是在基础上封装的一款框架。作为标准,实际上并没有说局限于某个固定的数据源,事实上,,都是的。
JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Spring Data JPA是在 Hibernate 基础上封装的一款框架。JPA作为标准,实际上并没有说局限于某个固定的数据源,事实上mysql,mongo, solr都是ok的。接下来我们将介绍下springboot结合jpa 来实现mysql的curd以及更加复杂一点的sql支持
jpa系列教程将包含以下几块
环境搭建
基础的插入、修改、删除数据的使用姿势
基础的单表查询,如(>, <, = , in, like, between),分页,排序等
多表关联查询
事物使用
本篇为开始第一篇,先搭建一个可以愉快玩耍的jpa项目
I. 环境搭建我们选择的数据库为mysql,所以有必要先安装一下,这里跳过mysql的安装教程,直接进入springboot项目的搭建
1. pom依赖我们这里选择的是2.0.4.RELEASE版本进行演示
org.springframework.boot spring-boot-starter-parent 2.0.4.RELEASE UTF-8 UTF-8 Finchley.RELEASE 1.8 com.alibaba fastjson 1.2.45 org.springframework.boot spring-boot-starter org.projectlombok lombok true org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java org.springframework.boot spring-boot-maven-plugin spring-milestones Spring Milestones https://repo.spring.io/milestone false
上面的pom依赖中,关键的是下面两个, 第一个引入的是jpa相关包,后面那个则是mysql的连接依赖,相当于指定操作mysql数据库
2. 数据准备org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java
创建一个测试表进行后续的读写操作,为了后续的事物讲解方便,我们创建一个表,里面存了每个人的钱
CREATE TABLE `money` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL DEFAULT "" COMMENT "用户名", `money` int(26) NOT NULL DEFAULT "0" COMMENT "钱", `is_deleted` tinyint(1) NOT NULL DEFAULT "0", `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间", `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "更新时间", PRIMARY KEY (`id`), KEY `name` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
在表中随意插入几条数据,以方便后面使用
INSERT INTO `money` (`id`, `name`, `money`, `is_deleted`, `create_at`, `update_at`) VALUES (1, "一灰灰blog", 100, 0, "2019-04-18 17:01:40", "2019-04-18 17:01:40"), (2, "一灰灰2", 200, 0, "2019-04-18 17:01:40", "2019-04-18 17:01:40");3. 属性配置
创建springboot工程之后,添加mysql的相关配置,在resources目录下,新建文件 application.properties
## DataSource spring.datasource.url=jdbc:mysql://127.0.0.1:3306/story?useUnicode=true&characterEncoding=UTF-8&useSSL=false #spring.datasource.driver-class-name= com.mysql.jdbc.Driver spring.datasource.username=root spring.datasource.password=4. 项目构建并测试
根据JPA的一般使用姿势,我们需要针对上面的表,创建一个对应的POJO对象,将它们关联起来,代码如下:
注意下几个注解 @Entity, @Table, @Column, @Id, @GeneratedValue
注意下POJO中字段的类型,这里保证了和db的字段定义类型一致
(关于上面两点的更多知识点,后面的文章会给出更详细用法说明,欢迎持续跟进)
package com.git.hui.boot.jpa.entity; import lombok.Data; import javax.persistence.*; import java.sql.Date; /** * Created by @author yihui in 21:01 19/6/10. */ @Data @Entity @Table(name = "money") public class MoneyPO { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Column(name = "name") private String name; @Column(name = "money") private Long money; @Column(name = "is_deleted") private Byte isDeleted; @Column(name = "create_at") private Date createAt; @Column(name = "update_at") private Date updateAt; }
表结构定义完毕之后,接下来就是定义db的操作api,jpa的使用,通过方法名来解析出对应的sql,我们这里定义一个简单的Money表的操作API:
MoneyDemoRepository 继承自 JpaRepository
两个泛型参数,第一个表示这个repository操作的表绑定的POJO,第二个表示自增id类型
package com.git.hui.boot.jpa.repository; import com.git.hui.boot.jpa.entity.MoneyPO; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; /** * Created by @author yihui in 21:01 19/6/10. */ public interface MoneyDemoRepository extends JpaRepository{ }
上面两个定义完毕之后,不需要其他的操作,就可以进行测试环境了,上面这个Repository提供了一些简单的操作
package com.git.hui.boot.jpa; import com.git.hui.boot.jpa.demo.JpaQueryDemo; import com.git.hui.boot.jpa.entity.MoneyPO; import com.git.hui.boot.jpa.repository.MoneyDemoRepository; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * Created by @author yihui in 20:58 19/6/10. */ @SpringBootApplication public class Application { public Application(MoneyDemoRepository moneyDemoRepository) { MoneyPO moneyPO = moneyDemoRepository.findById(1).get(); System.out.println(moneyPO); } public static void main(String[] args) { SpringApplication.run(Application.class); } }
针对上面的测试case进行简单的说明,前面定义了一个POJO对象和一个RepositoryAPI,我们想直接操作对应的表,需要借助这个RepositoryAPI对象,但是它是接口类型,我们没法直接使用的,因为我们是在Spring生态体系中,所以可以直接通过IoC注入方式使用
所以上面的测试中,MoneyDemoRepository 对象实际上是由框架生成的一个代理对象,下面我们看下执行结果
5. 小结从上面的步骤下来,会发现搭建一个jpa的项目工程属于比较简单的过程,添加必要的依赖,稍微注意的是两个
创建一个POJO 与我们实际的表关联起来
创建一个RepositoryApi继承自org.springframework.data.repository.CrudRepository
通过IoC/DI方式注入RepositoryApi对象,然后可以愉快的进行db操作
II. 其他 0. 项目工程:https://github.com/liuyueyi/spring-boot-demo
项目: https://github.com/liuyueyi/spring-boot-demo/blob/master/spring-boot/102-jpa
1. 一灰灰Blog尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
一灰灰Blog个人博客 https://blog.hhui.top
一灰灰Blog-Spring专题博客 http://spring.hhui.top
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/49194.html
摘要:前提好几周没更新博客了,对不断支持我博客的童鞋们说声抱歉了。熟悉我的人都知道我写博客的时间比较早,而且坚持的时间也比较久,一直到现在也是一直保持着更新状态。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好几周没更新博客了,对不断支持我博客的童鞋们说声:抱歉了!。自己这段时...
摘要:开公众号差不多两年了,有不少原创教程,当原创越来越多时,大家搜索起来就很不方便,因此做了一个索引帮助大家快速找到需要的文章系列处理登录请求前后端分离一使用完美处理权限问题前后端分离二使用完美处理权限问题前后端分离三中密码加盐与中异常统一处理 开公众号差不多两年了,有不少原创教程,当原创越来越多时,大家搜索起来就很不方便,因此做了一个索引帮助大家快速找到需要的文章! Spring Boo...
摘要:开公众号差不多两年了,有不少原创教程,当原创越来越多时,大家搜索起来就很不方便,因此做了一个索引帮助大家快速找到需要的文章系列处理登录请求前后端分离一使用完美处理权限问题前后端分离二使用完美处理权限问题前后端分离三中密码加盐与中异常统一处理 开公众号差不多两年了,有不少原创教程,当原创越来越多时,大家搜索起来就很不方便,因此做了一个索引帮助大家快速找到需要的文章! Spring Boo...
摘要:一从零搭建环境本次我使用的是编辑器来搭建和环境首先,我们在新建项目的时候,选择,然后就行了。可以看出,本次的版本为。这是一个非常好用的插件,有了它我们可以不用写繁琐的方法。非常适合我们做一些简答的测试和小功能。 前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 不知道大家对SpringB...
摘要:是一门最近比较流行的静态类型编程语言,而且和一样同属系。这个生成的构造函数是合成的,因此不能从或中直接调用,但可以使用反射调用。 showImg(https://segmentfault.com/img/remote/1460000012958496); Kotlin是一门最近比较流行的静态类型编程语言,而且和Groovy、Scala一样同属Java系。Kotlin具有的很多静态语言...
阅读 2027·2021-11-18 10:02
阅读 1717·2021-10-13 09:40
阅读 2819·2021-09-07 10:07
阅读 1920·2021-09-04 16:48
阅读 855·2019-08-30 13:18
阅读 2346·2019-08-29 14:03
阅读 2758·2019-08-29 12:54
阅读 3025·2019-08-26 11:41