jap常用注解

1.@Entity
位于类名前;
指出该Java类为实体类,并且将映射到指定的数据库表;
 比如:Emp类前名加上该注解后,就可以和配置的数据库中的emp表相互映射了;
 
2.@Table
位于类名前
当实体类名和映射的表名不一致时,需要加上该注解;
name属性    ->用于指定数据库的表名;
catalog 和 schema 属性    ->用于设置表所属的数据库目录或模式,通常为数据库名;
uniqueConstraints    ->用于设置约束条件,通常不设置;
该注解最主要的用法是,用name属性来指定表名;
 
3.@Id
位于属性声明前;或get方法前;
用于声明该属性映射的是表中的主键;
 
4.@GeneratedValue
位于主键属性前;
用于标注属性的生成策略;通过strategy属性来指定;
默认自动选择一个最适合的生成策略;mysql是auto increment;sqlserver是identity;
在javax.persistence.GenerationType中定义了几种主键生成策略:
    IDENTITY    ->数据库id自增长的方式来增加主键字段;oracle不支持;
    AUTO    ->自动选择,默认;
    SEQUENCE    ->通过序列产生主键,通过@SequenceGenerator注解指定序列名,mysql不支持;
    TABLE    ->通过表产生主键;框架借由表模拟序列产生主键,使用该策略可以使应用更容易数据库移植;
 
5.@Basic    
用于属性到表字段的映射;
如果get方法前没加注解默认是该注解;
fetch属性    ->表示该属性的读取策略;EAGER表示主支抓取;LAZY表示延迟加载;
optional    ->表示该属性是否允许为空;默认true;
 
6.@Column
位于属性前;或get方法前;
通常用于属性名与映射的表列名不同时;
name属性可以指定表名;
还有unique、nullable、length等属性指定表列的属性;
columnDefinition属性表示该属性在表字段中的实际类型;例如String对应varchar;
 
7.@Transient
如果属性不指定注解,会默认为@Basic;
但是,有些属性不需要映射到数据库表中;
该注解的作用就是忽略不需要映射的属性;
 
8.@Temporal
用来指定时间格式;
默认实体类中的Date类型的属性映射到表中是 datetime;
该注解可以指定Date的映射类型;比如数据库表中,生日的日期不需要精确到时分秒用date就够了;
有三种日期格式可选:DATE、TIME、TIMESTAMP;
 
9.用table来指定主键生成策略
主要思路:
    将当前主键的值单独保存到一个数据库表中;
    主键的值通过查表得到;
优点:
    这种主键生成策略可适用到任何数据库,避免了数据库不兼容;
 
1)创建一张主键生成器表
    
 
2)在主键生成器表中插入一条数据
 
3)在主键前加上注解
@GeneratedValue 设置主键生成策略为TABLE;
 
@TableGenerator 注解设定该实体类的主键与数据库主键生成器表之间的关系;
    name属性    ->表示主键生成策略的名称;与@GeneratedValue中的generator属性相对应;
    table    ->表示数据库中主键生成器表的表名;
    allocationSize    ->每次主键增加的大小,默认50;
    pkColumnName    ->数据库中主键生成器表主键名的列名;
    pkColumnValue    ->主键使用的生成器的名字;
    valueColumnName    ->主键生成器表主键值的列名;
 
 
具体操作:
    在实体类的主键id前面,将@GeneratedValue的生成策略改为TABLE,并用generator属性指定一个生成器名;
    添加@TableGenerator注解,name属性对应前面的generator;按照数据库中生成器表来指定各种属性;
     @Column(name="id")
     @TableGenerator(
                name="emp_generator",
                allocationSize=10,
                pkColumnName="pk_name",
                pkColumnValue="emp_pk",
                valueColumnName="pk_value"
                )
     @GeneratedValue(strategy=GenerationType.TABLE,generator="emp_generator")
     @Id
     private Integer id;
 
4)执行main方法,插入三条数据来测试
如果主键生成策略修改成功,则每次主键自增10;
结果如图:
 
 
 

猜你喜欢

转载自www.cnblogs.com/ShiningArmor/p/10546747.html