spring JPA 实践记录

时间:2019-09-21
本文章向大家介绍spring JPA 实践记录,主要包括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类型的字段有效。

原文地址:https://www.cnblogs.com/mushimeng/p/11562986.html