# spring-data-demo **Repository Path**: larryzeal/spring-data-demo ## Basic Information - **Project Name**: spring-data-demo - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-07-27 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring Data ```java interface Repository{} interface CrudRepository extends Repository{} interface PagingAndSortingRepository extends CrudRepository{} interface JpaRepository extends PagingAndSortingRepository{} // interface JpaSpecificationExecutor{} ``` 子接口`CrudRepository` ## 注意 CrudRepository#save(entity) 可以查看其执行的sql语句,第一步是查询,然后才决定是否执行保存。 而CrudRepository中压根没有update操作,需要用户自己添加,因为需要事务!! ## 执行测试 需要修改application.properties中的spring.profiles.active 使用不同的profile来测试不同的接口(Repository, CrudRepository, ..) ## JPA为字段设置默认值 在使用JPA时,如果需要为属性设置默认值,很自然的,你可能会想到用下面的方式。 ```java @Column(name="state",columnDefinition="tinyint default 0") private Integer state; ``` 但很不幸的是,这种方案有时候并不可行,原因在于**columnDefinition**是在**创建表的时候使用**的。 如果你的表不是自动生成的,又需要为属性添加默认值,该怎么办呢? 其实很简单,就直接为属性赋值就可以了。 ```java private Integer state=0; ``` ## JPA指定日期、时间类型 ```java @javax.persistence.Temporal(javax.persistence.TemporalType.DATE) private java.util.Date date; @javax.persistence.Temporal(javax.persistence.TemporalType.TIME) private java.util.Date time; @javax.persistence.Temporal(javax.persistence.TemporalType.TIMESTAMP) private java.util.Date timestamp; @Column(columnDefinition = "timestamp") private Date timestamp; //要这么使用,在插入的时候才会有默认值 ``` ## JPA使用enum作为字段 ```java @java.persistence.Enumerated( java.persistence.EnumType.STRING ) //默认使用enum的数字,这里强行指定为字符串 @Column( length = 5 ) private Gender gender; ```