一、JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue设定的.这里的 @id和@GeneratedValue都是JPA的标准用法, JPA提供四种标准用法,由@GeneratedValue的源代码可以明显看出. 分别介绍其他三个: 1.SEQUENCE 实体类中的注解 @Id @GeneratedValue(strategy =GenerationType.SEQUENCE,generator="aaa" 比如说,JPA标准用法 @Id @GeneratedValue(GenerationType.AUTO) 就可以用hibernate特有以下用法来代替: @Id @GeneratedValue( 使用hibernate注解示例如下: @Id @GeneratedValue(generator = "IDGenerator") @GenericGenerator(name = "IDGenerator
前言 本篇文章引导你通过Spring Boot,Spring Data JPA和MySQL实现设置@id @generatedvalue初始值从10000自增。 scope> </dependency> </dependencies> </dependencyManagement> </project> @id @generatedvalue valueColumnName = "APP_SEQ_VALUE", initialValue = 10000, allocationSize = 1 ) @GeneratedValue 该属性值可以通过应该自身创建,但是Hibernate推荐通过Hibernate生成 @GeneratedValue 指定主键的生成策略。 name 声明该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中; table 声明表生成策略所持久化的表名; pkColumnName 声明在持久化表中
@Id 和 @GeneratedValue(strategy = GenerationType.IDENTITY) 是JPA(Java Persistence API)框架中的注解,用于表示实体类中的主键字段 @GeneratedValue注解用于定义主键生成策略,strategy属性指定了生成主键的方式,常用的取值有IDENTITY、SEQUENCE、TABLE等。 @Id和@GeneratedValue(strategy = GenerationType.IDENTITY)这两个注解用于设置实体类的主键。 @TableId注解将id字段标记为主键字段,并使用了@GeneratedValue(strategy = GenerationType.IDENTITY)和@TableId注解的type属性设置了主键生成策略为数据库自增长主键 在使用MyBatis框架时,通常使用@Id 和@GeneratedValue注解来表示主键字段;在API文档生成和对象序列化时,可以使用@ApiModelProperty和@JsonSerialize注解来对属性进行描述和格式转换
一对一 如果我们只是单纯的在两个实体类中分别加上@OneToOne注解,会发现两张表都分别引入了对方的主键作为外键。明显的数据冗余,毕竟关系不用双方存储。 private String id; private String name; } 此时我只在多的一方加了一个ManyToOne注解。 只有ManyToOne一个注解 默认是在many_object里面加了一个外键列 ? 只有一个OneToMany注解 默认情况下是生成了一张关系表。用户维护一对多关系。 ? 关系表 至于默认的表名列名,大家可以去看生成规则。 ="obj_id") private List<ManyObject> manyObject; 注意mappedBy不能与@JoinColumn注解连用 ?
文章目录 一、定义注解 二、使用注解 三、解析注解 四、通过注解对象获取注解属性的原理 在 【Java 注解】自定义注解 ( 注解属性定义与赋值 ) 博客中讲解了 注解属性 ; 在 【Java 注解】自定义注解 ( 元注解 ) 博客中讲解了注解中的元注解如何描述注解 ; 本篇博客开始讲解注解在程序中如何进行 解析 和 使用 ; 注解中定义了 若干 注解属性 , 那么就需要在某个阶段 , 将 注解属性 的值拿出来 调用 注解对象 中的抽象方法, 获取其返回值 // 注解的本质就是接口, 其中的注解属性本质是 抽象方法 // 注解对象可以直接调用注解超抽象方法, // 是因为在内存中生成了该 : name = " + name + " , age = " + age); } } 四、通过注解对象获取注解属性的原理 ---- 通过注解对象获取注解属性的原理 : 注解的本质就是接口, 其中的注解属性本质是 抽象方法 , 注解对象可以直接调用注解超抽象方法 , 是因为在内存中生成了该 注解 接口的子类对象, 实现了 name 和 age 方法 , 返回值就是本类注解中的 注解属性值 ;
查看@JSONField注解的源码可以了解到它的作用范围是在方法(METHOD)、属性(FIELD)、方法中的参数(PARAMETER)上。 2.注解作用在set、get方法之上 @JSONField(name="new_username") public String getUsername() { return new_username,可以改变字段的名称,跟上面直接注解到属性上是一样的效果。 3.注解中的serialize、deserialize用法 翻看源码可以看到serialize、deserialize的默认值都是true,也就是说默认情况下(即使不设置serialize、deserialize @JSONField(name="new_password", serialize=false, deserialize=false) private String password; 4.注解中的
文章目录 一、元注解 二、常用的元注解类型 三、@Target 元注解 四、@Retention 元注解 五、@Documented 元注解 六、@Documented 元注解 一、元注解 ---- 元注解 是 描述 注解 的 注解 ; 以 Override 注解为例 , 分析下该注解的 元注解 含义 : @Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE : 描述 注解 是否被子类继承 , 如果添加了该注解 , 则子类会自动继承父类的注解 ; 三、@Target 元注解 ---- 查看 Target 注解的源码 , 该注解只有 1 个注解属性 , 且属性值是 注解 , 则导出的文档如下 , 在类和方法的上面会显示相应注解 ; 如果不使用 @Documented 注解 , 则生成的文档中没有 Annotation 注解 ; 六、@Documented 元注解 ---- @Inherited : 描述 注解 是否被子类继承 , 如果添加了该注解 , 则子类会自动继承父类的注解 ; 使用 @Inherited 元注解 标注 Annotation 注解 ; 使用
Hibernate注解之基本注解的注解使用 1.1. 使用注解须知 1.2. 类级别注解 1.3. 属性级别的注解 1.4. 主键相关的注解 1.5. 与非主键相关的注解 1.6. 实例 1.7. 参考文档 Hibernate注解之基本注解的注解使用 使用注解须知 我们在使用注解自动创建表的时候,系统会默认为我们创建一张表Hibernate_sequence,我们可以在Hibernate.cfg.xml 主键相关的注解 @id: 指定该属性为主键 @GeneratedValue(strategy=,generator="") : 主键生成策略 Strategy的值 GenerationType.AUTO ; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType String getWife() { return wife; } public void setWife(String wife) { this.wife = wife; } @Id @GeneratedValue
常用注解: 除了刚刚都注解,最后再附加2个常用注解,我就直接贴图了,基本上这6个注解可以解决99%的字段,其他注解我就不贴图了,如果不满足,自己问百度。 @Validated 详解 上面,我们讲述了 @Valid 注解,现在我们来说说 @Validated 这个注解,在我看来,@Validated 是在 @Valid 基础上,做的一个升级版。 现在,我们去掉方法参数上的 @Valid 注解和其配对的 BindingResult 对象, 然后再校验的对象前面添加上 @Validated 注解。 首先我们创建一个校验异常捕获类 ValidExceptionHandler ,然后打上 @RestControllerAdvice 注解,该注解表示他会去抓所有 @Controller 标记类的异常,并在异常处理后返回以 @Valid 和 @Validated 比较 最后我们来对 @Valid 和 @Validated 两个注解进行总结下: (1)@Valid 和 @Validated 两者都可以对数据进行校验,待校验字段上打的规则注解
https://blog.csdn.net/ajianyingxiaoqinghan/article/details/81436118 Java 注解 —— 注解的理解、注解的使用与自定义注解 参考网址: 《秒懂,Java 注解 (Annotation)你可以这样学》 《Java注解基本原理》 《注解Annotation实现原理与自定义注解例子》 《框架开发之Java注解的妙用》 元注解 元注解是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其它的注解上面。 容器注解就是用来存放其它注解的地方,它本身也是一个注解。 注解的属性 注解的属性也叫做成员变量。注解只有成员变量,没有方法。注解的成员变量在注解的定义中以无形参的方法形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型。
GeneratedValue注解GeneratedValue 是JPA主键生成策略中的一个非常重要的注解。 () default AUTO; String generator() default "";}如上代码所示,GeneratedValue 注解有 strategy 和 generator 两个成员变量 2.1 主键生成策略【strategy】持久化提供程序必须使用主键生成策略来生成被注解的实体的主键。 注解中指定一个生成器元素时使用。 注解中指定一个生成器元素时。
Spring Data JPA 提供了相应的时间注解,只需要两步配置,就可以帮助开发者快速实现这方面的功能。 在实体类上加上注解 @EntityListeners(AuditingEntityListener.class),在相应的字段上添加对应的时间注解 @LastModifiedDate 和 @CreatedDate EntityListeners(AuditingEntityListener.class) public class User { /** * 自增主键 */ @Id @GeneratedValue EntityListeners(AuditingEntityListener.class) public class User { /** * 自增主键 */ @Id @GeneratedValue @AllArgsConstructor public class BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY
就用到了@DateTimeFormat注解 和 @JsonFormat 注解。 二、发现问题 在网上查阅资料的过程中,发现大部分作者给出的解释并不全面,大多数都是说,前台向后台传递数据用@DateTimeFormat注解。而后台向前台传递就用@JsonFormat注解。。 而@JsonFormat注解却可以转换这种情况下的参数。 三、对比总结及使用 @DateTimeFormat用于前台向后台 ,将传入的字符串转换为Date类型。 joda-time</artifactId> <version>2.3</version> </dependency> ``` ② 在实体类的需要类型转换的属性上加上@JsonFormat注解 只需要@JsonFormat一个注解就可以了 2.前台向后台则需要 需求分析到底使用@JsonFormat注解 还是 @DateTimeFormat注解。
@OneToOne 注解 在 JPA 中,我们使用 @OneToOne 注解来定义实体之间的一对一关系。 以下是一个简单的示例: @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY 其中,Role 实体拥有一个 User 引用,并使用 @JoinColumn 注解定义外键列。User 实体通过 mappedBy 属性反向引用 Role 实体。 注解用于标记父子关系,防止在序列化时出现无限递归。 我们介绍了两种主要解决方案:使用 @JsonManagedReference 和 @JsonBackReference 注解,以及使用 DTO 进行数据传输。
讲到 注解 我们就必须知道 在Java世界中,注解的类型。 元注解 自定义注解 注解修饰的范围 注解用来修饰,类、方法、变量、参数、包 什么是元注解? (JDK 只提供4个) 一般我们把元注解理解为描述注解的注解,元数据理解为描述数据的数据,元类理解为描述类的类… 分别是 @Target、@Retention、@Documented、@Inherited 什么是自定义注解? 除了4个元注解,其余的所有注解,都叫自定义注解 元注解详解 @Target:说明注解标记的对象,一般通过枚举ElementType 选值 可选的值有: CONSTRUCTOR: 用于描述构造器 FIELD @Target({ElementType.TYPE,ElementType.METHOD}) //多个注解,用数组形式 含义是:该注解标记在类上、方法上 @Retention:用于描述注解的生命周期
注解的分类: 源码注解 编译时注解 JDK的@Override 运行时注解 Spring的@Autowired 自定义注解的语法要求 ① 使用@interface关键字定义注解 ② 成员以无参无异常方式执行 ③ 可以用defaut为成员指定一个默认值 ④ 成员类型是受限的包括原始类型,及String Class Annotation Enumberation ⑤ 如果注解只有一个成员,则成员名必须取名为value (),在使用时可以忽略成员名和赋值号(=) ⑥ 注解类可以没有成员,称为标识注解 package com.tsh.ano; import java.lang.annotation.Documented public @interface Description { String desc(); String author(); int age() default 18; } //使用注解 :注解的注解 使用自定义注解 解析注解
为了解决这两个问题,Spring引入了注解,通过@XXX的方式,让注解与Java Bean 紧密结合,既大大减少了配置文件的体积,又增加了Java Bean 的可读性与内聚性。 本篇文章,讲讲最重要的三个Spring注解,也就是@Autowired、@Resource和@Service。 不使用注解 先看一个不使用注解的 Spring 示例,在这个示例的基础上,再改成注解版本,这样也能看出使用与不使用注解之间的区别,先定义一个老虎类: public class Tiger { private ,Spring会自动扫描com.nnngu路径下的注解。 的注解,这个可以看一下导入注解的时候这两个注解的包名就一清二楚了 Spring属于第三方的,J2EE是Java自己的东西,因此,建议使用@Resource注解,以减少代码和Spring之间的耦合。
尽管JPA本身并不直接支持数组类型的存储,但通过一些注解和配置,我们可以实现这一功能。 1.1 基本数据类型数组的存储 假设我们有一个包含基本数据类型数组的实体类: @Entity public class User { @Id @GeneratedValue(strategy 1.2 嵌套对象数组的存储 如果我们需要存储嵌套对象数组,可以使用@OneToMany或@ManyToMany等关系注解。 例如: @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private 3.1 使用JPA和XML 我们可以使用JPA并结合JAXB进行XML序列化和反序列化: @Entity public class User { @Id @GeneratedValue(
java中的常见注解 jdk自带注解:@Override 覆盖 @Deprecated 过期 @Suppvisewarnings 压制警告 package com.tsh.ano; public //下面会有一个删除线 person.sing(); } } interface Person{ public String getName(); //这个注解表示 过期 @Deprecated public void sing(); } class Student implements Person{ //这个注解表示 覆盖 @Override
然而不论是时代的潮流还是臃肿繁杂的配置代码告诉我们,注解配置才是更人性化的设计,于是学习了基本的映射实体类的基本注解,此处做一点总结,后续文章将陆续更新使用注解的方式管理配置各种映射关联关系。 本篇主要涉及以下内容: 使用最基本的注解映射一个实体类 使用注解映射属性 使用注解映射主键 其他特殊类型的属性映射 一、使用最基本的注解映射一个实体类 @Entity @Table(name = "userInfo ") public class UserInfo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private @GeneratedValue(strategy = GenerationType.IDENTITY):该注解指定了主键的生成策略,一般不单独出现,这里指定了主键自增的策略。 ? 例如: @Entity @Table(name = "userInfo") public class UserInfo { @Id @GeneratedValue(strategy =