-
spring 注解验证@NotNull等使用方法
2018-05-04 17:45:40@NotNull 被注释的元素不能为null @AssertTrue 被注释的元素必须为true @AssertFalse 被注释的元素必须为false @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @Max(value) 被注释的元素...点击链接加入群聊【java菜鸟学习】:https://jq.qq.com/?_wv=1027&k=5afU7nS
群号:124569404
常用标签@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) 被注释的元素必须符合指定的正则表达式。 @Email 被注释的元素必须是电子邮件地址 @Length 被注释的字符串的大小必须在指定的范围内 @NotEmpty 被注释的字符串必须非空 @Range 被注释的元素必须在合适的范围内
example :
vo 页面传过来的数据进行校验
inferface : 只是作为标记一个组别 可以在vo验证的某个字段上面加入多个组别,这样没有加入的组别就不会验证这个字段
controller: 需要 加入 @Validated (GroupInterface1.class) //GroupInterface1.class是定义的分组 GroupInterface2.class 需要校验的字段是不会验证的VO:
public class User implements Serializable { /** * 主键 */ @NotNull(message = "primary is not null",groups = {GroupInterface1.class}) private Long id; @Pattern(regexp = "[0123456789]",groups = {GroupInterface1.class,GroupInterface2.class},message = "hava a error Date") private Long maxDiscountAmount; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime; @Future(message = "expireTime is not less than now",groups = {GroupInterface1.class,GroupInterface2.class}) @NotNull(message = "expireTime is not null",groups = {GroupInterface1.class,GroupInterface2.class}) private Date expireTime; }
另外一个例子:
import java.util.Date; import javax.validation.constraints.DecimalMax; import javax.validation.constraints.DecimalMin; import javax.validation.constraints.Email; import javax.validation.constraints.Future; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import org.hibernate.validator.constraints.Range; import org.springframework.format.annotation.DateTimeFormat; /**** imports ****/ public class ValidatorPojo { // 非空判断 @NotNull(message = "id不能为空") private Long id; @Future(message = "需要一个将来日期") // 只能是将来的日期 // @Past //只能去过去的日期 @DateTimeFormat(pattern = "yyyy-MM-dd") // 日期格式化转换 @NotNull // 不能为空 private Date date; @NotNull // 不能为空 @DecimalMin(value = "0.1") // 最小值0.1元 @DecimalMax(value = "10000.00") // 最大值10000元 private Double doubleValue = null; @Min(value = 1, message = "最小值为1") // 最小值为1 @Max(value = 88, message = "最大值为88") // 最大值88 @NotNull // 不能为空 private Integer integer; @Range(min = 1, max = 888, message = "范围为1至888") // 限定范围 private Long range; // 邮箱验证 @Email(message = "邮箱格式错误") private String email; @Size(min = 20, max = 30, message = "字符串长度要求20到30之间。") private String size; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public Double getDoubleValue() { return doubleValue; } public void setDoubleValue(Double doubleValue) { this.doubleValue = doubleValue; } public Integer getInteger() { return integer; } public void setInteger(Integer integer) { this.integer = integer; } public Long getRange() { return range; } public void setRange(Long range) { this.range = range; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getSize() { return size; } public void setSize(String size) { this.size = size; } /**** setter and getter ****/ }
此时controller应该要加上
@Valid
,否则不会验证!/*** * 解析验证参数错误 * @param vp —— 需要验证的POJO,使用注解@Valid 表示验证 * @param errors 错误信息,它由Spring MVC通过验证POJO后自动填充 * @return 错误信息Map */ @RequestMapping(value = "/valid/validate") @ResponseBody public Map<String, Object> validate( @Valid @RequestBody ValidatorPojo vp, Errors errors) { Map<String, Object> errMap = new HashMap<>(); // 获取错误列表 List<ObjectError> oes = errors.getAllErrors(); for (ObjectError oe : oes) { String key = null; String msg = null; // 字段错误 if (oe instanceof FieldError) { FieldError fe = (FieldError) oe; key = fe.getField();// 获取错误验证字段名 } else { // 非字段错误 key = oe.getObjectName();// 获取验证对象名称 } // 错误信息 msg = oe.getDefaultMessage(); errMap.put(key, msg); } return errMap; }
GROUP interface(分组)
-
mysql查询语句select-(null,not null,is null和is not null)
2016-12-12 14:03:561.1 null与not null null 和 not null是mysql的字段属性,或称为数据类型的属性,不属于任何类型。null值也不等同于空值,空值是不占用存储空间的,null占用存储空间,如对myisam表占用1bit额外存储空间。 1.2...1 一些概念
1.1 null与not null
null 和 not null是mysql的字段属性,或称为数据类型的属性,不属于任何类型。null值也不等同于空值,空值是不占用存储空间的,null占用存储空间,如对myisam表占用1bit额外存储空间。
1.2 is null与 is not null
is null和 is not null是mysql的运算符。查询某字段为空时用is null,而不能使用"=null",因为mysql中的null不等于任何其他值,也不等于另外一个null,优化器会把"=null"的查询过滤掉而不返回任何数据;查询某字段为非空时使用is not null。
1.3 ifnull():语法如下:
IFNULL(expr1,expr2)
如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。
2 创建测试表及数据2.1 创建测试表
- CREATE TABLE PLAYERS
- (PLAYERNO INTEGER NOT NULL,
- NAME CHAR(15) NOT NULL,
- INITIALS CHAR(3) NOT NULL,
- BIRTH_DATE DATE ,
- SEX CHAR(1) NOT NULL,
- JOINED SMALLINT NOT NULL,
- STREET VARCHAR(30) NOT NULL,
- HOUSENO CHAR(4) ,
- POSTCODE CHAR(6) ,
- TOWN VARCHAR(30) NOT NULL,
- PHONENO CHAR(13) ,
- LEAGUENO CHAR(4) ,
- PRIMARY KEY (PLAYERNO));
- INSERT INTO PLAYERS VALUES (2, 'Everett', 'R', '1948-09-01', 'M', 1975, 'Stoney Road', '43', '3575NH', 'Stratford', '070-237893', '2411');
- INSERT INTO PLAYERS VALUES (6, 'Parmenter', 'R', '1964-06-25', 'M', 1977, 'Haseltine Lane', '80', '1234KK', 'Stratford', '070-476537', '8467');
- INSERT INTO PLAYERS VALUES (7, 'Wise', 'GWS', '1963-05-11', 'M', 1981, 'Edgecombe Way', '39', '9758VB', 'Stratford', '070-347689', NULL);
- INSERT INTO PLAYERS VALUES (8, 'Newcastle', 'B', '1962-07-08', 'F', 1980, 'Station Road','4', '6584WO', 'Inglewood', '070-458458', '2983');
- INSERT INTO PLAYERS VALUES (27, 'Collins', 'DD', '1964-12-28', 'F', 1983, 'Long Drive','804', '8457DK', 'Eltham', '079-234857', '2513');
- INSERT INTO PLAYERS VALUES (28, 'Collins', 'C', '1963-06-22', 'F', 1983, 'Old Main Road','10', '1294QK', 'Midhurst', '010-659599', NULL);
- INSERT INTO PLAYERS VALUES (39, 'Bishop', 'D', '1956-10-29', 'M', 1980, 'Eaton Square','78', '9629CD', 'Stratford', '070-393435', NULL);
- INSERT INTO PLAYERS VALUES (44, 'Baker', 'E', '1963-01-09', 'M', 1980, 'Lewis Street','23', '4444LJ', 'Inglewood', '070-368753', '1124');
- INSERT INTO PLAYERS VALUES (57, 'Brown', 'M', '1971-08-17', 'M', 1985, 'Edgecombe Way','16', '4377CB', 'Stratford', '070-473458', '6409');
- INSERT INTO PLAYERS VALUES (83, 'Hope', 'PK', '1956-11-11', 'M', 1982, 'Magdalene Road','16A', '1812UP', 'Stratford', '070-353548', '1608');
- INSERT INTO PLAYERS VALUES (95, 'Miller', 'P', '1963-05-14', 'M', 1972, 'High Street','33A', '5746OP', 'Douglas', '070-867564', NULL);
- INSERT INTO PLAYERS VALUES (100, 'Parmenter', 'P', '1963-02-28', 'M', 1979, 'Haseltine Lane','80', '6494SG', 'Stratford', '070-494593', '6524');
- INSERT INTO PLAYERS VALUES (104, 'Moorman', 'D', '1970-05-10', 'F', 1984, 'Stout Street','65', '9437AO', 'Eltham', '079-987571', '7060');
- INSERT INTO PLAYERS VALUES (112, 'Bailey', 'IP', '1963-10-01', 'F', 1984, 'Vixen Road','8', '6392LK', 'Plymouth', '010-548745', '1319');
3.1 实例1
获取拥有一个联盟会员号码的每个球员的号码和联盟会员的号码。
- select playerno, leagueno
- from players
- where leagueno is not null;
注意:is null不能用=号代替。
3.2 实例2如果要获得非联盟成员的所有球员的信息,只需将is not null改为is null 即可
- select playerno, leagueno
- from players
- where leagueno is null;
3.3 实例3 isfull()函数1
- mysql> SELECT IFNULL(1,'test');
- +------------------+
- | IFNULL(1,'test') |
- +------------------+
- | 1 |
- +------------------+
- mysql> SELECT IFNULL(1/0,'test');
- +--------------------+
- | IFNULL(1/0,'test') |
- +--------------------+
- | test |
- +--------------------+
4.1 排序时MySQL将null作为最小值处理。
4.2 not null字段不能插入null,但可以插入空值。
-
修改字段为NOT NULL和NULL
2020-03-11 13:45:07alter table 【表名】 alter 【字段名】 set not null; alter table jcz alter address set not null; 设置可为空 alter table 【表名】 alter 【字段名】 drop not null; alter table jcz alter address drop ...设置不可为空
alter table 【表名】 alter 【字段名】 set not null; alter table jcz alter address set not null;
设置可为空
alter table 【表名】 alter 【字段名】 drop not null; alter table jcz alter address drop not null;
字段中数据有空值是,无法设为不可为空
-
关于@NotNull 和 @Nullable
2018-08-20 09:19:08阅读spring源码发现里面用到两个注解@NotNull 和 @Nullable,现在做一个简单的分析 参考文档: 避免Java应用中NullPointerException的技巧和最佳实践 安卓中的@Nullable和NotNull 注释 在写程序的时候你可以...阅读spring源码发现里面用到两个注解@NotNull 和 @Nullable,现在做一个简单的分析
参考文档:
在写程序的时候你可以定义是否可为空指针。通过使用像@NotNull和@Nullable之类的annotation来声明一个方法是否是空指针安全的。现代的编译器、IDE或者工具可以读此annotation并帮你添加忘记的空指针检查,或者向你提示出不必要的乱七八糟的空指针检查。IntelliJ和findbugs已经支持了这些annotation。这些annotation同样是JSR 305的一部分,但即便IDE或工具中没有,这个annotation本身可以作为文档。看到@NotNull和@Nullable,程序员自己可以决定是否做空指针检查。顺便说一句,这个技巧对Java程序员来说相对比较新,要采用需要一段时间。
用法
如果可以传入NULL值,则标记为@Nullable,如果不可以,则标注为@Nonnull。那么在我们做一些不安全严谨操作的编码操作时,这些注释会给我们一些警告。如下是我看spring源码时,发现用到@Nullable,借此源码做个测试:
public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh, @Nullable ApplicationContext parent) throws BeansException { super(parent); this.setConfigLocations(configLocations); if (refresh) { this.refresh(); } }
我们把@Nullable改成@Nonnull,然后发现调用该方法的地方出现告警:
public FileSystemXmlApplicationContext(String... configLocations) throws BeansException { // here warning this(configLocations, true, (ApplicationContext)null); }
-
Mysql将某个字段修改为null(从不允许为空not null修改为 null)和mysql增加多个字段
2018-01-31 11:34:47Mysql将某个字段修改为null(从不允许为空not null修改为 null) -
mysql null与not null
2015-04-16 14:56:14NULL 和 空字符 NULL 和 NOT NULL的区别 -
SQL NOT NULL 约束
2019-01-27 09:52:11SQL NOT NULL 约束 在默认的情况下,表的列接受 NULL 值。 SQL NOT NULL 约束 NOT NULL 约束强制列不接受 NULL 值。 NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录... -
mysql 语句中 unsigned NOT NULL auto_increment 和 NOT NULL default ''
2018-08-20 13:23:21ID INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, // ID列为无符号整型,该列值不可以为空,并不可以重复,而且自增。 NAME VARCHAR(5) NOT NULL default '' ) AUTO_INCREMENT = 100;(ID列从100开始自增) ... -
mysql设置not null和null区别
2017-12-28 15:28:37mysql设置not null和null区别 -
padas.notnull函数
2019-04-19 19:27:46pandas的notnull函数,用于返回非空值的集合。下面举一个例子。 1,构造一个DataFrame df = pd.DataFrame([['1', 'bee', 'cat'], [None, None, 'fly']]) 2,测试notnull函数 a = pd.notnull(df[0]) 将a打印... -
ORACLE 错误:要修改为NOT NULL的列已经是NOT NULL
2019-03-08 14:33:27PL/SQL想把某列字段设为NOT NULL发现报错 找了好久才发现,原因是对应表的主键约束忘了开启 补充:个人感觉(还没有抽空进行深入研究)出现这种错误,要往主外键还有关联表的主外键角度找问题。 ... -
null与not null和null与空值''的区别
2019-05-29 20:27:23相信很多用了MySQL很久的人,对这两个字段属性...2.为毛not null的效率比null高 3.判断字段不为空的时候,到底要 select * from table where column <> '' 还是要用 select * from table wherecolumn is not ... -
mysql如何将null修改成not null
2020-06-09 20:13:41修改字段类型命令: alter table 表名 modify 字段名称 数据类型 not null; -
postgresql 修改表的字段由NOT NULL修改为NULL
2019-06-20 13:45:04postgresql 修改表的字段由NOT NULL修改为NULL: alter table mytable alter test drop not null; 参考地址:http://www.bufeihua.cn/p/57373753b98b3512bf9fd041 -
MySQL中对NULL进行判断必须是is null或is not null
2019-03-22 16:21:26MySQL中对NULL进行判断必须是is null或is not null -
解决:父类中的@NotNull无效以及@Notnull 验证list对象无效
2018-06-01 19:18:00解决方法如图: controller层 vo.param层 ...父类验证注解要使用@NotEmpty 不能使用 @NotNull,否则验证无效的,反正笔者是没有成功过 转载于:https://www.cnblogs.com/dqcer/p/9123139.html... -
MySQL IS NOT NULL、!=NULL、ISNULL() 详解
2018-03-25 11:20:53… 所有的判断,结果都是false,所有只能用 IS NULL 进行判断默认情况下,推荐使用 IS NOT NULL去判断,因为 SQL 默认情况下对 !=NULL 的判断会永远返回 0 行,但没有语法错误如果一定想要使用 !=NULL 来判断,需要... -
mysql探究之null与not null
2017-01-06 14:56:20相信很多用了mysql很久的人,对这两个字段属性的...2、为毛not null的效率比null高 3、判断字段不为空的时候,到底要 select * from table where column <> '' 还是要用 select * from table where column is... -
【sql 语句】 =null 没有这种写法 只有 is null 和 is not null 这种写法
2020-02-22 19:48:50【sql 语句】 =null 没有这种写法 只有 is null 和 is not null 这种写法 查了半天bug都没看出来,原来是判断 null的这里用的 = 没有 = null 这种表示 只有 is null 没有 != null 只有 is not null ... -
@NotNull注解不生效原因
2020-12-09 18:30:55@NotNull注解不生效原因 在实体类的属性上加上@NotNull,如下图 @Data public class User(){ @NotNull private Integer age; @NotNull(message = "用户名不能为空") private String name; } 需要在controller... -
Mysql将某个字段修改为null(从不允许为空not null修改为 null)
2019-03-12 22:42:49Mysql将某个字段修改为null(从不允许为空not null修改为 null) -
mysql is not null 和 != null的区别
2018-10-29 16:39:38is not null != null 其中null不能用 !=,=,<> 来判断 虽然不会报错,但数据不正确。因为SQL默认情况下对!= Null的判断会永远返回false。 应该用,is not null 或 is null 。 ... -
springboot中@NotEmpty ,@NotNull的区别
2018-11-13 17:40:162 @NotNull:不能为null,但可以为empty,没有Size的约束。 官方文档解释: @NotNull: The CharSequence, Collection, Map or Array object is not null, but can be empty. @NotEmpty: The CharSequen... -
@NotNull相关注解作用
2019-11-29 18:13:13简述@NotNull相关注解作用 -
Java注解@NotNull
2019-04-03 13:47:47@NotNull 被注释的元素不能为null @AssertTrue 被注释的元素必须为true @AssertFalse 被注释的元素必须为false @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @Max(value) 被注释的元素... -
@NotEmpty和@NotBlank和@NotNull
2019-05-24 15:05:25@NotEmpty、@NotBlank和、@NotNull都来自于包org.hibernate.validator.constraints.* @NotNull:不能为null,但可以为empty,用在基本类型上 @NotEmpty:不能为null,而且长度必须大于0,用在集合类上面 @NotBlank:... -
Mysql中is null 和 is not null的使用
2020-03-17 16:51:28MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能...IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。 <=>: 比较操作符(不同于 = 运算符)... -
mysql 中is not null 和 !=null的区别
2020-05-15 09:51:54今天做定时任务,需要用到一个mysql查询 于是我就写: sqlcondition=" and fplsh!...找到了,根据条件因素的唯一变化原理,我很明智的判断出了是is notnull和!=null的区别 我知道了他们的区别,但是为... -
MYSQL 关于IS NULL 和 IS NOT NULL会不会走索引
2019-08-07 16:50:15分析: IS NULL 使用了索引 , IS NOT NULL 没有走索引 二.索引列key 默认值为'123' 允许为空 分析: IS NULL 使用了索引 , IS NOT NULL 没有走索引 三.索引列key 默认值为'123' 不允许为空 分析: IS...