天天看点

SpringBoot整合SpringDataJPA,今天没啥事情就看了一下springboot整合springdataJPA,实在是香啊,SQL语句都不用写了

SpringBoot整合SpringDataJPA,今天没啥事情就看了一下springboot整合springdataJPA,实在是香啊,SQL语句都不用写了

SpringBoot整合SpringDataJPA

1、JPA概念

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.

JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:

ORM映射元数据

JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;

API

用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。

查询语言

这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合

2.springdataJPA的快速入门

创建maven工程并导入依赖:(这里用的是sprigcloud2.1.16的)

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.1.16.RELEASE</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>

<dependencies>

<dependency>

<groupId>org.sprin

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

</dependency>

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

</dependency>

</dependencies>

2、配置文件application.yml

server:

port: 9090

spring:

application:

name: spring-data-jpa

datasource:

driver-class-name: com.mysql.jdbc.Driver

url: jdbc:mysql:///user_db?serverTimezone=UTC

username: root

password: root

#jpa配置

jpa:

show-sql: true

hibernate:

ddl-auto: update

注意: url这里的配置 必须要加入serverTimezone=UTC传递时区,不然操作数据库会抛异常的,///代表的是127.0.0.1:3306 本地的可以省略

ServerTimeZone时区的问题

在设定时区的时候,如果设定serverTimezone=UTC,会比中国时间早8个小时,如果在中国,可以选择Asia/Shanghai或者Asia/Hongkong,例如:

url:jdbc:mysql://localhost:3306/mango?serverTimezone=Asia/Shanghai&useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8

解析:

ddl-auto表示对数据库进行自动化配置

值有三个选择:

create表示创建,如果说数据库中不管有没有这张表,都会先干掉,然后在重新创建,不适合生产环境

update表示更新,如果说数据库中有这张表,则执行进行更新表中的数据,如果没有这张表,则直接创建这张表,适合生产环境

none 没有任何操作

3、实体类

@Data

@Entity//表示当前类是实体类

@Table(name="tb_user",catalog = "user_db")

public class UserInfo {

/**

* 如果数据库表中 的字段名称和实体类中的属性名称保持一致的话,可以不需要加@Column注解

* @GeneratedValue(strategy=GenerationType.IDENTITY)主键生成策略

* GenerationType.IDENTITY表示针对于mysql中有自增长的数据的生成策略

* GenerationType.SEQUENCE表示针对于oracle数据中的主键生成策略

* GenerationType.AUTO是默认的选项,会根据数据库自动选择

@table 中的name值是指定数据库中的表名   catalog表示的是指定database名

*/

@Id

@Column(name="id")

@GeneratedValue(strategy=GenerationType.IDENTITY)

private Integer id;

private String name;

private String gender;

private Integer age;

private String address;

private String qq;

private String email;

private String username;

private String password;

private String phone;

}

4.dao接口

/**

* dao接口

*/

@Repository

public interface UserMapper extends JpaRepository<UserInfo,Integer> {

}

jpaRepository的泛型 为 userinfo 为实体类  integer为实体类的id也就是数据库对应的主键

5、测试类

@RunWith(SpringRunner.class)

@SpringBootTest

public class JpaTest {

@Autowired

private UserMapper userMapper;

//查询方法

@Test

public void queryAll(){

List<UserInfo> infoList = userMapper.findAll();

System.out.println(infoList);

}

}

在实体类上要加入lombok的注解:

@AllArgsConstructor #有参构造的注解

@NoArgsConstructor #无参构造的注解

SpringBoot整合SpringDataJPA,今天没啥事情就看了一下springboot整合springdataJPA,实在是香啊,SQL语句都不用写了
SpringBoot整合SpringDataJPA,今天没啥事情就看了一下springboot整合springdataJPA,实在是香啊,SQL语句都不用写了
SpringBoot整合SpringDataJPA,今天没啥事情就看了一下springboot整合springdataJPA,实在是香啊,SQL语句都不用写了

6、基于@Query注解查询与更新

SpringBoot整合SpringDataJPA,今天没啥事情就看了一下springboot整合springdataJPA,实在是香啊,SQL语句都不用写了
SpringBoot整合SpringDataJPA,今天没啥事情就看了一下springboot整合springdataJPA,实在是香啊,SQL语句都不用写了
SpringBoot整合SpringDataJPA,今天没啥事情就看了一下springboot整合springdataJPA,实在是香啊,SQL语句都不用写了

欢迎大家一起交流学习...

发表于

2020-10-02 17:34 

statics 

阅读(0) 

评论(0) 

编辑 

收藏