wordpress开启用户激活验证失败/手机优化助手

wordpress开启用户激活验证失败,手机优化助手,免费企业建站系统排名,邯郸的互联网公司1. 明确需求在设计之初,sys_role表的enabled字段有2个可选值,其中0 代表禁用,1代表启用,而且实体类中我们使用的是Interger类型:/*** 有效标志*/ private Integer enabled;public Integer getEnabled() {return enable…

1. 明确需求

在设计之初,sys_role表的enabled字段有2个可选值,其中0 代表禁用,1代表启用,而且实体类中我们使用的是Interger类型:

/*** 有效标志*/
private Integer enabled;public Integer getEnabled() {return enabled;
}public void setEnabled(Integer enabled) {this.enabled = enabled;
}

如果要新增或者更新角色信息,我们肯定要校验enabled字段的值必须是0或者1,所以最初的部分代码可能是这样的:

if (sysRole.getEnabled() == 0 || sysRole.getEnabled() == 1) {sysRoleMapper.updateById(sysRole);sysRole = sysRoleMapper.selectById(2L);Assert.assertEquals(0, sysRole.getEnabled());
} else {throw new Exception("无效的enabled值");
}

这种硬编码的方式不仅看起来不友好,而且不利于后期维护,如果维护的程序员脾气不好,还会骂你,哈哈。

所以我们的需求就是,拒绝硬编码,使用友好的编码方式来校验enabled字段的值是否有效。

2. 使用MyBatis提供的枚举类型处理器

我们通常会使用枚举来解决这种场景。

首先新建com.zwwhnly.mybatisaction.type包,然后在该包下新建枚举Enabled:

package com.zwwhnly.mybatisaction.type;public enum Enabled {/*** 禁用*/disabled,/*** 启用*/enabled;
}

其中,disabled对应的索引为0,enabled对应的索引为1。

然后将SysRole类中原来为Integer类型的enabled字段修改为:

/*** 有效标志*/
private Enabled enabled;public Enabled getEnabled() {return enabled;
}public void setEnabled(Enabled enabled) {this.enabled = enabled;
}

此时原本硬编码的代码就可以修改为:

if (sysRole.getEnabled() == Enabled.disabled || sysRole.getEnabled() == Enabled.enabled) {sysRoleMapper.updateById(sysRole);sysRole = sysRoleMapper.selectById(2L);Assert.assertEquals(Enabled.disabled, sysRole.getEnabled());
} else {throw new Exception("无效的enabled值");
}

虽然上面的代码很完美的解决了硬编码的问题,但此时又引出一个新的问题:

数据库并不能识别Enabled枚举类型,在新增,更新或者作为查询条件时,需要将枚举值转换为数据库中的int类型,在查询数据时,需要将数据库的int类型的值转换为Enabled枚举类型。

带着这个问题,我们在SysRoleMapperTest测试类中添加如下测试方法:

@Test
public void testUpdateById() {SqlSession sqlSession = getSqlSession();try {SysRoleMapper sysRoleMapper = sqlSession.getMapper(SysRoleMapper.class);// 先查询出id=2的角色,然后修改角色的enabled值为disabledSysRole sysRole = sysRoleMapper.selectById(2L);Assert.assertEquals(Enabled.enabled, sysRole.getEnabled());// 修改角色的enabled为disabledsysRole.setEnabled(Enabled.disabled);if (sysRole.getEnabled() == Enabled.disabled || sysRole.getEnabled() == Enabled.enabled) {sysRoleMapper.updateById(sysRole);sysRole = sysRoleMapper.selectById(2L);Assert.assertEquals(Enabled.disabled, sysRole.getEnabled());} else {throw new Exception("无效的enabled值");}} catch (Exception e) {e.printStackTrace();} finally {sqlSession.close();}
}

运行测试代码,发现抛出如下异常:

d69eb32c4fe060369c1fbbeed24093ff.png
Error querying database. Cause: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'enabled' from result set. Cause: java.lang.IllegalArgumentException: No enum constant com.zwwhnly.mybatisaction.type.Enabled.1

这是因为MyBatis在处理Java类型和数据库类型时,使用TypeHandler(类型处理器)对这两者进行转换。

MyBatis为Java类型和数据库JDBC中的常用类型类型提供了TypeHandler接口的实现。

MyBatis在启动时会加载所有的JDBC对应的类型处理器,在处理枚举类型时默认使用org.apache.ibatis.type.EnumTypeHandler处理器,这个处理器会将枚举类型转换为字符串类型的字面值使用,对于Enabled枚举来说,就是“disabled"和”enabled"字符串。

而数据库中enabled字段的类型是int,所以在查询到角色信息将int类型的值1转换为Enabled类型报错。

那么如何解决这个问题呢?

MyBatis还提供了另一个枚举处理器:org.apache.ibatis.type.EnumOrdinalTypeHandler,这个处理器使用枚举的索引进行处理,可以解决此处转换报错的问题。

使用这个处理器,需要在之前的resources/mybatis-config.xml中添加如下配置:

<typeHandlers><typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler"javaType="com.zwwhnly.mybatisaction.type.Enabled"/>
</typeHandlers>

再次运行测试代码,测试通过,输出日志如下:

DEBUG [main] - ==> Preparing: SELECT id,role_name,enabled,create_by,create_time FROM sys_role WHERE id = ?DEBUG [main] - ==> Parameters: 2(Long)TRACE [main] - <== Columns: id, role_name, enabled, create_by, create_timeTRACE [main] - <== Row: 2, 普通用户, 1, 1, 2019-06-27 18:21:12.0DEBUG [main] - <== Total: 1DEBUG [main] - ==> Preparing: UPDATE sys_role SET role_name = ?,enabled = ?,create_by=?, create_time=? WHERE id=?DEBUG [main] - ==> Parameters: 普通用户(String), 0(Integer), 1(Long), 2019-06-27 18:21:12.0(Timestamp), 2(Long)DEBUG [main] - <== Updates: 1

从日志中可以看出,在查询角色信息时,MyBatis将1转换为了Enabled.enabled,在更新角色信息时,MyBatis将Enabled.disabled转换为了0。

3. 使用自定义的类型处理器

假设enabled字段的值既不是枚举的字面值,也不是枚举的索引值,此时org.apache.ibatis.type.EnumTypeHandlerorg.apache.ibatis.type.EnumOrdinalTypeHandler都不能满足我们的需求,这种情况下我们就需要自己来实现类型处理器了。

首先修改下枚举类Enabled代码:

package com.zwwhnly.mybatisaction.type;public enum Enabled {/*** 启用*/enabled(1),/*** 禁用*/disabled(0);private final int value;private Enabled(int value) {this.value = value;}public int getValue() {return value;}
}

然后在com.zwwhnly.mybatisaction.type包下新建类型处理器EnabledTypeHandler:

package com.zwwhnly.mybatisaction.type;import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;/*** Enabled类型处理器*/
public class EnabledTypeHandler implements TypeHandler<Enabled> {private final Map<Integer, Enabled> enabledMap = new HashMap<Integer, Enabled>();public EnabledTypeHandler() {for (Enabled enabled : Enabled.values()) {enabledMap.put(enabled.getValue(), enabled);}}@Overridepublic void setParameter(PreparedStatement preparedStatement, int i, Enabled enabled, JdbcType jdbcType) throws SQLException {preparedStatement.setInt(i, enabled.getValue());}@Overridepublic Enabled getResult(ResultSet resultSet, String s) throws SQLException {Integer value = resultSet.getInt(s);return enabledMap.get(value);}@Overridepublic Enabled getResult(ResultSet resultSet, int i) throws SQLException {Integer value = resultSet.getInt(i);return enabledMap.get(value);}@Overridepublic Enabled getResult(CallableStatement callableStatement, int i) throws SQLException {Integer value = callableStatement.getInt(i);return enabledMap.get(value);}
}

自定义类型处理器实现了TypeHandler接口,重写了接口中的4个方法,并且在无参构造函数中遍历了枚举类型Enabled并对字段enabledMap进行了赋值。

想要使用自定义的类型处理器,也需要在resources/mybatis-config.xml中添加如下配置:

<typeHandlers><!--其他配置--><typeHandler handler="com.zwwhnly.mybatisaction.type.EnabledTypeHandler"javaType="com.zwwhnly.mybatisaction.type.Enabled"/>
</typeHandlers>

运行测试代码,输出日志和上面的输出日志一样,这里不再重复贴出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地更新github项目_GitHub开源项目2019-03-29更新精选

1.etcd&#xff1a;一个高可用的分布式键值数据库&#xff0c;k8s 全家桶标配的注册与发现服务etcd&#xff1a;一个高可用的分布式键值数据库&#xff0c;k8s 全家桶标配的注册与发现服务。它采用 raft 一致性算法&#xff0c;基于 Go 语言实现。可以通过该项目了解、学习 raf…

maven default aliyun_大家看看大佬对Maven仓库的讲解,有何高明之处?

概念Maven在某个统一的位置存储所有项目的共享的构件&#xff0c;这个统一的位置&#xff0c;我们就称之为仓库。(仓库就是存放依赖和插件的地方)。分类maven的仓库只有两大类&#xff1a;1.本地仓库 2.远程仓库&#xff0c;在远程仓库中又分成了3种&#xff1a;中央仓库、 私服…

计算差分方程的收敛点_数值计算(五十九)热传导方程组的差分数值求解

1 问题描述Chenglin Li&#xff1a;数值计算&#xff08;三&#xff09;matlab求解一般的偏微分方程组​zhuanlan.zhihu.com因为给出的边界条件包含导数&#xff0c;因此需要同时考虑前向差分和后向差分&#xff1b;遍历循环&#xff0c;先计算每个坐标的时间节点&#xff0c;或…

python树莓派编程_python树莓派编程

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01;例如&#xff0c;你可以用树莓派搭建你自己的家用云存储服务器。? 树莓派用python来进行编程。 树莓派项目的…

se是什么职位_女皇大学PSE&SE 独家解析!

坐落于圣劳伦斯河畔的女皇大学成立于1841年&#xff0c;至今已经有178年的历史了。作为加拿大传统的四大名校“Old Four”之一&#xff0c;女王大学一直以来在学术成就&#xff08;常年位列麦考林排名医博类前5&#xff09;&#xff0c;学生满意度&#xff08;麦考林排名医博类…

js中new操作符

1.什么是new? 在JS中&#xff0c;new的作用是通过构造函数来创建一个实例对象&#xff08;和普通函数不一样&#xff0c;当函数用作构造函数时&#xff0c;首字母一般要大写&#xff09; function Foo(name) {this.name name; } console.log("new Foo(mm)的类型&#…

charles 安装 ssl_「从零开始Python爬虫」1.7.1 Charles的安装与配置

Charles的安装Charles是一个网络抓包工具&#xff0c;相比Fiddler&#xff0c;其功能更为强大&#xff0c;而且跨平台支持得更好&#xff0c;所以这里选用它来作为主要的移动端抓包工具。相关链接官方网站&#xff1a;https://www.charlesproxy.com下载链接&#xff1a;https:/…

一个div 上下两行_web前端工程师如何理解 CSS 布局和块级格式化上下文

CSS是web前端中的重要内容&#xff0c;很多初学者在学习CSS时都会遇到各种各样的问题&#xff0c;今天就给大家分享web前端开发如何理解CSS不惧和块级格式化上下文。也许你从未听说过这个术语&#xff0c;但是如果你曾经用 CSS 做过布局&#xff0c;那么你也许知道它是什么。理…

html转word 图片丢失 java_Java 设置 Word 文档中图片文字环绕方式

在Word文档中插入图片时&#xff0c;选择合理的图片文字环绕方式可以使图片的展示效果更好&#xff0c;也能使页面的排版更加美观。本文就将介绍如何使用Free Spire.Doc for Java 添加图片到Word文档并设置图片的大小及文字环绕方式。Jar包导入方法一&#xff1a;下载Free Spir…

c语言getchar_二级C语言试题刷题录

2020.9 计算机二级C语言科目选择题标黑的为正确选项程序流程图中带有箭头的线段表示的是控制流 图元关系、数据流、调用关系当图为数据流图的时候&#xff0c;标有名字的箭头表示数据流结构化程序设计的基本原则不包括多态性 自顶向下、模块化、逐步求精软件设计中模块划分应遵…

Git各指令的本质

前言 作为当前世界上最强大的代码管理工具Git相信大家都很熟悉&#xff0c;但据我所知有很大一批人停留在clone、commit、pull、push...的阶段&#xff0c;是不是对rebase心里没底只敢用merge&#xff1f;碰见版本回退就抓瞎&#xff1f;别问我怎么知道的&#xff0c;问就是&a…

python re模块详解_python 详解re模块

本文介绍了Python对于正则表达式的支持&#xff0c;包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例。本文的内容不包括如何编写高效的正则表达式、如何优化正则表达式&#xff0c;这些主题请查看其他教程。 注意&#xff1a;本文基于Python2.4完成&#xf…

cass或cad里提取点坐标及高程的插件_一个坐标计算小程序 EXCEL 可以进行抵偿任意带高斯坐标转换...

永久下载&#xff1a;https://www.celiang.net/article/688【1】史上最齐全的CAD下载资源&#xff01;&#xff01;&#xff01;【2】【BIM软件】Revit 2018软件安装包免费送&#xff0c;内附安装教程&#xff01;【3】南方CASS展点方法视频教程【4】坐标转换中的七参数详谈&am…

exe解包和重新打包_Jira 批量提交问题 + 生成可执行文件exe

本地环境 Python 3.7.1 windows 10 x64一 jira 批量提交1 脚本思路(1) 待提交问题存储&#xff1a;csv (习惯用 csv &#xff0c;其他如excel 理论上也可以)(2) 使用 jira 库的方法 create_issue(3) 已提交问题存储到另一个 csv 文件里(用于后续操作&#xff0c;如统一更新状态…

matlab基于dct的图像压缩编码解码_音频压缩编码的基本原理详解

1.视频编码基本原理&#xff08;1&#xff09; 视频信号的冗余信息以记录数字视频的YUV分量格式为例&#xff0c;YUV分别代表亮度与两个色差信号。例如对于现有的PAL制电视系统&#xff0c;其亮度信号采样频率为13.5MHz&#xff1b;色度信号的频带通常为亮度信号的一半或更少&a…

linux 查看登入记录_无时无刻,用 SimplyBook.me 管理者 App 查看客户预约排程!

经过数日优化及调整&#xff0c;SimplyBook.me 日前推出了管理者专用 App&#xff0c;有别于过往在手机装置中&#xff0c;透过网页查询预约资讯&#xff0c;现在经营者也能到 App Store 或是 Google Play 下载专属应用程式&#xff08;App&#xff09;&#xff0c;无时无刻管理…

python组成结构_Python数据分析丨pandas基本数据结构组成

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云&#xff0c;作者&#xff1a;统计学家 目录 1引言 2 Series数组 2.1 Series数组构成 2.2 创建Series数组 2.3 Series数组常用属性 3…

java类加载顺序和创建对象加载顺序

类的加载顺序 有父子关系的类在加载时先调用父类静态初始化块&#xff0c;静态属性&#xff0c;但不包括静态方法&#xff0c;然后再是&#xff0c;子类静态初始化块&#xff0c;静态属性&#xff0c;但同样不包括静态方法 。 类什么时候被加载/类加载时机&#xff1a; 第一&…

spring读取properties配置文件_Spring-1

spring共四天 第一天&#xff1a;spring框架的概述以及spring中基于XML的IOC配置 第二天&#xff1a;spring中基于注解的IOC和ioc的案例 第三天&#xff1a;spring中的aop和基于XML以及注解的AOP配置 第四天&#xff1a;spring中的JdbcTemlate以及Spring事务控制 -------------…