SpringBoot过程问题

SpringBoot过程问题

spring注解相关

@RestController

@RestControllerspring 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
2
3
4
5
6
7
@RequestMapping("/people")
class PersonController {

@RequestMapping("/{id}")
public HttpEntity getPerson(@PathVariable String id) { ... }

}
1
2
3
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>

<a href="${s:mvcUrl('PC#getPerson').arg(0,"123").build()}">Get Person</a>

value:用来表示主要映射,是常用的

1
2
3
4
5
@RequestMapping(value = "/user",method = RequestMethod.GET,produces = "application/json")
public @ResponseBody
List<User> findUsers() {
return userService.findUsers();
}

path: 指定访问的uri地址

1
2
3
4
5
@RequestMapping(path = "/user",method = RequestMethod.POST,name = "this is user`s post methods")
public String insertUser(){
userService.saveUser();
return null;
}

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
2
@Column(name="description", nullable=false, length=512)
public String getDescription() { return description; }

@Transient

@Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.
如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic.

@ManyToOne

表示一个多对一的映射,该注解标注的属性通常是数据库表的外键

1
2
3
4
5
6
7
//订单Order和用户User是一个ManyToOne的关系
//在Order类中定义
@ManyToOne()
@JoinColumn(name=”USER”)
public User getUser() {
return user;
}

@JoinColumn

​ 指定用于连接实体关联或元素集合的列。如果JoinColumn注解本身是默认的,则假定使用单个连接列并应用默认值。其默认的名称为实体User的名称+下划线+实体User的主键名称。也就是USER_ID.

@OneToMany

@OneToMany描述一个一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段.例如:实体User和Order是OneToMany的关系,则实体User被删除时,其关联的实体Order也应该被全部删除

1
2
3
4
@OneTyMany(cascade=ALL)
public List getOrders() {
return orders;
}

@OneToOne

描述一对一的关系

如User表和person表,一个是基本信息一个是详细信息

1
2
3
4
@OneToOne(fetch=FetchType.LAZY) // Fetch是抓取策略,如果不写,自动的策略是LAZY
public Person getPerson() {
return person;
}

@ManyToMany

@ManyToMany 描述一个多对多的关联.多对多关联上是两个一对多关联,但是在ManyToMany描述中,中间表是由ORM框架自动处理

@Embedded

@Embedded将几个字段组合成一个类,并作为整个Entity的一个属性.

1
2
3
4
5
6
7
8
9
@Embeddable
public class Address {city,street,zip}
@Entity
public class User {
@Embedded
public Address getAddress() {

}
}
注解 说明
@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表示提示信息
@Email 邮箱验证
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内

spring boot 配置问题

spring2.0后静态资源访问不到的问题

需要手动写配置类进行静态资源配置

1
2
3
4
5
6
7
8
9
10
11
12
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/**
* 添加静态资源文件,外部可以直接访问地址
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/templates/");
}
}

配置SpringBoot Jpa默认mysql生成表引擎为InnoDB

在配置文件appliction.properties中加入

1
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
-------------本文结束感谢您的阅读-------------

本文标题:SpringBoot过程问题

文章作者:NanYin

发布时间:2019年01月04日 - 12:01

最后更新:2019年08月12日 - 13:08

原始链接:https://nanyiniu.github.io/2019/01/04/2019-01-25-%E8%BF%87%E7%A8%8B%E9%97%AE%E9%A2%98/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。