Java持久化是指将应用程序中的数据保存在磁盘上或者其他持久化存储设备上的技术,是 Java 开发中必须掌握的一个重要知识点。Java 持久化的作用是在应用程序关闭或终止后,仍然能够保存或恢复数据,具有很大意义。这篇攻略将详细讲解 Java 持久化的作用及使用过程,从 Hibernate 到 JPA 再到 Spring Data JPA,内容一定涵盖丰富,读完后你将对 Java 持久化技术了解更深入。
Hibernate
Hibernate 是 Java 平台上的一个开源的 ORM 框架,是一个使用了 JDBC 的纯 Java 框架。Hibernate 的出现使得 Java 开发人员可以使用面向对象的方式来操作数据库,避免了程序员使用 JDBC 时繁琐的手动封装 SQL 语句的过程,从而提高了开发效率。Hibernate 提供了多种持久化方式,包括面向对象的永久化、面向过程的永久化、本地化数据存储等等。
使用 Hibernate 进行持久化,这是一个简单的例子:
public class User{
private Integer id;
private String name;
private Integer age;
//getter & setter
}
public class HibernateTest {
public static void main(String[] args) {
Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
User user = new User();
user.setName("john doe");
user.setAge(25);
session.save(user);
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}
通过上述代码我们可以看到,使用Hibernate的时候可以将对象持久化到数据库中,以便下次实例化时更方便地获取该对象的信息。
JPA
Java Persistence API(JPA)是定义了一组标准 Java API 的 ORM 规范,是加强版 JavaBeans 实体,是 EJB 3.0 规范的第四部分。JPA 通过注解和其他基于 Java 的方式来创建关系数据库的数据访问层。
使用 JPA 进行持久化,这是一个简单的例子:
@Entity
@Table(name = "users")
public class User {
@Id
private Long id;
private String name;
private Integer age;
//getter & setter
}
public class JpaTest {
public static void main(String[] args) {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
EntityManager entityManager = factory.createEntityManager();
entityManager.getTransaction().begin();
User user = new User();
user.setId(1L);
user.setName("john doe");
user.setAge(25);
entityManager.persist(user);
entityManager.getTransaction().commit();
entityManager.close();
factory.close();
}
}
在这个示例中,我们使用 JPA 进行持久化时,使用了 JPA 内置的注解 @Entity 和 @Table 来标识 User 实体类,表明其对应数据库中的表名和列名。使用 Entity Manager 来进行 CRUD 操作。
Spring Data JPA
Spring Data JPA 是由 Spring Data 抽象出来的一个库,提供了一组对象/关系映射的抽象书,使开发变得更加简单。它简化了 JPA 应用的开发,扩展了 Spring 类型查询方法,提供了基于 JPA 的 Repository 定义体系结构。Spring Data JPA 其实并不是一个新的技术,它依赖于 JPA 技术,简化了 JPA 的开发流程,并且增强了 JPA 的功能。
使用 Spring Data JPA 进行持久化,这是一个简单的例子:
@Repository
public interface UserRepo extends JpaRepository<User, Long> {
}
@Service
public class UserService {
@Autowired
private UserRepo userRepo;
public void save(User user) {
userRepo.save(user);
}
}
public class SpringDataJpaTest {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(SpringDataJpaTest.class, args);
UserService userService = ctx.getBean(UserService.class);
User user = new User();
user.setName("john doe");
user.setAge(25);
userService.save(user);
ctx.close();
}
}
在这个示例中,我们使用 Spring Data JPA 进行持久化,通过定义 JPARepository 接口,继承至 JpaRepository 接口,自动继承增删改查等方法,不需要再去定义 SQL 语句。而在 UserService 中,通过调用 UserRepo 类中的 save 方法,将 User 对象持久化到数据库中。
总之,Java 持久化的作用是将数据保存在磁盘上或者其他持久化存储设备上,为了保证数据的安全,使用 Java 持久化可以有效地避免数据丢失的问题,Hibernate、JPA 和 Spring Data JPA 等持久化框架是 Java 开发中常用的框架,它们提供了多种持久化方式,使得 Java 开发人员可以在开发中便捷地使用持久化功能。