
上线连接云上服务器
获取数据时出现500错误
原因:
mybatis的xml文件中一定存在大小写的表名,数据表的文件名大小写不规范
使用navicat转储sql文件后,用phpmyadmin导入服务器后错误出现
在phpmyadmin将表名更改回本地数据表相同名称,或者更改XML中的表单名称,重新上传
即可解决
本篇主要讲解在MyBatis中如何使用类型处理器。
在设计之初,sys_role表的enabled字段有2个可选值,其中0 代表禁用,1代表启用,而且实体类中我们使用的是Interger类型:
如果要新增或者更新角色信息,我们肯定要校验enabled字段的值必须是0或者1,所以最初的部分代码可能是这样的:
这种硬编码的方式不仅看起来不友好,而且不利于后期维护,如果维护的程序员脾气不好,还会骂你,哈哈。
所以我们的需求就是,拒绝硬编码,使用友好的编码方式来校验enabled字段的值是否有效。
我们通常会使用枚举来解决这种场景。
首先新建com.zwwhnly.mybatisaction.type包,然后在该包下新建枚举Enabled:
其中,disabled对应的索引为0,enabled对应的索引为1。 最新 MyBatis 面试题整理好了,点击Java面试库小程序在线刷题。
然后将SysRole类中原来为Integer类型的enabled字段修为:
此时原本硬编码的代码就可以修改为:
虽然上面的代码很完美的解决了硬编码的问题,但此时又引出一个新的问题:
带着这个问题,我们在SysRoleMapperTest测试类中添加如下测试方法:
运行测试代码,发现抛出如下异常:
这是因为MyBatis在处理Java类型和数据库类型时,使用TypeHandler(类型处理器)对这两者进行转换。
MyBatis为Java类型和数据库JDBC中的常用类型类型提供了TypeHandler接口的实现。
MyBatis在启动时会加载所有的JDBC对应的类型处理器,在处理枚举类型时默认使用org.apache.ibatis.type.EnumTypeHandler处理器,这个处理器会将枚举类型转换为字符串类型的字面值使用,对于Enabled枚举来说,就是“disabled"和”enabled"字符串。
而数据库中enabled字段的类型是int,所以在查询到角色信息将int类型的值1转换为Enabled类型报错。
原文出处:https://mp.weixin.qq.com/s/V0VwdRKwZOiOxZNBmVl6Ww
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)