spring JPA 实践记录
Posted mushimeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring JPA 实践记录相关的知识,希望对你有一定的参考价值。
开发一个小功能
mysql 数据库关联POJO
1 package *; 2 3 import lombok.Data; 4 import lombok.NoArgsConstructor; 5 6 import javax.persistence.Column; 7 import javax.persistence.Entity; 8 import javax.persistence.Id; 9 import javax.persistence.Table; 10 11 @Data 12 @Entity 13 @NoArgsConstructor 14 @Table(name = "alarm_topics") 15 public class AlarmTopicsEntity 16 17 @Column(name = "name", length = 255, nullable = false) 18 private String name; 19 20 @Id 21 @Column(name = "topic_urn", unique = true, nullable = false) 22 private String topicUrn; 23 24 25 @Column(name = "creator", length = 255) 26 private String creator; 27 28 @Column(name = "created_time") 29 private long createdTime; 30 31 @Column(name = "updated_time") 32 private long updatedTime; 33 34 @Column(name = "rules", length = 4096) 35 private String rules; 36
其中
topicUrn 为ID索引
1 package *.dao.api; 2 3 import *.model.AlarmTopicsEntity; 4 import org.springframework.data.jpa.repository.JpaRepository; 5 import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 6 7 import java.util.List; 8 9 public interface AlarmTopicDao extends JpaRepository<AlarmTopicsEntity, String>, JpaSpecificationExecutor<AlarmTopicsEntity> 10 11 12 // /** 13 // * findAll 14 // * 15 // * @param spec spec 16 // * @param pageable pageable 17 // * @return Page<TopicsEntity> 18 // */ 19 // Page<AlarmTopicsEntity> findAll(Specification<AlarmTopicsEntity> spec, Pageable pageable); 20 // 21 // List<AlarmTopicsEntity> findAll(Specification<AlarmTopicsEntity> spec); 22 23 24 // List<AlarmTopicsEntity> findByRulesLike(String rule); 25 26 // List<AlarmTopicsEntity> findByTopicUrn(String topicUrn); 27 28 // void deleteByTopicUrn(String topicUrn); 29 30 31 // @Query("select topicUrn from alarm_topics where rules like %:rule%") 32 // List<String> getTopicUrnByRule(@Param("rule") String rule); 33 // 34 // 35 // 36 // @Transactional 37 // @Modifying 38 // @Query("delete from AlarmTopicsEntity where topic_urn = ?1") 39 // void deleteByTopicUrn(@Param("topic_urn") String topicUrn); 40 // 41 // 42 // @Query("select AlarmTopicsEntity from AlarmTopicsEntity where topic_urn = ?1") 43 // AlarmTopicsEntity getByTopicUrn(@Param("topic_urn") String topicUrn); 44 // 45 46 47 48
调用
1 public void deleteTopic(String topicUrn) 2 3 alarmTopicDao.deleteById(topicUrn); 4 //注意此处不是deleteByTopicUrn,也不用再AlarmTopicDao中声明 5 6 7 public AlarmTopicsEntity getTopicByTopicUrn(String topicUrn) 8 9 return alarmTopicDao.findById(topicUrn).orElse(null); 10 11
findById(topicUrn)而非findByTopicUrn,
alarmTopicDao.findById(topicUrn)返回Optional结果,通常可以通过ispresent()方法判断是否有结果,也可以使用
jpa 支持以下命名规范 适用于
JPA和Hibernate的关系
JPA(Java Persistence API),是Java EE 5的标准ORM接口,也是ejb3规范的一部分。
Hibernate是之前很流行的ORM框架,也是JPA的一个实现,其它还有Toplink之类的ROM框架。
Hibernate主要是通过三个组件来实现的:
- hibernate-core:Hibernate的核心实现,提供了Hibernate所有的核心功能。
- hibernate-entitymanager:Hibernate实现了标准的JPA,可以把它看成hibernate-core和JPA之间的适配器,它并不直接提供ORM的功能,而是对hibernate-core进行封装,使得Hibernate符合JPA的规范。
- hibernate-annotation:Hibernate支持annotation方式配置的基础,它包括了标准的JPA annotation以及Hibernate自身特殊功能的annotation。
@id定义了映射到数据库表的主键的属性,一个实体只能有一个属性被映射为主键。
@GeneratedValue(strategy=GenerationType,generator=””)
可选
strategy:表示主键生成策略,有AUTO,INDENTITY,SEQUENCE 和 TABLE 4种,分别表示让ORM框架自动选择,根据数据库的 Identity 字段生成,根据数据库表的 Sequence 字段生成,以有根据一个额外的表生成主键,默认为 AUTO。
generator:表示主键生成器的名称,这个属性通常和ORM框架相关,例如,Hibernate可以指定uuid等主键生成方式.
@Column
可选
@Column描述了数据库表中该字段的详细定义,这对于根据JPA注解生成数据库表结构的工具非常有作用。
name:表示数据库表中该字段的名称,默认情形属性名称一致。
nullable:表示该字段是否允许为null,默认为true。
unique:表示该字段是否是唯一标识,默认为false。
length:表示该字段的大小,仅对String类型的字段有效。
以上是关于spring JPA 实践记录的主要内容,如果未能解决你的问题,请参考以下文章