一、定义
Hibernate 是一种开源的 Java 对象关系映射 (ORM) 框架,用于将面向对象的领域模型持久化到关系数据库中。它为开发人员提供了一种简便的方法来操作数据库,而无需编写繁琐的 SQL 代码。
ORM(对象关系映射):Object relation mapping
- 对象:指的是java对象,是实体bean。
- 关系:关系只是数据库,sqlserver,mysql,oracle都属于关系型数据库。
- 映射:java中对象的属性与数据库中的表字段之间一一对应(包含一对一,一对多,多对一,多对多)。
JPA、Hibernate、Spring Data jpa 三者之间的关系:
JPA全称Java Persistence API,它是一种规范,旨在可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。而Hibernate就是实现了JPA规范的ORM框架。Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架。Spring Data JPA是Spring提供的一套简化JPA开发的框架,按照约定好的【方法命名规则】写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。Spring Data JPA 可以理解为 JPA 规范的再次封装抽象,底层还是使用了 Hibernate 的 JPA 技术实现。
二、核心功能
1、对象关系映射 (ORM)
Hibernate 可以自动将 Java 对象映射到关系数据库表,并反之亦然。这意味着开发人员可以使用面向对象的术语来操作数据库,而无需了解底层的 SQL 语句
2、自动事务管理
Hibernate 可以自动管理数据库事务,开发人员无需手动开始和提交事务
3、缓存
Hibernate 可以缓存数据库查询结果,以提高性能
4、HQL查询语言
Hibernate 提供了一种名为HQL的查询语言,类似于SQL,但更易于使用
三、优势
1、提高开发效率
Hibernate 可以简化数据访问层 (DAL) 的开发,提高开发效率
2、降低代码复杂性
Hibernate 可以减少需要编写的 SQL 代码,降低代码复杂性
3、提高应用程序可移植性
Hibernate 可以将应用程序与特定的数据库供应商无关,提高应用程序的可移植性
四、SpringBoot集成Hibernate
0、数据库已存在category表
1、引入依赖
<!-- jpa 默认集成hibernate -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2、编写配置
spring:
datasource:
url: jdbc:mysql://xxx:xxx/xxx?useSSL=false&serverTimezone=UTC
username: xxx
password: xxx
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
database-platform: org.hibernate.dialect.MySQL8Dialect
# hibernate:
# # 指定了Hibernate如何自动生成数据库表
# # 每次启动应用程序时都会创建表,并在关闭应用程序时删除表
# ddl-auto: create-drop
3、编写实体类Category
@Data// @Data必须有,不然映射会为空
@Entity
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String updateTime;
private String createTime;
private String delFlag;
}
4、编写映射类(操作数据库的类)CategoryRepo
@Repository
public interface CategoryRepo extends JpaRepository<Category,Long> {
}
5、编写业务类CategoryService
@Service
public class CategoryService {
@Autowired
CategoryRepo categoryRepo;
public void list(){
List<Category> list= categoryRepo.findAll();
System.out.println(JSONUtil.toJsonPrettyStr(list));
}
}
6、测试
@SpringBootApplication
public class App implements CommandLineRunner
{
public static void main( String[] args )
{
SpringApplication.run(App.class,args);
}
@Autowired
CategoryService categoryService;
@Override
public void run(String... args) throws Exception {
categoryService.list();
}
}
结果:
7、高级映射
Spring Boot 入门系列(二十八) JPA 的实体映射关系,一对一,一对多,多对多关系映射! - 章为忠 - 博客园 (cnblogs.com)
五、原理
参考地址:
SpringBoot整合JPA_springboot中整合jpa-CSDN博客