SpringBoot系列教程JPA之基础环境搭建的方法

网友投稿 328 2023-01-04


SpringBoot系列教程JPA之基础环境搭建的方法

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

http://false

上面的pom依赖中,关键的是下面两个, 第一个引入的是jpa相关包,后面那个则是mysql的连接依赖,相当于指定操作mysql数据库

org.springframework.boot

spring-boot-starter-data-jpa

mysql

mysql-connector-java

2. 数据准备

创建一个测试表进行后续的读写操作,为了后续的事物讲解方便,我们创建一个表,里面存了每个人的钱

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(MoneyDemQjaUDoRepository 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操作


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:scala中常用特殊符号详解
下一篇:做支付接口测试工具(微信支付接口测试工具)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~