SpringBoot过程问题
spring注解相关
@RestController
@RestController
是spring 4.0
来引入的简化的RESTful WEB
应用的创建,是一个结合@Constroller
和@ResponseBody
的注解,不用每个类都使用ResponseBody
注解来达到处理请求的目的。
控制器使用@RestController
注释进行注释,因此不需要@ResponseBody
。
@RequestMapping
@RequestMapping
的注解中的参数:
name : 在4.0后引入的,开始我错把name当value用,结果出现 [java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'appController' bean method]
类似这种错误。其实name就是一个名字而已,没有什么特殊含义,但是官方文档中指出 在类型级别和方法级别支持!在两个级别上使用时,组合名称通过串联以“#”作为分隔符派生
。使用上,官方说明是主要可以通过使用Spring jsp tag包里面的mvcUrl,来生成jsp到controller的链接。
1 | @RequestMapping("/people") |
1 | <%@ taglib uri="http://www.springframework.org/tags" prefix="s" %> |
value:用来表示主要映射,是常用的
1 | @RequestMapping(value = "/user",method = RequestMethod.GET,produces = "application/json") |
path: 指定访问的uri地址
1 | @RequestMapping(path = "/user",method = RequestMethod.POST,name = "this is user`s post methods") |
method:映射的HTTP的访问方法,有GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
params: 指定request中必须包含某些参数值时,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
Jpa
常用注解
@Entity
标注在类外侧,标注着这个类是一个实体类。
@Table
标注在类外侧,标注实体的主表,其中有 catalog
,indexes
, name
, schema
,分别注明为:指定database的目录,索引,名称,和表的结构描述
注意:schema定义了表、每个表的字段,还有表和字段之间的关系。
@Id
表示是实体类的主键
@GeneratedValue
提供主键的值得生成策略规范。GeneratedValue注释可以与Id注释一起应用于实体或映射超类的主键属性或字段,派生主键不支持该注解。提供两个可选值:1. generator :要在SequenceGenerator或TableGenerator注解中指定的主键生成器的名称。2. strategy 生成策略,有四个可选值AUTO,INDENTITY,SEQUENCE 和 TABLE ,默认为AUTO
@Column
指定持久属性或字段的映射列。如果未指定Column注释,则应用默认值。
updatable:是否包含在框架自动生成的update语句中。
其他可以通过例子一看便知:
1 | @Column(name="description", nullable=false, length=512) |
@Transient
@Transient
表示该属性并非一个到数据库表的字段的映射,ORM
框架将忽略该属性.
如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient
,否则,ORM
框架默认其注解为@Basic
.
@ManyToOne
表示一个多对一的映射,该注解标注的属性通常是数据库表的外键
1 | //订单Order和用户User是一个ManyToOne的关系 |
@JoinColumn
指定用于连接实体关联或元素集合的列。如果JoinColumn注解本身是默认的,则假定使用单个连接列并应用默认值。其默认的名称为实体User的名称+下划线+实体User的主键名称。也就是USER_ID.
@OneToMany
@OneToMany描述一个一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段.例如:实体User和Order是OneToMany的关系,则实体User被删除时,其关联的实体Order也应该被全部删除
1 | @OneTyMany(cascade=ALL) |
@OneToOne
描述一对一的关系
如User表和person表,一个是基本信息一个是详细信息
1 | @OneToOne(fetch=FetchType.LAZY) // Fetch是抓取策略,如果不写,自动的策略是LAZY |
@ManyToMany
@ManyToMany 描述一个多对多的关联.多对多关联上是两个一对多关联,但是在ManyToMany描述中,中间表是由ORM框架自动处理
@Embedded
@Embedded将几个字段组合成一个类,并作为整个Entity的一个属性.
1 | @Embeddable |
注解 | 说明 |
---|---|
@Null | 被注释的元素必须为 null |
@NotNull | 被注释的元素必须不为 null |
@AssertTrue | 被注释的元素必须为 true |
@Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值,同理@Max(value) |
@DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值,同理@DecimalMax(value) |
@Size(max=, min=) | 被注释的元素的大小必须在指定的范围内 |
@Past | 被注释的元素必须是一个过去的日期,同理@Future |
@Pattern(regex=,flag=) | 符合正则 |
Hibernate Validator 附加的 constraint | |
@NotBlank(message =) | 验证字符串非null,且长度必须大于0,message表示提示信息 |
邮箱验证 | |
@Range(min=,max=,message=) | 被注释的元素必须在合适的范围内 |
spring boot 配置问题
spring2.0后静态资源访问不到的问题
需要手动写配置类进行静态资源配置
1 | @Configuration |
配置SpringBoot Jpa
默认mysql
生成表引擎为InnoDB
在配置文件appliction.properties
中加入
1 | spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect |