JPA(JavaPersistence API)也就是java储存数据API,提供了更为便捷的存储数据的接口,当然在进行一些复杂及查询操作时需要使用Java Persistence query language,这个和sql基本一样,只是需要遵循另一些语法规则,可以参考http://download.oracle.com/javaee/5/tutorial/doc/bnbuf.html。
在使用JPA时,比如你的MySql中有定义了一个Lesson表格,现在想对Lesson表格进行添加一个记录,这时候你需要写的代码主要有两个:
1、写一个Lesson.java,就是一个pojo啦,一个简单的java对象,里面包括了数据库中Lesson表格的所有字段,这里见Lesson.java中的属性名称同数据库的名称保存一致便ok了。然后再User.java类定义前面加上@Entity这个annotation,这样子相当标注了这个Lesson.java类将作为存储时的一个实体来对待。
2、写一个存储接口,比如LessonServiceImpl.java,这个类里面需要有一个javax.persistence.EntityManager类的属性,比如命名为em,这样相应的数据操作就可以通过这个em来实现,比如要添加一天记录,只需要调用em.persist。更新时em.merge,删除时em.remove。JPA考虑到这些通常的应用因此设计了这些简单的接口方便操作。下面是该类的部分代码
@Transactional
public class LessonServiceImpl implements LessonService {
private EntityManager em;
@PersistenceContext
public void SetEntityManager(EntityManager em)
{
this.em = em;
}
public void remove(int id) {
// TODO Auto-generated method stub
Lesson lesson = em.find(Lesson.class, id);
if(lesson != null)
{
em.remove(lesson);
}
}
.............
当然需要注意到的是存储的接口LessonServiceImpl.java在设计的时候通常是作为singleton的类型,因此通常是在类工厂里面将来。而且通常LessonServiceImpl.java中的那个EntityManager对象是通过依赖注入的方式在类工厂中直接设置。比如下面的代码spring factory中的例子
................
<bean id="LessonService" class="quickstart.service.LessonServiceImpl" />
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
.......................
</bean>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
...................
这里使用的不是纯粹的JPA,而是使用hibernate-jpa-2.0-api-1.0.0.Final.jar中的JPA。对LessonServiceImpl.java这个类的定义前加入@Transactional,表示这个类需要进行事务管理,而使用的事务则是通过<tx:annotation-driven />来指定的,也就是LessonServiceImpl要通过这个类工厂中定义的transactionManager来进行数据的操作时的事务处理,可以参考http://static.springsource.org/spring/docs/2.0.x/reference/transaction.html#transaction-declarative。
定义一个set函数这个函数传递进一个EntityManager的类参数,通过这个接口类工厂才可以将LessonServiceImpl需要EntityManager由类工厂中注入进去,然后这个set函数需要加上@PersistentContext这个annotation,表示这个就是注入存储上下文对象的接口,可以参考http://download.oracle.com/javaee/5/tutorial/doc/bnbqw.html。
当然另外我想最简单清楚表现JPA使用的方法可能是这样,采取直接注入的方式:
<bean id="LessonService" class="quickstart.service.LessonServiceImpl" >
<property name="entityManager" ref="entityManager"/>
</bean>
但是这样一个问题就是所有的访问数据的接口都要注入一次。所以这里通过AOP的方法及结合annotation的方法(常用的是xml方式)来进行依赖注入。对于事务处理通过@Transactional来实现的,所以这里如果去掉@Transactional则相当于去掉事务管理,会导致只能对数据进行查询操作无法删除或更新;而对于管理entity则通过@PersistentContext,这里类工厂会把名称为entityManagerFactory(默认名称)的bean传递给所有工厂中的bean有添加@PersistentContext的接口(这里是LessonService)
分享到:
相关推荐
在Java后端开发中,Spring框架提供了强大的事务管理能力,特别是在使用Spring Data JPA时,`@Transactional`注解使得事务处理变得简单易用。这个注解是Spring框架中的核心部分,它允许开发者声明性地控制事务边界,...
在Java世界中,Spring Data JPA是一个非常流行的框架,它为开发者提供了与关系数据库交互的便利,通过简化JPA(Java Persistence API)的使用。在处理大量数据时,提高性能和效率是至关重要的,这就是`@...
### Hibernate JPA 知识点详解 #### 一、Hibernate JPA 概述 **Hibernate**作为当前最为流行的对象关系映射(Object Relational Mapping, ORM)框架之一,在Java开发领域占据着举足轻重的地位。它最早实现了**Java...
**JPA注解@Access详解** Java Persistence API (JPA) 是Java中用于对象关系映射(ORM)的标准框架,它允许开发人员将Java类与数据库表进行映射,从而简化数据操作。在JPA中,`@Access`注解是用于指定实体属性访问...
下面我们将深入探讨`@Transactional`的工作原理,以及其与JPA、持久化上下文(Persistence Context)和数据库事务的关系。 首先,`@Transactional`的使用简化了事务管理。当在方法上标注`@Transactional`时,Spring...
在idea下搭建springboot+jpa+mysql+logs+transactional框架 具体内容 请参考项目代码 后续还会增加springcloud的相关内容 都是基于springboot框架的
JPA @Query 注解中使用 Limit 条件详解 在 Java 持久层 API(JPA)中使用 @Query 注解时,需要注意 Limit 条件的使用。在本文中,我们将详细介绍如何在 JPA 的 @Query 注解中使用 Limit 条件。 Limit 条件的使用 ...
总的来说,通过这种方式,我们可以使用JPA和`@Query`注解方便地执行数据库更新操作,同时利用`@Modifying`和`@Transactional`注解来管理事务和数据一致性。这种方法提供了更高的灵活性,允许开发者根据需求定制查询...
使用`@Repository`接口和`@Transactional`注解实现数据访问层。 3. **Jquery 前端交互** Jquery简化了DOM操作,使得我们可以轻松地处理用户事件、动态更新页面内容。在这个示例中,可能用到了`$.ajax()`方法来异步...
**JPA(Java Persistence API)**是Java平台上的一个标准,用于管理关系数据库中的对象-关系映射(ORM)。它提供了方便的API和工具来处理持久化操作,使得开发人员可以更加专注于业务逻辑,而不是底层数据库操作。在...
JPA Annotation Reference
在Spring Data JPA中,当我们处理复杂的数据查询时,可能会遇到N+1查询问题,即在获取一个实体及其关联对象时,数据库会执行多次查询,每次查询一个关联对象。为了解决这个问题,JPA提供了@EntityGraph注解,配合...
其次,Spring 实现了部分在 EJB 容器环境下才具有的功能,比如对 @PersistenceContext、@PersistenceUnit 的容器注入支持。 第三,也是最具意义的,Spring 将 EntityManager 的创建与销毁、事务管理等代码抽取出来...
下面是 JPA 核心知识的讲解,包括 JPA 概述、JPA 入门、JPA 实体、JPA 实体管理器等。 JPA 概述 JPA 是什么?JPA 是 Java Persistence API 的缩写,全称为 Java 持久化 API。JPA 是一个 Java 标准,提供了一个通用...
Spring Data JPA 动态条件查询写法详解 Spring Data JPA 是一个基于 Java Persistence API(JPA)规范的数据访问框架,提供了强大的数据访问功能。在实际开发中,我们经常需要根据不同的条件进行数据查询,而 ...
在本例中,`@PersistenceContext`注解用于由Spring自动注入一个`EntityManager`实例,这样我们就可以在Service层或DAO层中执行JPA操作。同时,`@Transactional`注解确保在执行数据库操作时方法总是在事务中,以保证...
在Java开发中,Java Persistence API (JPA) 是一种用于管理关系数据库的框架,它提供了一种面向对象的方式来操作数据库。在JPA中,@Query注解允许开发者编写自定义的SQL或者HQL(Hibernate Query Language)来执行...
5. **配置Spring的事务管理**:在服务层的类或方法上使用`@Transactional`注解,Spring会自动管理事务的开启、提交和回滚。 6. **测试**:编写测试用例,验证Spring和OpenJPA的集成是否成功。 通过以上步骤,你就...
在示例代码中,`TestCaseDaoImpl`类通过`@Service`注解被识别为Spring管理的服务层组件,其中使用了`@PersistenceContext`注解来注入`EntityManager`,这是JPA的核心组件,用于执行实体的增删改查操作: ```java @...