最近因为项目组的需要,又重新开始弄java后台,采用的spring-mvc+mybatis。zookeeper+dubbo分布式服务的框架,由于一段时间没有接触过oracle数据库了,遇到了许多问题,把问题记录下来,避免以后遇到同样的问题又是长时间的找解决方案。
1.Exception: org.apache.ibatis.builder.IncompleteElementException: Could not find result map java.lang.Integer;
这个错误当时看着也有点懵逼,太久没弄,虽然看懂了,但是一直不清楚具体是哪一行的错误,mybatis就这一点有点坑,xml中写错了 也不会报具体的错,后面才发现,我某个select返回int,但是我写的是resultMap,应该是resultType。这里讲一下区别:
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。
在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。
①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。
②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。
2.mybatis中Date类型的返回。
在bean中我使用的是java.util.Date,然后在mybatis result设置的jdbcType="DATE",发现这样设置以后丢是了时间精度,date的值为2017-05-15 00:00:00,丢失了时间精度,这样的结果我们需不指定jdbcType。
给一篇参考文件
iBatis Date 类型 时分秒丢失(精度丢失)问题
<if test=" name=='你好' ">
<if>
<if test=' name=="你好" '>
<if>
background-repeat: no-repeat;
background-color: transparent;
<tr>
<td>账号</td>
<td><input type="text" value="请输入您的账号" class="admin" /></td>
</tr>
//js代码
$(".admin").focus(function(){
if($(this).val() == "请输入您的账号"){
$(this).val("");
}
});
$(".admin").blur(function(){
if($(this).val() == ""){
$(this).val("请输入您的账号");
}
//这样就实现了一种默认提示框的效果,但是密码提示框不同,密码提示框的type="password"是默认显示**的,所以要显示默认提示框的话,我们得玩点黑科技,就是用一个同样的文字输入框去显示,首先需要把密码提示框设置为隐藏,当我们点击文字输入框时,我们清楚文字输入框,并隐藏起来,然后把密码提示框显示,并且把焦点转移到密码提示框上,来,上代码
<tr>
<td>密码</td>
<td>
<input type="text" value="请输入您的密码"id="login_showPwd" />
<input type="password"id="login_password" style="display: none"/>
</td>
</tr>
//js代码
$('#login_showPwd').focus(function(){
var text_value=$(this).val();
if(text_value == this.defaultValue){
$('#login_showPwd').hide();
$('#login_password').show().focus();
}
});
$('#login_password').blur(function(){
var text_value = $(this).val();
if(text_value==""){
$('#login_showPwd').show();
$('#login_password').hide();
}
});
ie下兼容密码提示框
window.οnlοad=function(){
if(text_value != null&&text_value != ''&&text_value != this.defaultValue){ $('#login_showPwd').val(this.defaultValue); }
}
7.ie11下验证码后加参数为new date()不能正确解析的问题
不知道为什么在ie11下new date()虽然后面会加入时区,但是ie8下完好,ie11下不显示,想了想就改成带随机数了,这里就不多说了,希望有大手能知道原因之后告知,解决方法暂时就先用这个吧。
今天暂时就写到这里吧。后续有问题会同步更新的,希望能和大家共同进步。