今天上午在家看了一上午书,反正现在也无事可做,就把今天书上自己感觉有用的内容写下来,一方面是分享给大家,另一方面也当做个笔记。
@Param用法
默认情况下,参数是通过顺序绑定在查询语句上的。这使得查询方法对参数位置的重构容易出错。为了解决这个问题,可以使用**@Param**注解指定方法参数的具体名称,可以通过绑定的参数名字做查询条件。
@Query(“select u from User u where u.firstname=:firstname or u.lastname=:lastname”)
User findByLastnameOrFirstname(@Param(“lastname”) String lastname,@Param(“firstname”) String firstname);
@Modifying修改查询
源码:
public @interface Modifying{
/如果配置了一级缓存,这个时候用clearAutomatically=true,就会刷新hibernate的一级缓存,不然你在同一接口中更新一个对象,接着查询这个对象,查出来的对象就是没有更新之前的状态。/
boolean clearAutomatically() default false;
}
@Entity
@Entity定义对象将会成为被JPA管理的实体,将映射到指定的数据库表。
源码:
public @interface Entity{
//可选,默认是此实体类的名字,全局唯一
String name() default “”;
}
@Table
@Table指定数据库的表名。
源码:
public @interface Table{
//表的名字,可选。如果不填写,系统认为好实体的名字一样为表名
String name() default “”;
//此表的catalog(),可选
String catalog() default “”;
//此表所在的schema,可选
String schema() default “”;
//唯一性约束,只有创建表的时候有用,默认不需要
UniqueConstraint [] uniqueConstraits() default {};
//索引,只有创建表的时候使用,默认不需要
Index[] indexes() default {};
}
@Id
@Id定义属性为数据库的主键,一个实体里面必须有一个。
@GeneratedValue
@GeneratedValue为主键生成策略
源码:
public @interface GeneratedValue {
//Id的生成策略
GenerationType strategy() default AUTO;
//通过Sequences生成Id,常见的是Orcale数据库ID生成规则,需要配合@SequenceGenerator使用
String generator() default “”;
}
GenerationType一共有一下4个值:
public enum GenerationType {
//通过表产生主键,框架由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植
TABLE,
//通过序列产生主键,通过@SequenceGenerator注解指定序列名,MySQL不支持这种方式
SEQUENCE,
//采用数据库ID自增长,一般用于MySQL数据库
IDENTITY,
//JPA 自动选择合适的策略,是默认选项
AUTO
}