领域模型设计
我们的领域模型将包含一个简单的 Person 类,其中定义几个核心字段。
首先,新建一个名为 Person 的类,包名设为 quickstart.model。添加 id(int)、firstName(String)和 lastName(String)字段,并生成对应的 getter/setter 方法。
关键步骤是标记持久化属性:使用 @Entity 注解标识该类可被持久化,对 id 字段分别加上 @Id 和 @GeneratedValue 注解。这样 JPA 提供者(如 Hibernate)就能识别主键并自动生成 ID 值。默认情况下,类和字段会映射为同名的表与列。
package quickstart.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Person {
@Id
@GeneratedValue
private Integer id;
private String lastName;
private String firstName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
服务层实现
接下来编写处理 Person 对象 CRUD 操作的类。
先定义 PersonService 接口,位于 quickstart.service 包下,声明查询、保存、删除及查找的方法签名。
package quickstart.service;
import java.util.List;
import quickstart.model.Person;
public interface PersonService {
List<Person> findAll();
void save(Person person);
void remove(int id);
Person find(int id);
}
然后创建实现类 PersonServiceImpl。这里需要引入 EntityManager 进行数据库交互,并利用 Spring 的事务管理特性。
package quickstart.service;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.transaction.annotation.Transactional;
import quickstart.model.Person;
@Transactional
public class PersonServiceImpl implements PersonService {
private EntityManager em;
@PersistenceContext
public void setEntityManager(EntityManager em) {
this.em = em;
}
@SuppressWarnings("unchecked")
public List<Person> findAll() {
Query query = getEntityManager().createQuery("select p FROM Person p");
return query.getResultList();
}
public void save(Person person) {
if (person.getId() == null) {
// 新增
em.persist(person);
} else {
// 更新
em.merge(person);
}
}
public void remove(int id) {
Person person = find(id);
if (person != null) {
em.remove(person);
}
}
private EntityManager getEntityManager() {
return em;
}
public Person find(int id) {
return em.find(Person.class, id);
}
}
注意 @PersistenceContext 注解会让 Spring 在实例化时自动注入 EntityManager,它可以放在字段或 setter 方法上。配合 @Transactional 注解,Spring 会确保这些方法在事务环境中运行,保证数据一致性。

