当前位置: 首页 > news >正文

JPA 数据绑定通过 **注解映射** 实现对象与表的关联

Java Persistence API (JPA) 的数据绑定和操作主要通过实体类与数据库表的映射关系来实现。以下是核心机制和操作方式的详细说明:


1. 数据绑定(ORM 映射)

JPA 使用注解将 Java 对象(实体类)映射到数据库表,实现数据绑定:

实体类注解示例:
@Entity
@Table(name = "users")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "username")private String username;@Column(name = "email")private String email;// 关联关系映射(例如一对多)@OneToMany(mappedBy = "user")private List<Order> orders;// Getter/Setter 省略
}
关键注解说明:
  • @Entity:标记类为 JPA 实体,与数据库表对应。
  • @Table:指定映射的表名(默认类名即表名)。
  • @Id + @GeneratedValue:定义主键及其生成策略(如自增、UUID)。
  • @Column:映射字段与列(可定制列名、长度、是否可为空等)。
  • 关联注解(如 @OneToMany@ManyToOne):定义表间关系。

2. 数据操作

通过 EntityManager 执行数据库操作,核心方法如下:

基本 CRUD 操作:
@PersistenceContext
private EntityManager entityManager;// 新增
public void createUser(User user) {entityManager.persist(user); // 插入数据
}// 查询(按ID)
public User findUserById(Long id) {return entityManager.find(User.class, id); // 查询单个实体
}// 更新
public void updateUser(User user) {entityManager.merge(user); // 合并变更到数据库
}// 删除
public void deleteUser(Long id) {User user = entityManager.find(User.class, id);entityManager.remove(user); // 删除实体
}
查询语言(JPQL):
// 查询所有用户
TypedQuery<User> query = entityManager.createQuery("SELECT u FROM User u WHERE u.email LIKE :email", User.class
);
query.setParameter("email", "%@gmail.com");
List<User> users = query.getResultList();// 原生 SQL 查询
Query nativeQuery = entityManager.createNativeQuery("SELECT * FROM users WHERE username = ?", User.class
);
nativeQuery.setParameter(1, "john");
List<User> result = nativeQuery.getResultList();
条件 API(Criteria API):
// 动态构建查询
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<User> query = cb.createQuery(User.class);
Root<User> root = query.from(User.class);// 条件:username = "admin"
Predicate condition = cb.equal(root.get("username"), "admin");
query.where(condition);List<User> users = entityManager.createQuery(query).getResultList();

3. 事务管理

使用 @Transactional 确保操作原子性:

@Transactional
public void transferMoney(Long fromId, Long toId, BigDecimal amount) {User fromUser = entityManager.find(User.class, fromId);User toUser = entityManager.find(User.class, toId);fromUser.setBalance(fromUser.getBalance().subtract(amount));toUser.setBalance(toUser.getBalance().add(amount));// 变更自动同步到数据库(事务提交时)
}

4. 高级特性

  • 懒加载(Lazy Loading):关联数据(如 orders)在首次访问时才查询。
  • 级联操作(Cascade):配置 CascadeType.ALL 可自动同步关联实体的增删改。
  • 缓存:一级缓存(EntityManager 生命周期)和二级缓存(应用级缓存)。

5. Spring Data JPA 简化操作

通过继承 JpaRepository 进一步简化代码:

public interface UserRepository extends JpaRepository<User, Long> {// 自动生成查询方法List<User> findByUsername(String username);Optional<User> findByEmail(String email);
}

总结

JPA 的数据绑定通过 注解映射 实现对象与表的关联,数据操作依赖 EntityManager 或 Spring Data JPA 封装的接口,结合 JPQL/Criteria API 灵活查询,并通过事务管理保证一致性。这种设计显著减少了直接编写 SQL 的工作量,提升了开发效率。

http://www.dtcms.com/a/603032.html

相关文章:

  • VSCode编译C语言 | 高效配置与运行步骤指南
  • 怎么建立一个网站放图片夸克浏览器官网入口
  • PPT插入的图片太大了,怎么缩小一点?
  • 网站社区建设公司网站做的好的公司
  • 石家庄建网站挣钱优帮云温州建设集团网站
  • 镜像多阶段构建-YAML-Compose
  • 每日一题 —— [NOIP 2007 普及组] 纪念品分组
  • 如何用wordpress建站自动搭建网站源码
  • 长沙竞价网站建设价格福田深圳网站建设
  • 查企业资质上什么网站网页源代码查找指定文字
  • 重庆蒲公英网站建设公司怎么样网络营销是什么 能做什么
  • c语言反编译工具 | 探讨C语言反编译工具的应用与发展趋势
  • 关系的网站织梦网站怎样做子域名
  • 最牛网站设计公司门户首页网站建设方案
  • 网站建设 seojsc易企秀类似的软件
  • LODE(Loss Decoupling)个人理解
  • 成都网站建设3六六俄罗斯门户网站
  • 淮南房地产网站建设网站睿思设计
  • 十七、自然语言处理概述
  • 微信手机网站流程湖南软件定制开发
  • 如何做自己产品网站企业网站建设杭州公司
  • C++ 离散化
  • 人力资源网站怎么做品牌网站设计公司价格
  • 网站建设包含专业html修改成wordpress主题
  • 网站开发总结与未来展望网络营销推广专家
  • 柳州企业网站建设价格wordpress宽屏
  • C++11——RAII 锁封装类
  • 怎样在工商局网站做公示南宁兴宁区建设局网站
  • 自己做网站的准备工作个人网站设计html
  • 张家界建设局网站电话号码郑州最新发布