Java 之 JPA 入门教程讲解
什么是 JPA?
JPA(Java Persistence API)是一种规范,它定义了一组 API 去管理 Java 对象和关系型数据库之间的映射,以及持久化 Java 对象到数据库中。JPA 的目的是为了简化持久化操作,提高代码可读性和可维护性。
JPA 的使用步骤
- 定义并配置实体类
- 创建 EntityManager
- 开始事务
- 操作数据库
- 提交事务
- 关闭 EntityManager
实体类
在使用 JPA 进行持久化操作之前,需要定义并配置实体类。实体类通常用来映射数据库表结构,为了遵循 JPA 规范,我们需要为实体类添加 @Entity 注解,并为实体类指定其对应的数据表名,如下所示:
@Entity
@Table(name = "person")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Integer age;
// Getter 和 Setter
}
EntityManager
JPA 中的 EntityManager 是我们进行 JPA 操作的入口对象,它是线程不安全的,应该为每个线程创建一个 EntityManager 对象,也可以将其管理到 Spring 中的 Bean 容器中,由 Spring 框架进行统一管理。可以通过如下方式获取 EntityManager:
@PersistenceContext
private EntityManager entityManager;
操作数据库
在获得 EntityManager 对象之后,就可以进行数据库操作了。下面是插入一条数据的示例代码:
Person person = new Person();
person.setName("张三");
person.setAge(20);
entityManager.persist(person);
查询数据
查询数据可以使用 JPA 提供的一些查询方法,也可以通过 JPQL (Java Persistence Query Language)进行查询。下面是 JPQL 查询的示例代码:
TypedQuery<Person> query = entityManager.createQuery("SELECT p FROM Person p WHERE p.name = :name", Person.class);
query.setParameter("name", "张三");
List<Person> persons = query.getResultList();
示例
下面以 Spring Boot 为例,演示如何使用 JPA 进行增删改查操作:
- 在 pom.xml 中添加 JPA 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
- 配置数据源和 JPA:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
show_sql: true
format_sql: true
- 创建实体类 Person:
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Integer age;
// Getter 和 Setter
}
- 创建数据访问层接口:
@Repository
public interface PersonRepository extends JpaRepository<Person, Long> {
List<Person> findByName(String name);
}
- 创建业务逻辑层和控制器:
@Service
public class PersonService {
@Autowired
private PersonRepository personRepository;
public void addPerson(String name, Integer age) {
Person person = new Person();
person.setName(name);
person.setAge(age);
personRepository.save(person);
}
public void updatePerson(Long id, String name, Integer age) {
Optional<Person> optionalPerson = personRepository.findById(id);
if (optionalPerson.isPresent()) {
Person person = optionalPerson.get();
person.setName(name);
person.setAge(age);
personRepository.save(person);
}
}
public void deletePerson(Long id) {
personRepository.deleteById(id);
}
public List<Person> findPersonByName(String name) {
return personRepository.findByName(name);
}
}
@RestController
public class PersonController {
@Autowired
private PersonService personService;
@PostMapping("/person")
public void addPerson(@RequestParam("name") String name, @RequestParam("age") Integer age) {
personService.addPerson(name, age);
}
@PutMapping("/person/{id}")
public void updatePerson(@PathVariable("id") Long id, @RequestParam("name") String name, @RequestParam("age") Integer age) {
personService.updatePerson(id, name, age);
}
@DeleteMapping("/person/{id}")
public void deletePerson(@PathVariable("id") Long id) {
personService.deletePerson(id);
}
@GetMapping("/person")
public List<Person> findPersonByName(@RequestParam("name") String name) {
return personService.findPersonByName(name);
}
}
- 启动应用,测试 API,可以使用 Postman 工具来进行测试。
总结
本文讲解了 JPA 的使用步骤、实体类的定义和配置、EntityManager 的使用以及一些操作数据库和查询数据的示例代码。同时,结合 Spring Boot,演示了如何使用 JPA 进行增删改查操作。希望对初学者有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java之jpa入门教程讲解 - Python技术站