SpringBoot2.x使用Data-JPA系列一

SpringBoot官方推荐数据库访问使用JPA,一般使用hibernate实现的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

posted on 2020-09-25 16:36  没刮胡子  阅读(258)  评论(0)    收藏  举报

导航