欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-11 17:16:50
一、JAP框架简介 JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范。主要是为了简化持久层开发以及整合ORM技术,结束Hibernate、TopLink、JDO等ORM框架各自为营的局面。JPA是在吸收现有ORM框架的基 ......

一、jap框架简介

jpa(java persistence api)意即java持久化api,是sun官方在jdk5.0后提出的java持久化规范。主要是为了简化持久层开发以及整合orm技术,结束hibernate、toplink、jdo等orm框架各自为营的局面。jpa是在吸收现有orm框架的基础上发展而来,易于使用,伸缩性强。

二、与springboot2.0整合

1、核心依赖

<!-- jpa框架 -->
<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-data-jpa</artifactid>
</dependency>

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,integer> {

    // 但条件查询
    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

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