Spring Boot 属性文件配置

Spring Boot 允许我们通过*.properties文件、*.yml文件、环境变量、命令行参数等来外部化应用程序的配置,以便我们在不同的环境可以使用同一套程序代码。

阅读更多

Thymeleaf 教程

Thymeleaf 是一个服务器端 Java 模板引擎,能够处理 HTML、XML、CSS、JAVASCRIPT 等模板文件。Thymeleaf 模板可以直接当作静态原型来使用,它主要目标是为开发者的开发工作流程带来优雅的自然模板,也是 Java 服务器端 HTML5 开发的理想选择。

阅读更多

Spring Boot 添加 Thymeleaf 支持

Spring Boot 对 Thymeleaf 模板引擎提供了自配置的良好支持。Spring Boot 1.5.2.RELEASE 版本默认使用的是 Thymeleaf 2.0+,本文使用 Thymeleaf 3.0+ 版本,在 pom.xml 中添加以下声明:

1
2
3
4
<properties>
<thymeleaf.version>3.0.5.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.2.1</thymeleaf-layout-dialect.version>
</properties>

然后添加 Thymeleaf 依赖声明:

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

阅读更多

解决 IntelliJ IDEA 无法热加载 Spring Boot 模板文件和静态资源文件

1. IntelliJ IDEA 配置

快捷键Ctrl + Alt + S打开设置面板,勾选Build project automatically选项:

idea-settings

阅读更多

Spring Boot 添加 JSP 支持

Spring MVC 支持多种模板技术,如 JSP、FreeMarker、Thymeleaf 等。Spring Boot 官方并不推荐使用 JSP 模板引擎,如果有可能,应尽量避免使用 JSP,因为当使用嵌入式 Servlet 容器时,对使用 JSP 模板引擎有几个已知的限制,以下是 Spring Boot 支持自动配置的模板引擎(其中并不包含 JSP):

  • FreeMarker
  • Groovy
  • Thymeleaf
  • Mustache

阅读更多

Spring Boot 快速入门 - 1 分钟搭建 Web 应用

Spring Boot 不是一个新的框架,它是提供一种使我们更易于创建基于 Spring 的最小或零配置的独立应用和服务的方式。

Spring 对于 Java 开发者来说一定都并不陌生,它作为目前非常流行的一个 Java 应用开发的基础框架,应用非常广泛。然而,由于其配置繁杂,各样格式的XML配置文件,着实让人头疼。

Spring Boot 的出现,可以让我们只需要非常简单的几步就可以搭建起一个基于 Sprign 框架的 Web 应用程序。Spring Boot的主要目标:

  • 为所有的Spring开发提供一个更快,更广泛的入门体验。
  • 开箱即用,以最小或零配置的方式,使我们更专注于解决应用程序的功能需求。
  • 提供一些非功能性的常见的大型项目类特性(如内嵌服务器、安全、度量、健康检查、外部化配置)。
  • 绝对没有代码生成,也不需要XML配置,可以完全避免XML配置
  • 为了避免定义更多的注释配置(它将一些现有的 Spring 框架注释组合成一个简单的单个注释)
  • 提供一些默认值,以便在任何时间内快速启动新项目。

阅读更多

JPA 多对多注解

@ManyToMany 是属性或方法级别的注解,用于定义源实体目标实体是多对多的关系。

参数 类型 描述
targetEntity Class 源实体关联的目标实体类型,默认是该成员属性对应的集合类型的泛型的参数化类型。
mappedBy String 用在双向关联中。如果关系是双向的,则需定义此参数(与 @JoinColumn 互斥,如果标注了 @JoinColumn 注解,不需要再定义此参数)。
cascade CascadeType[] 定义源实体和关联的目标实体间的级联关系。当对源实体进行操作时,是否对关联的目标实体也做相同的操作。默认没有级联操作。该参数的可选值有:
CascadeType.PERSIST(级联新建)
CascadeType.REMOVE(级联删除)
CascadeType.REFRESH(级联刷新)
CascadeType.MERGE(级联更新)
CascadeType.ALL(包含以上四项)
fetch FetchType 定义关联的目标实体的数据的加载方式。
可选值:
FetchType.LAZY(延迟加载,默认)
FetchType.EAGER(立即加载)
延迟加载:只有在第一次访问源实体关联的目标实体的时候才去加载。
立即加载:在加载源实体数据的时候同时去加载好关联的目标实体的数据。

阅读更多

JPA 一对多、多对一注解

1. @OneToMany

@OneToMany 是属性或方法级别的注解,用于定义源实体目标实体是一对多的关系。

参数 类型 描述
targetEntity Class 源实体关联的目标实体类型,默认是该成员属性对应的集合类型的泛型的参数化类型。
mappedBy String 用在双向关联中。如果关系是双向的,则需定义此参数(与 @JoinColumn 互斥,如果标注了 @JoinColumn 注解,不需要再定义此参数)。
cascade CascadeType[] 定义源实体和关联的目标实体间的级联关系。当对源实体进行操作时,是否对关联的目标实体也做相同的操作。默认没有级联操作。该参数的可选值有:
CascadeType.PERSIST(级联新建)
CascadeType.REMOVE(级联删除)
CascadeType.REFRESH(级联刷新)
CascadeType.MERGE(级联更新)
CascadeType.ALL(包含以上四项)
fetch FetchType 定义关联的目标实体的数据的加载方式。
可选值:
FetchType.LAZY(延迟加载,默认)
FetchType.EAGER(立即加载)
延迟加载:只有在第一次访问源实体关联的目标实体的时候才去加载。
立即加载:在加载源实体数据的时候同时去加载好关联的目标实体的数据。
orphanRemoval boolean 源实体关联的目标实体被断开(如给该属性赋予另外一个实例,或该属性的值被设为 null。被断开的实例称为孤值,因为已经找不到任何一个实例与之发生关联)时,是否自动删除断开的实例(在数据库中表现为删除表示该实例的行记录),默认为 false。
可参考:orphanRemoval 与 CascadeType.REMOVE 的区别

阅读更多

JPA 一对一注解

@OneToOne 是属性或方法级别的注解,用于定义源实体目标实体是一对一的关系。

参数 类型 描述
targetEntity Class 源实体关联的目标实体类型,默认是该成员属性对应的类型,因此该参数通常可以缺省。
mappedBy String 用在双向关联中。如果关系是双向的,只能有一方作为主体端,另一方则需声明此参数以表明将表间的这种关联关系转交给对方来维护。
cascade CascadeType[] 定义源实体和关联的目标实体间的级联关系。当对源实体进行操作时,是否对关联的目标实体也做相同的操作。默认没有级联操作。该参数的可选值有:
CascadeType.PERSIST(级联新建)
CascadeType.REMOVE(级联删除)
CascadeType.REFRESH(级联刷新)
CascadeType.MERGE(级联更新)
CascadeType.ALL(包含以上四项)
fetch FetchType 定义关联的目标实体的数据的加载方式。
可选值:
FetchType.LAZY(延迟加载)
FetchType.EAGER(立即加载,默认)
延迟加载:只有在第一次访问源实体关联的目标实体的时候才去加载。
立即加载:在加载源实体数据的时候同时去加载好关联的目标实体的数据。
optional boolean 源实体关联的目标实体是否允许为 null,默认为 true。
orphanRemoval boolean 源实体关联的目标实体被断开(如给该属性赋予另外一个实例,或该属性的值被设为 null。被断开的实例称为孤值,因为已经找不到任何一个实例与之发生关联)时,是否自动删除断开的实例(在数据库中表现为删除表示该实例的行记录),默认为 false。

阅读更多

JPA @Column 注解

@Column 是属性或方法级别的注解,用于指定持久化属性映射到数据库表的列。如果没有指定列注释,则使用其默认值。

参数 类型 描述
name String 列的名称,默认为属性的名称(Hibernate 映射列时,若遇到驼峰拼写,会自动添加 _ 连接并将大写字母改成小写)。
unique boolean 列的值是否是唯一的。这是 @UniqueConstraint 注解的一个快捷方式, 实质上是在声明唯一约束。默认值为 false。
nullable boolean 列的值是否允许为 null。默认为 true。
insertable boolean 列是否包含在 INSERT 语句中,默认为 true。
updatable boolean 列是否包含在 UPDATE 语句中,默认为 true。
columnDefinition String 生成列的 DDL 时使用的 SQL 片段。默认使用推断的类型来生成 SQL 片段以创建此列。
table String 当前列所属的表的名称。
length int 列的长度,仅对字符串类型的列生效。默认为255。
precision int 列的精度,仅对十进制数值有效,表示有效数值的总位数。默认为0。
scale int 列的精度,仅对十进制数值有效,表示小数位的总位数。默认为0。

阅读更多

JPA @Temporal 注解

@Temporal 是属性或方法级别的注解,用于声明属性持久化到数据库时所使用的时间精度。该注解可以应用于任何以下类型的实体类属性:

  • java.util.Date
  • java.util.Calendar
参数 类型 描述
value TemporalType 存储的类型,可选值:
TemporalType.DATE(日期)
TemporalType.TIME(时间)
TemporalType.TIMESTAMP(日期和时间)

阅读更多

JPA @Transient 注解

@Transient 是属性或方法级别的注解,该注解没有参数,用于标注属性是瞬态而非持久的。

阅读更多

JPA @GeneratedValue 注解

@GeneratedValue 是属性或方法级别的注解,它结合 @Id 注解为主键的值提供生成策略的规范。

参数 类型 描述
strategy GenerationType 主键生成策略。可选值:
GenerationType.TABLE
GenerationType.SEQUENCE
GenerationType.IDENTITY
GenerationType.AUTO
默认是 GenerationType.AUTO。
generator String 主键生成器的名称。该名称为 @TableGenerator@SequenceGenerator 注解中 name 参数的值。默认为持久化提供者(如 Hibernate)提供的id生成器。

阅读更多

JPA @Id 注解

@Id 是属性或方法级别的注解,该注解没有参数,用于标注实体的主键(映射到数据库表的主键)。

阅读更多

JPA @Basic 注解

@Basic 是属性或方法级别的注解,该注解可以应用于任何以下类型的实体类属性:

  • Java 原始类型
  • 原始类型的包装类型
  • String
  • java.math.BigInteger
  • java.math.BigDecimal
  • java.util.Date
  • java.util.Calendar
  • java.sql.Date
  • java.sql.Time
  • java.sql.Timestamp
  • byte[]
  • Byte[]
  • char[]
  • Character[]
  • 枚举
  • 任意实现 java.io.Serializable 接口的类型

在实体类中,对以上这些类型的属性,如果没有标注 @Basic 注解,则将使用 @Basic 注解的默认值。

参数 类型 描述
fetch FetchType 属性值的加载策略。可选值:
FetchType.EAGER:即时加载;
FetchType.LAZY:延迟加载,当第一次访问属性时才进行数据的加载;
默认为 FetchType.EAGER。
optional boolean 是否允许为 null,默认为 true。

阅读更多