SpringBoot学习_创建
Boot中如果需要引入其他依赖坐标
点击这里搜索
一:使用IDEA快速创建
我们可以借助IDEA直接快速创建Boot项目,也可以通过其他方式【Boot官网】
1:创建项目
2:写一个controller测试
@Controller
public class HelloController {@RequestMapping("hello")@ResponseBodypublic String hello(){return "Hello SpringBoot";}
}
3:测试
http://localhost:8080/hello
访问成功,就表示创建SpringBoot没有问题
二:Banner 图标
1:自定义启动图标
在 main 目录下新建 resources 资源目录,并在该目录下新建banner.txt 文本文件,可以设置自定义图标
在线生成图标:http://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something
2:设置关闭banner图
在启动器中设置,将原来启动方式注释掉
@SpringBootApplication
public class SpringBootStudentApplication {public static void main(String[] args) {// SpringApplication.run(SpringBootStudentApplication.class, args);SpringApplication springApplication = new SpringApplication(SpringBootStudentApplication.class);
// 设置 banner 图标关闭springApplication.setBannerMode(Banner.Mode.OFF);springApplication.run();}
}
三:SpringBoot配置文件
在使用IDEA创建完成后,默认在resources目录下有【application.properties】一个文件,可以进行配置
1:配置文件优先级
在SpringBoot中可以在多个目录下编写配置文件,而配置文件的优先级不同
- 项目下/config 创建配置文件 优先级最高
- 项目下 创建配置文件 优先级第二
- resources/config 创建配置文件 优先级第三
- resources下 创建配置文件 优先级最四
2:多环境配置文件
需要创建多个配置文件
名字如:application.properties application-text.properties application-dev.properties
在默认读取的配置文件【application.properties】中设置#多环境配置,选择激活使用的配置文件 spring.profiles.active=dev #spring.profiles.active=text
3:常见的配置
# 设置项目启动端口
server.port=8081
# 设置生成的日志文件路径
logging.file.path=wangyuan_boot
4:YML语法
可以创建一个在resources目录下创建一个 application.yml
4.1:YML文件
# 设置端口号 和项目日志路径,
#YML语法,是这种分层次的 key value
server:port: 8082logging:file:path: wangyuan_boot
4.2:YML优点
推荐使用yml语法 默认是properties语法
区别1: properties key=value
yml [对于空格要求极其严格] key: [中间必须有空格] 空格 value区别2: properties 只能支持key value形式yml 支持key value ,数组,对象,集合等形式
区别3:properties 没有测试是否支持el表达式 yml 支持el表达式 如:${random.int} 随机值,\${random.uuid}随机uuid \${对象.属性:另外的值} 三元表达式判断属性是否存在,不存在就输出另外的值,存在就输出存在的值
区别4: properties 不支持松散绑定yml 支持松散绑定【yml中间加“-”,实体类可以不加,也能绑定】
5:日志配置格式
logging:pattern:level: debugconsole: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger- %msg%n"file:path: "."name: "SpringBoot.log"
四:Freemarker & Thymeleaf 视图集成
1:Freemarker 集成
Freemarker 默认默认视图路径 resources/templates 目录(由自动化配置类FreemarkerProperties 决定),该目录可以进行在 application.yml 中进行修改
1.1:引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
1.2:配置文件配置
# 设置Freemarker格式
spring:freemarker:suffix: .ftl #后缀名是.ftlcontent-type: text/htmlcharset: utf-8 #编码格式template-loader-path: classpath:/views/ #文件路径
1.3:编写controller
@RequestMapping("helloFreemarker")public String helloFreemarker(){return "index";}
1.4:启动访问
http://localhost:8082/helloFreemarker
2:Thymeleaf 视图集成
2.1:引入依赖
<!-- thymeleaf--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
2.2:配置文件设置
spring:thymeleaf:prefix: classpath:/html/ #设置文件路径 html/index.htmlcache: false
2.3:编写controller
@RequestMapping("helloFreemarker")public String helloFreemarker(){return "index";}
3:注意点
thymeleaf和freemarker可以同时设置两个模板
当返回视图名称,两个模板名称一样时,优先:freemarker
如果不一样,就找到对应的模板
五:静态资源
静态资源默认必须:在 resources 目录下创建 static 或者 public 目录,然后存放 images、js、css 等静态资源文件
也可以通过配置,修改静态资源路径,当配置自定义静态资源路径之后,原来的静态资源目录就无法使用了spring: # 修改默认的静态寻址资源目录 多个路径之间用逗号隔开 resources: static-locations: classpath:/public/,classpath:/static/,classpath:/os/
六:SpringBoot打包部署
1:打包命令
idea 下配置 clean compile package -Dmaven.test.skip=true 执行打包命令
默认打包为jar包,如果需要打war包,需要一些设置
2:设置打war包
2.1:修改pom文件
<groupId>com.wangyuan</groupId><artifactId>CRM</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><!-- 引入包,设置打包时候,忽略默认内置的tomcat--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency>
<build><!-- 配置生成的war文件名 --><finalName>springboot</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>
2.2:编写启动类
继承SpringBootServletInitializer 重写SpringApplicationBuilder 方法
@SpringBootApplication
public class SpringBootStudentApplication extends SpringBootServletInitializer {public static void main(String[] args) {// SpringApplication.run(SpringBootStudentApplication.class, args);SpringApplication springApplication = new SpringApplication(SpringBootStudentApplication.class);// 设置 banner 图标关闭springApplication.setBannerMode(Banner.Mode.OFF);springApplication.run();}@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {//return builder.sources(SpringBootStudentApplication.class);}
}
2.3:打包
配置完成,即可运行刚配置的maven打包命令来打包了
3:部署项目
3.1:运行jar包
打开本地 dos 窗口,执行 java -jar命令 部署已打好的 jar 包文件。
命令如下: java -jar jar包所在目录
3.2:运行war包
把打包好的war包拿到外部的tpmcat ,部署到tomcat中,启动tomcat,就发布成功了
七:SpringBoot整合MyBaits
SpringBoot版本设置为2.2.2.RELEASE 【如果版本报红正常启动即可】
1:引入jar包
<!-- 这是boot版本<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version> </parent>
--> <!-- mybatis 集成 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.1</version></dependency><!-- springboot 分页插件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.13</version></dependency><!-- mysql 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- c3p0 数据源 --><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.5</version></dependency>
2:设置mybatis的yml配置
#mybatis配置
mybatis:mapper-locations: classpath:/mappers/*.xmltype-aliases-package: com.wangyuan.pojo#下划线转驼峰
# configuration:
# map-underscore-to-camel-case: true
# pageHelper指定需要分页的数据源类型
pagehelper:helper-dialect: mysql
#显示执行的sql
#logging:
# file:
# path: wangyuan_boot
logging:level:com:wangyuan:mapper: debug
spring:datasource:type: com.mchange.v2.c3p0.ComboPooledDataSource #c3p0数据源username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/spring_ssm_login?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8#type: com.zaxxer.hikari.HikariDataSource #自带的数据源 【这里之前因为boot版本太高,导致c3p0的url报错,使用自带的测试不报错,确认是版本问题】
3:设置项目路径已经连接的表结构
数据库名:spring_ssm_login
4:编写pojo实体类user
User
@Component
@Data //这些是lombok注解,表示省略get set 构造器等方法
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {private Integer userId;private String userName;private String userPwd;private String userEmail;private String userMobile;private Date createDate;private Date updateDate;private Integer userDelete;
}
5:编写mappers配置文件
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.wangyuan.mapper.UserMapeper"><select id="queryUserById" parameterType="int" resultType="com.wangyuan.pojo.User">select * from user where userid=#{userId}</select>
</mapper>
6:编写对应mapper接口
UserMapeper
public interface UserMapeper {User queryUserById(Integer userId);
}
7:编写service
UserService
@Service
public class UserService {@Autowiredprivate UserMapeper userMapeper;public User queryUserById(Integer userId){return userMapeper.queryUserById(userId);}
}
8:编写controller
HelloController
@Controller
@RequestMapping("/User")
public class HelloController {@Autowiredprivate UserService userService;@RequestMapping("/queryUserById/{userId}")@ResponseBodypublic User queryUserById(@PathVariable Integer userId){User user = userService.queryUserById(userId);return user;}
}
9:编写启动类
@SpringBootApplication
@MapperScan("com.wangyuan.mapper") //@Mapper 扫描包
public class SpringBootStudentApplication {public static void main(String[] args) {// SpringApplication.run(SpringBootStudentApplication.class, args);SpringApplication springApplication = new SpringApplication(SpringBootStudentApplication.class);// 设置 banner 图标关闭springApplication.setBannerMode(Banner.Mode.OFF);springApplication.run();}
}
10:启动项目测试
http://localhost:8082/springBootMybatis/User/queryUserById/1
八:分页查询
1:编写分页实体类
@Data
@NoArgsConstructor
@AllArgsConstructor//lombok
public class UserQuery implements Serializable {private Integer pageNum = 1; // 当前页private Integer pageSize = 10; // 每页显示的数量private String userName; // 查询条件:
}
2:编写mapper.xml中sql
UserMapeper.xml
<select id="queryUserPaging" parameterType="com.wangyuan.paging.UserQuery" resultType="com.wangyuan.pojo.User">select * from user</select>
3:编写xml绑定的接口
UserMapeper
// 分页查询用户List<User> queryUserPaging(UserQuery userQuery);
4:编写service方法
UserServiceImp
public PageInfo<User> queryUserPaging(UserQuery userQuery) {PageHelper.startPage(userQuery.getPageNum(), userQuery.getPageSize());return new PageInfo<User>(userMapeper.queryUserPaging(userQuery));}
5:编写controller
/*** 通过指定参数,分页查询用户列表* @param userQuery* @return*/@RequestMapping("/queryUserPaging")@ResponseBodypublic PageInfo<User> queryUserPaging(UserQuery userQuery){return userService.queryUserPaging(userQuery);}
九:API 文档构建工具-Swagger2
1:导入依赖
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version>
</dependency>
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version>
</dependency>
2:添加配置类
@Configuration//表示是配置类
@EnableSwagger2//Swgger2
public class Swagger2 {@Beanpublic Docket createRestApi(){return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.wangyuan.controller")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("用户管理接口API文档").version("1.0").build();}
}
3:使用
@Api:用在请求的类上,说明该类的作用 tags="说明该类的作用"@Api(tags = "关于用户操作API")
----------------------------------------------------------------------------@ApiOperation:"用在请求的方法上,说明方法的作用"value="说明方法的作用"notes="方法的备注说明"@ApiOperation(value = "测方法用于测试SpringBoot项目是否可以访问",tags = "适用于测试,没有任何业务,可以删除")
------------------------------------------------------------------------@ApiImplicitParams:用在请求的方法上,包含一组参数说明@ApiImplicitParam:用在 @ApiImplicitParams 注解中,指定一个请求参数的配置信息name:参数名value:参数的汉字说明、解释required:参数是否必须传paramType:参数放在哪个地方· header --> 请求参数的获取:@RequestHeader· query --> 请求参数的获取:@RequestParam· path(用于restful接口)--> 请求参数的获取:@PathVariable· body(不常用)· form(不常用)dataType:参数类型,默认String,其它值dataType="Integer"defaultValue:参数的默认值@ApiImplicitParams({@ApiImplicitParam(name ="pageNume",value = "传递当前页",paramType = "query",dataType = "int",defaultValue = "1"),@ApiImplicitParam(name ="pageSize",value = "每页显示的数量",paramType = "query",dataType = "int",defaultValue = "10"),@ApiImplicitParam(name ="userName",value = "查询条件",paramType = "query",dataType = "String")})
-------------------------------------------------------------------------@ApiResponses:用于请求的方法上,表示一组响应@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息code:数字,例如400message:信息,例如"请求参数没填好"response:抛出异常的类@ApiResponses({@ApiResponse(code=400, message="请求参数没填好"),@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对")})
-----------------------------------------------------------------------@ApiModel:用于响应类【就是返回对象时候,对于返回对象的描述,用在实体类上。。】上,表示一个返回响应数据的信息(这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候)
@ApiModelProperty:用在属性上,描述响应类的属性@ApiModel(description = "user实体类,对应数据库中user表")
public class User implements Serializable {@ApiModelProperty(value = "用户id")private Integer userId;@ApiModelProperty(value = "用户姓名")private String userName;@ApiModelProperty(value = "用户密码")private String userPwd;@ApiModelProperty(value = "用户邮箱")private String userEmail;@ApiModelProperty(value = "用户手机号")private String userMobile;@ApiModelProperty(value = "用户创建日期")private Date createDate;@ApiModelProperty(value = "用户修改日期")private Date updateDate;@ApiModelProperty(value = "用户账号状态")private Integer userDelete;
}
------------------------------------------------------------------------
十:分布式缓存【Ehcache】
Spring Boot 对 Ehcache 的使用提供支持,所以在 Spring Boot 中只需简单配置即可使用 Ehcache 实
现数据缓存处理
在使用过程中,value就是使用的缓存名称,缓存名称在配置文件中配置,key值表示在缓存中,这一条数据以那个字段为准,表示重复,一般设置为表数据的ID字段
1:引入依赖
<!-- Ehcache --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId></dependency>
2:创建配置文件
src/main/resources 目录下添加 ehcache.xml 文件,内容如下
注意:配置的cache标签就是缓存名称,当需要使用注解的时候,名称需要和你设置的缓存名称一致,这里命名为user!!!
<ehcache name="mycache"><!--如果不使用磁盘存储,只需要将diskStore注释掉即可;如果使用,需要在ehcache.xml文件中的ehcahce元素下的定义一个diskStore元素并指定其path属性。-->
<!-- <diskStore path="C:\java\cache"/>--><!--name:缓存名称。maxElementsInMemory:缓存最大数目maxElementsOnDisk:硬盘最大缓存个数。eternal:对象是否永久有效,一但设置了,timeout将不起作用。overflowToDisk:是否保存到磁盘,当系统宕机时timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,表示可闲置时间无穷大。timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0,也就是对象存活时间无穷大。diskPersistent:是否缓存虚拟机重启期数据Whether the disk store persists between restarts of the VirtualMachine. The default value is false.diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,会根据指定的策略去清理内存默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。clearOnFlush:内存数量最大时是否清除。memoryStoreEvictionPolicy:可选策略有:LRU(最近最少使用,默认策略)Less Frequently Used,就是例子中使用的策略,就是一直以来最少被使用的。FIFO(先进先出)first in first out,这个是大家最熟的,先进先出。LFU(最少访问次数)Least Recently Used,最近最少使用的。
缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的
时候,
那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。
--><defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"maxElementsOnDisk="10000000"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"></defaultCache><cachename="user1" eternal="false"maxElementsInMemory="100"overflowToDisk="false"diskPersistent="false"timeToIdleSeconds="0"timeToLiveSeconds="300"memoryStoreEvictionPolicy="LRU"/>
</ehcache>
3:指定缓存的配置
Spring:## Ehcache缓存配置cache:ehcache:config: classpath:ehcache.xml
4:开启缓存
在 Starter 启动入口类中,添加 @EnableCaching 注解,启动缓存
@SpringBootApplication
@MapperScan("com.wangyuan.mapper") //@Mapper
@EnableCaching
public class SpringBootStudentApplication {public static void main(String[] args) {// SpringApplication.run(SpringBootStudentApplication.class, args);SpringApplication springApplication = new SpringApplication(SpringBootStudentApplication.class);// 设置 banner 图标关闭springApplication.setBannerMode(Banner.Mode.OFF);springApplication.run();}
}
5:使用缓存
@CacheConfig
用于标注在类上,可以存放该类中所有缓存的公有属性,比如设置缓存的名字。【我们也可以不使用该注解,直接通过@Cacheable自己配置缓存集的名字来定义! 这个不会用】
@Cacheable
应用到读取数据的方法上,即可缓存的方法,如查找方法,先从缓存中读取,如果没有再调用相应方法获取数据,然后把数据添加到缓存中
value、cacheNames:两个等同的参数( cacheNames 为 Spring 4 新增,作为 value 的别
名),用于指定缓存存储的集合名。由于 Spring 4 中新增了 @CacheConfig,因此在 Spring 3 中
原本必须有的 value 属性,也成为非必需项了
-------------------------------------------------------------------------
key:缓存对象存储在Map集合中的 key 值,非必需,缺省按照函数的所有参数组合作为 key 值,
若自己配置需使用 SpEL 表达式,比如:@Cacheable(key = "#p0"):使用函数第一个参数作为缓
存的 key 值,更多关于SpEL 表达式的详细内容可参考官方文档
-------------------------------------------------------------------------
condition:缓存对象的条件,非必需,也需使用SpEL表达式,只有满足表达式条件的内容才会被
缓存,比如:@Cacheable(key = "#p0", condition = "#p0.length() < 3"),表示只有当第一个参数
的长度小于3的时候才会被缓存
-------------------------------------------------------------------------
unless:另外一个缓存条件参数,非必需,需使用 SpEL 表达式。它不同于 condition 参数的地方
在于它的判断时机,该条件是在函数被调用之后才做判断的,所以它可以通过对 result 进行判断。
-------------------------------------------------------------------------
keyGenerator:用于指定 key 生成器,非必需。若需要指定一个自定义的 key 生成器,我们需要
去实现org.springframework.cache.interceptor.KeyGenerator 接口,并使用该参数来指定。需要
注意的是:该参数与 key 是互斥的
-------------------------------------------------------------------------
cacheManager:用于指定使用哪个缓存管理器,非必需。只有当有多个时才需要使用
-------------------------------------------------------------------------
cacheResolver:用于指定使用那个缓存解析器,非必需。需通过
-------------------------------------------------------------------------
org.springframework.cache.interceptor.CacheResolver 接口来实现自己的缓存解析器,并用该
参数指定
@CachePut
应用到写数据的方法上,如新增/修改方法,调用方法时会自动把相应的数据放入缓存
@Caching
组合多个 Cache 注解使用
@Caching(put = {@CachePut(value = "user", key = "#user.id"),@CachePut(value = "user", key = "#user.username"),@CachePut(value = "user", key = "#user.age")})
@CacheEvict
应用到移除数据的方法上,如删除方法,调用方法时会从缓存中移除相应的数据
allEntries:非必需,默认为 false。当为 true 时,会移除所有数据
beforeInvocation:非必需,默认为 false,会在调用方法之后移除数据。当为 true 时,会在调
用方法之前移除数据
6:使用案例:在service层使用缓存
@Service
public class UserServiceImp implements UserService{@Autowiredprivate UserMapeper userMapeper;@Cacheable(value = "user1", key="#userId")public User queryUserById(Integer userId){return userMapeper.queryUserById(userId);}@Override@Cacheable(value = "user1")public List<User> queryUserAll() {return userMapeper.queryUserAll();}@Overridepublic PageInfo<User> queryUserPaging(UserQuery userQuery) {PageHelper.startPage(userQuery.getPageNum(), userQuery.getPageSize());return new PageInfo<User>(userMapeper.queryUserPaging(userQuery));}@Override@CacheEvict(value = "user1", key="#userId")public int deleteUserById(Integer userId) {return userMapeper.deleteUserById(userId);}//@CachePut这里不能使用,先使用@CacheEvict@CacheEvict(value = "user1", key="#user.userId")@Overridepublic int updateUserToNmaeById(User user) {return userMapeper.updateUserToNmaeById(user);}
}
十一:事务控制【声明式事务配置】
这里 Spring Boot 集成了 mybatis 框架,mybatis 底层数据访问层实现基于 jdbc 来实现,所以在
Spring Boot 环境下对事务进行控制,事务实现由 Spring Boot 实现并自动配置,在使用时通过注解方
式标注相关方法加入事务控制即可
十二:全局异常处理
准备工作,定义一个返回信息的模板
@ApiModel(description = "响应结果 - Model信息")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ResultInfo {@ApiModelProperty(value = "响应状态码",example = "200")private Integer code=200;@ApiModelProperty(value = "响应消息结果")private String msg = "success";@ApiModelProperty(value = "响应具体结果信息")private Object result;
}
1:方式1:捕获全局所有异常
@ControllerAdvice
public class MyExceptionHandler {@ExceptionHandler(value = Exception.class)@ResponseBodypublic ResultInfo exceptionHandler(Exception e){ResultInfo resultInfo = new ResultInfo();resultInfo.setCode(300);resultInfo.setMsg("操作失败!");//判断异常类型,一般判断是否自己定义的异常,返回制定信息if(e instanceof Exception){resultInfo.setMsg("自定义异常拦截器");resultInfo.setCode(222);}return resultInfo;}
}
2:方式2:捕获指定异常
//
@ExceptionHandler(value = UserIdnotFongtException.class)
@ResponseBody
public ResultInfo userNotLoginHandler(NoLoginException authExceptions){resultInfo.setCode(232);resultInfo.setMsg("用户id不存在");return resultInfo;
}
十三: 数据校验 - Validation
注解 | 详细信息 |
---|---|
@AssertFalse | 可以为null,如果不为null的话必须为false |
@AssertTrue | 可以为null,如果不为null的话必须为true |
@DecimalMax | 设置不能超过最大值 |
@DecimalMin | 设置不能超过最小值 |
@Digits | 设置必须是数字且数字整数的位数和小数的位数必须在指定范围内 |
@Future | 日期必须在当前日期的未来 |
@Past | 日期必须在当前日期的过去 |
@Max | 最大不得超过此最大值 |
@Min | 最大不得小于此最小值 |
@NotNull | 不能为null,可以是空 |
@Min | 最大不得小于此最小值 |
@Pattern | 必须满足指定的正则表达式 |
@Size | 集合、数组、map等的size()值必须在指定范围内 |
必须是email格式 | |
@Length | 长度必须在指定范围内 |
@NotBlank | 字符串不能为null,字符串trim()后也不能等于“” |
@NotEmpty | 不能为null,集合、数组、map等size()不能为0;字符串trim()后可以等于“” |
@Range | 值必须在指定范围内 |
@URL | 必须是一个URL |
十四:数据校验 - JSR 303校验证
Constraint | 详细信息 |
---|---|
@Null | 被注释的元素必须为 null |
@NotNull | 被注释的元素必须不为 null |
@AssertTrue | 被注释的元素必须为 true |
@AssertFalse | 被注释的元素必须为 false |
@Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@DecimalMax(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@Size(max, min) | 被注释的元素的大小必须在指定的范围内 |
@Digits (integer, fraction) | 被注释的元素必须是一个数字,其值必须在可接受的范围内 |
@Past | 被注释的元素必须是一个过去的日期 |
@Future | 被注释的元素必须是一个将来的日期 |
@Pattern(value) | 被注释的元素必须符合指定的正则表达式 |
SpringBoot学习_创建相关推荐
- eclipse创建springboot项目_创建一个 Spring Boot 项目,你会几种方法?
我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 42W+,如下图: 2017 年由于种种原因,就没有 ...
- eclipse创建springboot项目_创建SpringBoot自动配置项目:Starter测试使用
Starter 测试使用 完成了 starter 项目的创建.发布之后,在 Spring Boot 项目中便可以直接使用了,下面简单介绍一-下 Starter 测试使用步骤,其中省略掉了 Spring ...
- oracle学习_创建函数调用函数及存储过程
** –创建方法并调用方法 ** create or replace function f_get_name(t_empno in varchar2) return varchar2 is v_emp ...
- springboot 实现机器学习_机器学习入门之SpringBoot学习历程
本文主要向大家介绍了机器学习入门之SpringBoot学习历程,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. 经过同事介绍,听说了SpringBoot框架,并且亲身感受过这个框架的优 ...
- SpringBoot学习(一)
2019独角兽企业重金招聘Python工程师标准>>> (一) 第一个SpringBoot程序 工作了挺久的,已学到的技术也没有系统性的整理一下,刚好最近在使用SpringBoot搭 ...
- SpringBoot(学习笔记)
SpringBoot学习笔记 从今天开始就进入微服务阶段 一些小问题 1.HelloWorld 1.1回顾什么是Spring 1.2什么是SpringBoot 1.3微服务架构 2.第一个Spring ...
- Springboot学习笔记(二)Web开发
前言: 学习B站UP主狂神说视频笔记整理视频链接 狂神笔记链接 上篇笔记链接-Springboot学习笔记(一)快速上手 Web开发 静态资源 在以往的SpringMVC中所有静态资源或者页面应该放在 ...
- SpringBoot 学习笔记
SpringBoot 学习笔记 文章目录 SpringBoot 学习笔记 1. SpringBoot简介 1.1 什么是Spring 1.2 Spring 是如何简化Java开发的 1.3 什么是 S ...
- 超详细的springBoot学习笔记
Spring Boot 1.Spring Boot简介 Spring诞生时是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的 轻量级代替品.无需开发重量级的En ...
- 狂神说——SpringBoot学习
spring官网 SpringBoot官网 spring-security版本下载 狂神官网学习 也可以搜索B站 (狂神说) 学习网站:https://www.bilibili.com/video/B ...
最新文章
- RMAN干掉热备份#OCP试验1#
- linux七大功能,值得Linux向其他系统借鉴的七大功能特性
- 【算法学习笔记】一、算法基础
- IBM与博世合作打造轻松的工业物联网
- [Java基础]字符流中的编码解码问题
- 自己写一个H5项目CI系统
- 前端学习(178):表格元素
- 调试nodejs项目接口,使用Posman,用req.body拿不到数据
- 目前微型计算机的内存储量一般是多大的,微型计算机内存容量的大小一般是指什么而言...
- lntellijidea怎么创建文件_DBC文件到底是个啥
- WDCP控制面板的常用liunx命令集
- 在中国云市场淘金?看国际云大佬如何“软着陆”
- 全面剖析雅虎助手以及网络实名的流氓行径(4)
- python中复数类型虚部为零时表示为_关于 Python 的复数类型,以下选项中描述错误的是...
- matlab实现幂法迭代求特征值和特征向量
- 用两个小例子来解释单例模式中的“双重锁定”
- 两条华子也换不来的数据湖讲解
- NDK_PROJECT_PATH=null
- (CVPR 2019)PointPillars: Fast Encoders for Object Detection From Point Clouds
- 生物信息学个人电脑系统配置(Ubuntu 20.04)
热门文章
- 微信小程序怎么反编译,获取微信小程序源码
- java我行我素购物系统_用java怎么编写 我行我素shopping购物管理体统
- 涵盖全网动漫、影视、小说的APP集合,手机有了他们,看遍全网
- RestClient操作索引库
- 微软文本转语音小工具(Text to speech)
- 计算机视觉论文-2021-06-02
- 中国34个省级行政区2000年-2021年逐月1km植被指数NDVI栅格数据处理及下载
- 测试ai模糊软件,“马赛克”视频能被AI软件彻底还原?测试结果出乎意料!
- kindle刷机ttl_[原创]只需USB线对Kindle 3修砖的小白教程
- 计算机考研浙江理工和江苏大学,杭州电子科技大和浙江理工大学这两所大学怎么样?哪所好?...