APP下载

SpringBoot2.0 基础案例(09):整合JPA持久层框架 简化数据库操作

消息来源:baojiabao.com 作者: 发布时间:2024-11-27

报价宝综合消息SpringBoot2.0 基础案例(09):整合JPA持久层框架 简化数据库操作

一、JAP框架简介

JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范。主要是为了简化持久层开发以及整合ORM技术,结束Hibernate、TopLink、JDO等ORM框架各自为营的局面。JPA是在吸收现有ORM框架的基础上发展而来,易于使用,伸缩性强。

二、与SpringBoot2.0整合

1、核心依赖

org.springframework.boot

spring-boot-starter-data-jpa

2、配置档案

spring:

application:

name: node09-boot-jpa

datasource:

url: jdbc:mysql://localhost:3306/data_jpa?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true

username: root

password: root

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

jpa:

hibernate:

ddl-auto: update

show-sql: true

ddl-auto几种配置说明

1)create

每次载入hibernate时都删除上一次的生成的表,然后根据bean类重新来生成新表,容易导致资料丢失,(建议首次建立时使用)。

2)create-drop

每次载入hibernate时根据bean类生成表,但是sessionFactory一关闭,表就自动删除。

3)update

第一次载入hibernate时根据bean类会自动建立起表的结构,以后载入hibernate时根据bean类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。

4)validate

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

3、实体类物件

就是根据这个物件生成的表结构。

@Table(name = "t_user")

@Entity

public class User {

@Id

@GeneratedValue

private Integer id;

@Column

private String name;

@Column

private Integer age;

// 省略 GET SET

}

4、JPA框架的用法

定义物件的操作的界面,继承JpaRepository核心界面。

import com.boot.jpa.entity.User;

import org.springframework.data.jpa.repository.JpaRepository;

import org.springframework.data.jpa.repository.Query;

import org.springframework.data.repository.query.Param;

import org.springframework.stereotype.Repository;

@Repository

public interface UserRepository extends JpaRepository {

// 但条件查询

User findByAge(Integer age);

// 多条件查询

User findByNameAndAge(String name, Integer age);

// 自定义查询

@Query("from User u where u.name=:name")

User findSql(@Param("name") String name);

}

5、封装一个服务层逻辑

import com.boot.jpa.entity.User;

import com.boot.jpa.repository.UserRepository;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service

public class UserService {

@Resource

private UserRepository userRepository ;

// 储存

public void addUser (User user){

userRepository.save(user) ;

}

// 根据年龄查询

public User findByAge (Integer age){

return userRepository.findByAge(age) ;

}

// 多条件查询

public User findByNameAndAge (String name, Integer age){

return userRepository.findByNameAndAge(name,age) ;

}

// 自定义SQL查询

public User findSql (String name){

return userRepository.findSql(name) ;

}

// 根据ID修改

public void update (User user){

userRepository.save(user) ;

}

//根据id删除一条资料

public void deleteStudentById(Integer id){

userRepository.deleteById(id);

}

}

三、测试程式码块

import com.boot.jpa.JpaApplication;

import com.boot.jpa.entity.User;

import com.boot.jpa.service.UserService;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

@RunWith(SpringJUnit4ClassRunner.class)

@SpringBootTest(classes = JpaApplication.class)

public class UserJpaTest {

@Resource

private UserService userService ;

@Test

public void addUser (){

User user = new User() ;

user.setName("知了一笑");

user.setAge(22);

userService.addUser(user);

User user1 = new User() ;

user1.setName("cicada");

user1.setAge(23);

userService.addUser(user1);

}

@Test

public void findByAge (){

Integer age = 22 ;

// User{id=3, name=\'知了一笑\', age=22}

System.out.println(userService.findByAge(age));

}

@Test

public void findByNameAndAge (){

System.out.println(userService.findByNameAndAge("cicada",23));

}

@Test

public void findSql (){

// User{id=4, name=\'cicada\', age=23}

System.out.println(userService.findSql("cicada"));

}

@Test

public void update (){

User user = new User() ;

// 如果这个主键不存在,会以主键自增的方式新增入库

user.setId(3);

user.setName("哈哈一笑");

user.setAge(25);

userService.update(user) ;

}

@Test

public void deleteStudentById (){

userService.deleteStudentById(5) ;

}

}

四、源代码地址

GitHub地址:知了一笑

https://github.com/cicadasmile/spring-boot-base

码云地址:知了一笑

https://gitee.com/cicadasmile/spring-boot-base

2020-07-22 15:57:00

相关文章