1、JPA介绍

JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合ORM技术

Spring data jpa是在JPA规范下提供了Repository层的实现。虽然ORM框架都实现了JPA规范,但是在不同的ORM框架之间切换仍然需要编写不同的代码,而通过使用Spring data jpa能够方便大家在不同的ORM框架之间进行切换而不要更改代码,使代码看上去更加优雅,并且spring data jpa 对Repository层封装的很好,也省去了不少的麻烦。

2、springboot集成

  pom依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

  配置文件添加:

#jpa配置
jpa:
database: mysql
show-sql: true
hibernate:
ddl-auto: update
properties:
hibernate.format_sql: true
hibernate.naming.physical-strategy: org.hibernate.config.model.naming.PhysicalNamingStrategyStandardImpl
hibernate.cache.use_second_level_cache: false
hibernate.search.default.directory_provider: filesystem
hibernate.search.default.indexBase: ${user.dir}/indexes

部分说明:

hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构。
  create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
  create-drop :每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
  update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。
  validate :每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。 关键代码
package com.example.springbootjpa.repository;

import com.example.springbootjpa.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import java.util.List; public interface UserRepository extends JpaRepository<User, Integer> { List<User> findAllBy(); User findByUserId(Integer userId); //@Query 注解,并提供一个查询语句作为参数,Spring Data JPA 在创建代理对象时,便以提供的查询语句来实现其功能。
@Query("from User where user_name = :username")
User findUser(@Param("username") String name);
}
Spring Data JPA 在后台为持久层接口创建代理对象时,会解析方法名字,并实现相应的功能。除了通过方法名字以外,它还可以通过如下两种方式指定查询语句:
Spring Data JPA 可以访问 JPA 命名查询语句。开发者只需要在定义命名查询语句时,为其指定一个符合给定格式的名字,Spring Data JPA 便会在创建代理对象时,使用该命名查询语句来实现其功能。 测试代码:
@Controller
public class UserController { @Autowired
private UserService userService; @GetMapping(value = "listUser")
@ResponseBody
public List<User> listUser() {
User byUserId = userService.findByUserId(1);
User fjw = userService.findUser("hzq");
return userService.listUser();
}
}
最终测试查询sql如下:
Hibernate:
select
user0_.user_id as user_id1_0_,
user0_.user_name as user_nam2_0_
from
user user0_
where
user0_.user_id=?
Hibernate:
select
user0_.user_id as user_id1_0_,
user0_.user_name as user_nam2_0_
from
user user0_
where
user_name=?
Hibernate:
select
user0_.user_id as user_id1_0_,
user0_.user_name as user_nam2_0_
from
user user0_

源码参照:springboot集成JPA

最新文章

  1. 1. SVM简介
  2. jQuery的DOM操作实例(2)——拖拽效果&amp;&amp;拓展插件
  3. js数组去重的方法
  4. 迷信AgainAndAgain
  5. ajax跨域原理以及解决方案
  6. HTML标记语法总结
  7. 利用Cydia Substrate进行Android HOOK(二)
  8. T-SQL DBMS
  9. OpenStack网络的前世今生
  10. android JNI (二) 第一个 android工程
  11. DataGridview 填写数字
  12. 深入理解java String 对象的不可变性
  13. 理解和运用javascript中的call及apply
  14. 转:LoadRunner常用函数列表
  15. LINUX 笔记-read命令
  16. Caffe+VS2015+python3的安装(基于windows)
  17. ubuntu装好jupyter启动失败问题
  18. js 计算快速统计中用到的日期
  19. scala中隐式转换之总结
  20. python中的logger模块

热门文章

  1. 前端H5与安卓和ios之间通信
  2. .net core api服务端跨域配置
  3. SpringMVC整合Apache Shiro
  4. Oracle误操作--被提交后的数据回退(闪回)
  5. 关于AndroidStudio在真机安装的apk闪退(无法打开)的解决方案
  6. HDU - 2255 奔小康赚大钱 KM算法 模板题
  7. hdu 4612 无向图连通分量缩点,然后求树的最大直径
  8. 【百度之星】【思维】hdu 6724Totori&#39;s Switching Game
  9. HihoCoder - 1617 方格取数
  10. codeforces 361 D. Levko and Array(dp+二分)