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
- 【Go 语言 时间相关操作 demo】
- redis AOF保存机制
- 用 TensorFlow 让你的机器人唱首原创给你听
- 不用synchronized块的话如何实现一个原子的i++?
- Oracle升级中的参数补充(r9笔记第2天)
- 【Go 语言,服务器模块】日志系统源码
- wait方法和sleep方法的区别
- Java面试系列10
- python django整理(三)页面基础(仿BBS)
- 高并发场景下的httpClient优化使用
- socket.io 相关:Example: A simple chat server(官方 实例)
- django整理(四)配置setting文件(CSS,JS,images,templates)路径
- idea 远程调试 tomcat web应用
- Java 中冷门的 synthetic 关键字原理解读
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Android仿抖音右滑清屏左滑列表功能的实现代码
- 利用织梦CMS0day注入漏洞渗透测试
- nodejs中追加内容到文件
- android实现滚动文本效果
- Android实现View的拖拽
- 诊断日志知多少 | DiagnosticSource 在.NET上的应用
- Android Studio 4.0新特性及升级异常问题的解决方案
- Android Studio 4.0 正式发布在Ubuntu 20.04中安装的方法
- Android Studio 4.0 新功能中的Live Layout Inspector详解
- Android实现滑动刻度尺效果
- Android 仿微信发动态九宫格拖拽、删除功能
- android自定义等级评分圆形进度条
- Android Fragment实现底部通知栏
- Flutter实现局部刷新
- Android自定义条形对比统计图