Hibernate注解
@JoinColumn 注解的作用:用来指定与所操作实体或实体集合相关联的数据库表中的列字段。 joinColumns是主操作表的中间表列,而inverseJoinColumns是副操作表的中间表列 @JsonProperty :此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty("name")。对属性名称重命名 @Column和@JsonProperty区别: 变量名为userName,希望jackson在把对象转换为json串时变为 user_name。可以使用@JsonProperty注解。 变量名为 createTime, 希望JPA自动对应到数据库的 create_time 字段,可以使用 @Column 注解。 @JsonIgnore:返回的json数据即不包含该属性,此注解用于属性或者方法上(最好是属性上),用来完全忽略被注解的字段和方法对应的属性,即便这个字段或方法可以被自动检测到或者还有其他的注解,一般标记在属性或者方法上,返回的json数据即不包含该属性 @JsonIgnoreProperties此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。 @JsonFormat此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式。 例子:@JsonFormat(pattern="yyyy-MM-dd hh:mm:ss") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date updateTime; @JsonSerialize此注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点。 @JsonDeserialize此注解用于属性或者setter方法上,用于在反序列化时可以嵌入我们自定义的代码,类似于上面的@JsonSerialize。 @JsonInclude 属性值为null的不参与序列化。例子:@JsonInclude(Include.NON_NULL)
@GeneratorValue注解----JPA通用策略生成器 @GeneratedValue注解存在的意义主要就是为一个实体生成一个唯一标识的主键(JPA要求每一个实体Entity,必须有且只有一个主键),@GeneratedValue提供了主键的生成策略 @GenericGenerator注解----自定义主键生成策略 @Lob注解表示属性将被持久化为Blob或者Clob类型, 具体取决于属性的类型,java.sql.Clob, Character[],char[] 和 java.lang.String这些类型的属性都被持久化为Clob类型, 而java.sql.Blob,Byte[], byte[] 和 serializable类型则被持久化为Blob类型. 使用@Transient这个注解可以让其不成为数据库的字段
JPA表与表的关系 fetch:加载方式 FetchType.LAZE 懒加载 FetchType.EAGER 同步加载(非懒加载模式) cascade:表与表之间的级联关系(属性很多,可以百度) 在常见的 ALL:所有的关系 PERSIST:级联持久化操作 merge:级联合并操作 REMOVE:级联删除操作 REFRESH:级联刷新操作 DETACH:级联分离操作
@RequestParam注解
顾名思义:获取参数,即是获取传送过来的参数;例如获取下面链接的id
参数值:
//链接(注意链接格式区别)
http://localhost:8090/hello?id=2
//使用@RequestParam注解获取id
public String Demo1(@RequestParam String id){
System.out.println("链接中请求参数的id:"+id);
return null;
}
此时@RequestParam
的作用就可以获取id下来并且作为形参传给方法体里面的id
@PathVariable注解
顾名思义:路径变量,即是获取链接路径上的变量,例如获取下面链接的id
:
//链接(注意比较上面一条链接)
http://localhost:8090/hello/2
//使用@PathVariable注解获取id
@RequestMapping(value = "/getBook/{id}", method = RequestMethod.GET)
public String getBook(@PathVariable Integer id) {
try {
system.out.println("路径上的id:"+id);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
此时@PathVariable
的作用是将路径上的id获取进来传递给方法体里面的形参id,但是变量名称必须一样,比如这里:value = "/getBook/{id}"
和@PathVariable Integer id;
两个都要是id,如果不同则报错;
@RequestBody注解
首先说下,@RequestBody
注解一般主要是用来处理content-type:"application/json charset=utf-8"
或者content-type:"application/xml charset=utf-8"
两种请求数据,一般是异步请求用的比较多些,例如:
//异步请求部分代码
$.ajax({
url:"/hello",
type:"POST",
data:'{"id":"123","name":"chenyc"}',
content-type:"application/json charset=utf-8",
success:function(data){
alert(data);
}
});
//@requestBody注解获取数据代码
@requestMapping("/hello")
public String hello(@requestBody Integer id,@requestBody String name){
System.out.println("id:"+id+";"+"name:"+name);
}
此时@requestBody
注解就可以获取到请求中的各个参数然后赋值到相对应的方法形参上,另外,当有一个实体类User
包含了id
和name
的元素的话,在方法里面直接可以写@requestBody User user
就会自动封装好给我们使用的了,不用麻烦像这样@requestBody Integer id,@requestBody String
name一个一个的封装