基于mybatis设计简单OA系统问题3
1、 问题:使用mybatis更新数据失败
描述:java.lang.NullPointerException
提交表单

com.duma.entity.User.updateUser - ==> Parameters: ?¤§???(String), 23(Integer), nv(String), 1232342343(String), 123@qq.com(String), 2018-05-06 13:11:38.16(Timestamp), 6666(String), 1(Integer)
问题可能是因为中文乱码

打印输出可以看出问题是因为页面传回来的数据为乱码,但是在servlet中有设置接收数据的格式,那问题应该是jsp页面提交的数据乱码
原因:未指定具体的提交方式。
2、问题:java.lang.NumberFormatException: For input string: ""
分析原因应该是类型转换的时候出错,如果输入为空得到的字符串为"",而不是null值,于是在类型转换的时候格式不匹配,修改代码
String ageStr = request.getParameter("age");
Integer age= null;
if(ageStr!=null&&!ageStr.equals("")){
age= Integer.valueOf(ageStr);
}
继续测试提交部分缺省(为空)表达还是错误
java.lang.NullPointerException
at com.duma.dao.UserDao.updateUser(UserDao.java:67)
首先认识事务提交mybatis和MySQL引擎innoDB区别。Mybatis默认不提交,innodb默认自动提交事务。所以,我们在使用的时候需要在mybatis手动commit。
而我已经手动关闭,所以问题应该是SQL语句的问题。查看日志可以看见:
13143 DEBUG [http-bio-8080-exec-9] com.duma.entity.User.updateUser - ==> Preparing: update user SET nickname=?, gender=?, phone=?, email=?, updateTime=?, remark=? where id=? 13144 DEBUG [http-bio-8080-exec-9] com.duma.entity.User.updateUser - ==> Parameters: 大慕(String), 女(String), (String), (String), 2018-05-06 15:49:28.294(Timestamp), (String), 1(Integer)
提交数据为空的项在mapper的if判断下,还是成功加入添加到SQL语句
仔细观察可以发现

红色框username值为null,在查询的时候就没有添加,而phone值为””时却添加到了语句中
Google他们之间的区别得到:
空对象: String s = null;
空对象是指定义一个对象s,但是没有给该对象分配空间,即没有实例化该对象,因此,空对象在调用所有对象方法时候都会抛出异常,如s.length(), s.isEmpty()等方法。
空值: String k = "";
空值是指一个字符床对象已经实例化,即系统已经给该变量分配了空间,只是对象的内容为空。
空格: String n = " ";
是指一个字符对象已经实例化,对象的内容为空格。
博客:http://ych0108.iteye.com/blog/2125427
于是修改userMapper的配置
<update id="updateUser">
update user
<set>
<if test="username!=null and username !=''">username=#{username},</if>
<if test="userpass!=null and userpass!=''">userpass=#{userpass},</if>
<if test="nickname!=null and nickname!=''">nickname=#{nickname},</if>
<if test="age!=null and age!=''">age=#{age},</if>
<if test="gender!=null and gender!=''">gender=#{gender},</if>
<if test="phone!=null and phone!=''">phone=#{phone},</if>
<if test="email!=null and email!=''">email=#{email},</if>
<if test="createTime!=null and createTime!=''">createTime=#{createTime},</if>
<if test="updateTime!=null and updateTime!=''">updateTime=#{updateTime},</if>
<if test="lastLogin!=null and lastLogin!=''">lastLogin=#{lastLogin},</if>
<if test="userStatus!=null and userStatus!=''">userStatus=#{userStatus},</if>
<if test="remark!=null and remark!=''">remark=#{remark},</if>
</set>
where id=#{id}
</update>
继续测试提交缺省(为空)表达,server报错
org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String
Google得到:
原来这是mybatis 3.3.0中对于时间参数进行比较时的一个bug. 如果拿传入的时间类型参数与空字符串''进行对比判断则会引发异常. 所以在上面的代码中去该该判断, 只保留非空判断就正常了
<if test="updateTime!=null">updateTime=#{updateTime},</if>
继续实现这个功能,还是没有update成功
java.lang.NullPointerException空指针异常,异常位置
sqlSession.commit();
修改:
SqlSession Session = getSqlSession();
row = Session.update("updateUser", user);
Session.commit();
将调用之后的session对象进行commit,成功更新列表
3、 添加用户成功数据库返回数据乱码

检查发现是页面传回servlet乱码,是未修改post提交方式的编码

4、 思考mybatis多次修改数据库数据变得很慢的原因

1、数据库为了优化性能,有时候不会设置外键,而是通过逻辑关联连接,方便管理
2、自增ID可以设置起始字段,这样可以预留位置。
5、 第二个模块为灰色

原因是

Maven忽略文件勾选为了灰色
基于mybatis设计简单OA系统问题3的更多相关文章
- 基于mybatis设计简单OA系统问题1
全类名与全路径 全类名是某个文件在项目中的位置,格式为包名.类名 路径分为相对路径和绝对路径. 绝对路径是指这个文件在操作系统中的位置, 相对路径通过这个文件的上一级 ./ 或下一级/ 来指定文件 ...
- 基于mybatis设计简单OA系统问题2
1.<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <fm ...
- 基于mybatis设计简单信息管理系统---jsp页面
1.在设计编辑界面的时候需要有一个下拉的列表页,想要他指定到指定的值: <select id="categoryId" name="categoryId" ...
- 基于mybatis设计简单信息管理系统2
1.空指针异常 public class CanvasServlet extends HttpServlet { private CanvasService canvasService; privat ...
- 基于mybatis设计简单信息管理系统1
驼峰式命名法 骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始:第二个单词的首字母大写或每一个单词的首字母都采用大写字母,例如:myFirs ...
- 基于角色访问控制的OA系统的设计与实现
摘要:随着电子政务的快速发展和全面普及,办公自动化(OA)系统的安全性显得越来越重要.对基于Web 的B/S 结构的OA 系统结构和安全需求进行了分析,为了增强用户身份鉴别和授权控制的安全性,分析了基 ...
- 可视化工作流程设计开发OA系统,一两个程序员就搞定!
随着信息化的发展,越来越多的公司老板要求实现企业审批流程化.一个公司在初期,人员少,流程简单,员工也会经常不按工作流程来走,甚至有些跨部门的工作因为关系原因,没有走工作流程就实施,导致后期出现问题或者 ...
- 嵌入式系统及应用课程设计——基于STM32的温湿度监测系统
大三上学期期末总结,嗯,没错上学期,写在新学期开始,hhh. 上学期学了一门嵌入式系统及应用的课程,期末的课程设计题目是基于STM32的温湿度监测系统. 记得刚开始做课程设计的时候,听说先设计画出原理 ...
- 基于Redis的限流系统的设计
本文讲述基于Redis的限流系统的设计,主要会谈及限流系统中限流策略这个功能的设计:在实现方面,算法使用的是令牌桶算法来,访问Redis使用lua脚本. 1.概念 In computer netw ...
随机推荐
- 数据库的ACID跟事务隔离级别
摘抄:http://blog.csdn.net/shuaihj/article/details/14163713 ------------------------------------------- ...
- 织梦DEDECMS {dede:arclist},{dede:list}获取附加表字段内容
以前用织梦DEDECMS做二次开发时获取附加表字段内容都是通过runphp执行SQL查询获得,最近看了看手册,发现一个非常简便的方法. 用arclist调用于附加表字段的方法: 方法一: 要获取附加表 ...
- empty,isset,is_null比较(差异与异同)
做php开发时候,想必在使用:empty,isset,is_null 这几个函数时候,遇到一些问题.甚至给自己的程序带来一些安全隐患的bug.很多时候,对于isset,empty都认为差不多.因此开 ...
- HDU 4349——Xiao Ming's Hope——————【Lucas定理】
Xiao Ming's Hope Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- .Net程序员学习Linux最简单的方法(转载)
有很多关于Linux的书籍.博客.大多数都会比较“粗暴“的将一大堆的命令塞给读者,从而使很多.NET程序员望而却步.未入其门就路过了. 所以我设想用一种更为平滑的学习方式, 就是在学习命令时,先用纯语 ...
- 【Microsoft Azure学习之旅】Azure Java SDK - Service Bus的认证问题
[2014年12月12日增加备注:12月10日,Microsoft Azure Java SDK team发布了v0.7.0版本,增加对Service Bus SAS的支持,已解决这个问题:-)] 最 ...
- time和datetime模块
在Python中,通常有这几种方式来表示时间: 1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素. 由于Python的time模块实现主要调用C库,所以各个平台可能有 ...
- Struts2_BBS2009小实战
Struts2_BBS2009准备:链接: http://pan.baidu.com/s/1nvTZz9R 密码: 875a ext3.0_直接部署运行:链接: http://pan.baidu.co ...
- 在西雅图华盛顿大学 (University of Washington) 就读是怎样一番体验?
http://www.zhihu.com/question/20811431 先说学校.优点: 如果你是个文青/装逼犯,你来对地方了.连绵不断的雨水会一下子让写诗的感觉将你充满. 美丽的校园.尤其 ...
- 笨办法学Python(六)
习题 6: 字符串(string)和文本 虽然你已经在程序中写过字符串了,你还没学过它们的用处.在这章习题中我们将使用复杂的字符串来建立一系列的变量,从中你将学到它们的用途.首先我们解释一下字符串是什 ...