SpringBoot2.x使用Data-JPA系列一
pom配置
1 <!-- jpa --> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter-data-jpa</artifactId> 5 </dependency>
application.properties
#jpa
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql= true
简单配置这些就够了,其他的是属于数据源的配置,这里也记录下来,方便使用吧
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot-demo?useUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=xxxxx spring.datasource.driver-class-name=com.mysql.jdbc.Driver
书写Entity
Entity是Jpa实现的一个比较重要的部分,详细说明如下
Entity基本格式
借用hibernate实现,所以注释基本上与hibernate相同。@Entity标签表面是个Jpa识别的Entity,@Table 表明对应的表 字段,如果与数据库字段一致,则不用增加任何标记。如果不一致,增加@Column标签
这里注意:jpa默认的是@Column标签的名字与字段名字一样,然后解析这个名字的时候,按照驼峰命名法去解析,既userName 会给解析成 user_name,如果在数据库中的字段就是userName,则@Column(name = "username"),
这里可以考虑策略,还可以在属性文件中这样定义,
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
@Entity @Table(name = "sys_user") public class SysUser implements Serializable { private static final long serialVersionUID = -3962204755050776389L; @Id private Integer id; private String password; private String phone; private String email; @Column(name = "enterprise_style") private String enterpriseStyle; //省略 get set }
常用的一些标签
@JsonIgnore
@JsonIgnore 的作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。当表间有One2Many或Many2One时,会发生无限循环的场景,如何破?只要在Set方法前增加以下注解即可
@JsonIgnore public Set xxxs() { return this.xxxYyyy; }
@Transient
@Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性; 如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架默认其注解为@Basic;
表示该字段在数据库表中没有,但是一定要标记在getXXX方法上。特别是bean可以修改数据库表的时候。
@Transient public int getAge() { return 1+1; }
@JsonIgnoreProperties
@JsonIgnoreProperties 此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
@JsonIgnore
此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样。
@JsonFormat
此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式,比如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")
@JsonSerialize
此注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点。
@JsonDeserialize
此注解用于属性或者setter方法上,用于在反序列化时可以嵌入我们自定义的代码,类似于上面的@JsonSerialize
浙公网安备 33010602011771号