[关闭]
@Purpose 2017-07-14T03:27:37.000000Z 字数 1945 阅读 1017

SpringBoot小知识杂记

SpringBoot



数据库操作:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/demodb
username: root
password: root

jpa:
hibernate:
ddl-auto: create
show-sql: true
建表方式:
create:启动时删除重建
update:必要时更新schema
create-drop:启动时建表,退出时删表
validate:schema变化时报错

引入service层
在service层的方法上加入transaction注解

@Id 表示该属性为主键。
@GeneratedValue 注解默认使用主键生成方式为自增
@ManyToOne
@OneToMany
@JoinColumn
@OneToMany
@Temporal
@Column
@Lob
@ManyToMany
@JsonFormat
@JoinTable


JPA

@Entity

表明该类为实体类

@Table

当实体类与其映射的数据表名不同名的时候,需要使用@Tablr标注说明,该标注和@Entity并列使用


@Id

表示该属性为主键。

@GeneratedValue

标注主键的生成策略,默认情况下它会自动选择一个合适底层数据库的主键生成策略
SqlServer 对应identity
MySQL对应autoincrement


@Basic

简单的属性到数据库表的字段的映射,对于没有标注的get方法,默认为@Basic


@Column

该属性通常置于尸体的属性声明语句之前,可和@Id标注一起使用。当实体类的属性和其映射的数据库表的列不同名的时候需要使用

常用属性为name,用于设置映射数据库表的列名。
还有其他属性: unique, nullable, length等等

columnDefinition属性:表示该字段在数据库中的实际类型


@Transient
表示该属性并非一个到数据库的字段的映射
如果一个属性并非数据库表的字哦端映射,就务必将其标识为@Transient


@Temporal
JavaAPI中没有指定Date类型的精度,而在数据库中,有DATE(日期),TIME(时间) 和TIMESTAMP(两者皆有之)三种精度。此时可以通过@Temporal注解中的TemporalType来调整精度


JPA中与hibernate不同的地方

JPA中的Persistence与hibernate中的save方法比较类似,让对象从临时状态变成持久化状态
不同之处是,如果对象中被设置了Id的值的话,JPA是不能执行insert操作,而是会抛出异常

JPA中的remove方法和hibernate中的delete方法类似,把对象对应的记录从数据库中移除
然而JPA中的该方法只能移除持久化的对象,而hibernate的delete方法还可以移除游离对象

三大状态的基本概念
1, 临时状态(Transient):也叫自由态,只存在于内存中,而在数据库中没有相应数据。用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象;
2, 持久化状态(Persistent):与session关联并且在数据库中有相应数据。已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象;
3, 游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。
特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象;

临时状态 持久化状态 游离状态
是否在session缓存中 X O X
数据库中是否有对应记录 X O O
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注