Java之jpa入门教程讲解

Java 之 JPA 入门教程讲解

什么是 JPA?

JPA(Java Persistence API)是一种规范,它定义了一组 API 去管理 Java 对象和关系型数据库之间的映射,以及持久化 Java 对象到数据库中。JPA 的目的是为了简化持久化操作,提高代码可读性和可维护性。

JPA 的使用步骤

  1. 定义并配置实体类
  2. 创建 EntityManager
  3. 开始事务
  4. 操作数据库
  5. 提交事务
  6. 关闭 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 进行增删改查操作:

  1. 在 pom.xml 中添加 JPA 依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
  1. 配置数据源和 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
  1. 创建实体类 Person:
@Entity
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Integer age;
    // Getter 和 Setter
}
  1. 创建数据访问层接口:
@Repository
public interface PersonRepository extends JpaRepository<Person, Long> {
    List<Person> findByName(String name);
}
  1. 创建业务逻辑层和控制器:
@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);
    }
}
  1. 启动应用,测试 API,可以使用 Postman 工具来进行测试。

总结

本文讲解了 JPA 的使用步骤、实体类的定义和配置、EntityManager 的使用以及一些操作数据库和查询数据的示例代码。同时,结合 Spring Boot,演示了如何使用 JPA 进行增删改查操作。希望对初学者有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java之jpa入门教程讲解 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • 2019年Linux运维趋势与规划展望

    2019年Linux运维趋势与规划展望 Linux运维是当前IT行业中非常重要的一个领域,随着技术的不断发展,Linux运维也在不断变化和发展。本文将介绍2019年Linux运维趋势与规划展望的完整攻略,包括背景介绍、趋势分析、规划展望、示例说明等。 1. 背景介绍 Linux运维是指对Linux系统进行管理、维护和优化的工作。随着云计算、大数据、人工智能等…

    云计算 2023年5月16日
    00
  • 戴文军:如何用边缘计算+边缘存储打造新一代智能视频云

    云栖大会七牛云专场论坛于 9 月 20 日在杭州云栖小镇举行,以「当 Cloud 遇上 AI 为主题,围绕「云」和「人工智能」两个关键词,邀请了多名业内大咖,为大家带来了精彩演讲。七牛云技术副总裁戴文军,在会上作了题为《如何用边缘计算+边缘存储打造新一代智能视频云》的分享。
 以下内容为根据现场演讲内容速记的实录整理。

大家下午好。在开始之前,要给大家澄…

    云计算 2023年4月12日
    00
  • python网络编程学习笔记(10):webpy框架

    我来详细讲解“Python网络编程学习笔记(10):webpy框架”完整攻略。 1. web.py是什么 web.py是一个Python的web框架,是一个轻量级的框架,但是它具有丰富的功能,例如快速的开发和可扩展性等优点。web.py可以用于开发各种web应用程序,包括web应用程序和RESTful API。 2. 快速开始使用web.py 2.1 安装w…

    云计算 2023年5月18日
    00
  • Google Docs部分文档被自动共享 凸显云计算安全问题 – 狼人:-)

    Google Docs部分文档被自动共享 凸显云计算安全问题 2011-10-08 19:53 狼人:-) 阅读(123) 评论(0) 编辑 收藏 举报 近日,Google曾给不少Google Docs用户发信表示,由于Google的疏忽导致用户存在Google Docs上的部分文档会在用户不知晓的情况下被共享. 业界人士认为,Google的这一疏忽显现了云…

    云计算 2023年4月13日
    00
  • 2012云计算扫盲

      IaaS[1](Infrastructure as a Service),即基础设施即服务。     消费者通过Internet 可以从完善的计算机基础设施获得服务。这类服务称为基础设施即服务(Infrastructure as a Service,IaaS)。基于 Internet 的服务(如存储和数据库)是 IaaS的一部分。Internet上其他类…

    云计算 2023年4月11日
    00
  • 使用Python对零售商品进行数据分析

    以下是使用Python对零售商品进行数据分析的完整攻略: 步骤一:数据收集和清洗 在进行数据分析之前,我们需要先收集数据并对原始数据进行清洗,确保数据的正确性和一致性。在这一步中,需要完成以下任务: 收集需要分析的数据,例如销售数据、库存数据等 清洗原始数据,包括去除重复值、处理缺失值、处理异常值等 在Python中,我们可以使用pandas库完成数据的读取…

    云计算 2023年5月18日
    00
  • java8 Stream大数据量List分批处理切割方式

    请看下文详细讲解。 Java8 Stream大数据量List分批处理切割方式 前言 在实际的开发过程中,我们经常会遇到处理大数据量的情况。而处理大数据量时,有一种常用的处理方式就是将数据拆分成多个批次进行处理,这样可以使处理更加高效。在Java8中,Steam API提供了一种方便的方式来处理大数据量的集合,本文将会详细讲解如何使用Java8 Stream …

    云计算 2023年5月18日
    00
  • Java开发者必备10大数据工具和框架

    Java开发者必备10大数据工具和框架 数据处理对于Java开发者来说是一个不可避免的任务,同时也是一项重要的技能。为了简化这个过程,有许多数据工具和框架可供使用。本文将介绍10大Java数据工具和框架,包括它们的优缺点以及使用示例。 1. Apache Hadoop Apache Hadoop是一个主要用于处理大数据的开源软件框架。它使用分布式文件系统和分…

    云计算 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部