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、核心依赖
<!-- JPA框架 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2、配置文件
spring:application:name: node09-boot-jpadatasource:url: jdbc:mysql://localhost:3306/data_jpa?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=trueusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driverjpa:hibernate:ddl-auto: updateshow-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@GeneratedValueprivate Integer id;@Columnprivate String name;@Columnprivate 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 {@Resourceprivate 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 {@Resourceprivate UserService userService ;@Testpublic 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);}@Testpublic void findByAge (){Integer age = 22 ;// User{id=3, name='知了一笑', age=22}System.out.println(userService.findByAge(age));}@Testpublic void findByNameAndAge (){System.out.println(userService.findByNameAndAge("cicada",23));}@Testpublic void findSql (){// User{id=4, name='cicada', age=23}System.out.println(userService.findSql("cicada"));}@Testpublic void update (){User user = new User() ;// 如果这个主键不存在,会以主键自增的方式新增入库user.setId(3);user.setName("哈哈一笑");user.setAge(25);userService.update(user) ;}@Testpublic 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基础案例分类总结,后续更新计划说明
一.基础案例 1.基础案例概览 历时一个半月,SpringBoot2.0基础案例的文章基本更新完毕了,基础案例包含了SpringBoot的基础教程,高级应用,日志配置,数据库使用,事务管理等.关于Sp ...
- SpringBoot2.0 基础案例(12):基于转账案例,演示事务管理操作
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.事务管理简介 1.事务基本概念 一组业务操作ABCD,要么全部 ...
- SpringBoot2.0 基础案例(10):整合Mybatis框架,集成分页助手插件
一.Mybatis框架 1.mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获 ...
- SpringBoot2.0 基础案例(07):集成Druid连接池,配置监控界面
一.Druid连接池 1.druid简介 Druid连接池是阿里巴巴开源的数据库连接池项目.Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能.功能强大,能防SQL注入,内置Login ...
- SpringBoot2.0 基础案例(14):基于Yml配置方式,实现文件上传逻辑
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.文件上传 文件上传是项目开发中一个很常用的功能,常见的如头像上 ...
- SpringBoot2.0基础案例(01):环境搭建和RestFul风格接口
一.SpringBoot 框架的特点 SpringBoot2.0 特点 1)SpringBoot继承了Spring优秀的基因,上手难度小 2)简化配置,提供各种默认配置来简化项目配置 3)内嵌式容器简 ...
- SpringBoot2.0 基础案例(16):配置Actuator组件,实现系统监控
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.Actuator简介 1.监控组件作用 在生产环境中,需要实时 ...
- SpringBoot2.0 基础案例(15):配置MongoDB数据库,实现增删改查逻辑
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.NoSQL简介 1.NoSQL 概念 NoSQL( Not O ...
- SpringBoot2.0 基础案例(13):基于Cache注解模式,管理Redis缓存
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.Cache缓存简介 从Spring3开始定义Cache和Cac ...
最新文章
- js去除数组中重复值
- java web 初始化方法_Java Web(二) 类的初始化及初始化顺序
- python post请求 上传图片_利用python模拟实现POST请求提交图片的方法
- 实战Nginx与PHP(FastCGI)的安装、配置与优化
- getContextPath、getServletPath、getRequestURI的区别
- linux等陆不上ftp,vsftp连接不上解决方法
- 长方形与圆最近连线LISP_餐桌到底选方还是圆?可千万别买错了,今天我们好好聊聊...
- 技术文档的撰写_如何撰写出色的技术博客文章
- 指定精确度(*号的使用)
- 奥特曼传奇英雄存档丢了怎么找回_热血传奇:法师前期跨级刷怪到底划不划算?...
- 「懒惰的美德」我用 python 写了个自动生成给文档生成索引的脚本
- CV学习笔记-Alexnet
- vue3 loadsh 防抖功能
- 数字图像处理-高反差保留算法
- 译:WebRTC视频通信
- STM8S005 TIM1定时器PWM应用
- 《虚拟化与云计算技术》实训
- python中如何表示非_如何在python中显示非英语字符?
- qq 营销,微信营销,微博营销
- 申请专利对大学生有什么用?