sqlmap.xml:<mapper namespace="SelectCache" >
<cache type="org.mybatis.caches.ehcache.LoggingEhcache" />
<resultMap type="User" id="userResultMap">
...
</resultMap>
<!-- call procedure parameter -->
<parameterMap id="parameterMap" type="java.util.HashMap">
<parameter property="IN_TesterCode" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="IN_PassWord" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="result" jdbcType="CURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="userResultMap"/>
</parameterMap>
<select id="getTesterByCodeAndPwd" parameterMap="parameterMap" statementType="CALLABLE" resultType="User">
{call pkg_gettesterbycodeandpwd.proc_gettesterbycodeandpwd(?, ?,?)}
</select>
</mapper> java code:List userList = null;
Map<String, Object> param = new HashMap<String, Object>();
param.put("IN_TesterCode", getUser().getTesterCode());
param.put("IN_PassWord", getUser().getPassWord());
param.put("result", userList); // 调用存储过程
userServices.getTesterByCodeAndPwd(param);userList= (ArrayList)param.get("result"); // 得到存储过程返回的List第一次调用userList可用,在缓存没有失效时再次调用,userList为null,郁闷,我知道是缓存的事,但不知道怎么解决,望各位大侠多帮忙,谢谢!!!
<cache type="org.mybatis.caches.ehcache.LoggingEhcache" />
<resultMap type="User" id="userResultMap">
...
</resultMap>
<!-- call procedure parameter -->
<parameterMap id="parameterMap" type="java.util.HashMap">
<parameter property="IN_TesterCode" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="IN_PassWord" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="result" jdbcType="CURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="userResultMap"/>
</parameterMap>
<select id="getTesterByCodeAndPwd" parameterMap="parameterMap" statementType="CALLABLE" resultType="User">
{call pkg_gettesterbycodeandpwd.proc_gettesterbycodeandpwd(?, ?,?)}
</select>
</mapper> java code:List userList = null;
Map<String, Object> param = new HashMap<String, Object>();
param.put("IN_TesterCode", getUser().getTesterCode());
param.put("IN_PassWord", getUser().getPassWord());
param.put("result", userList); // 调用存储过程
userServices.getTesterByCodeAndPwd(param);userList= (ArrayList)param.get("result"); // 得到存储过程返回的List第一次调用userList可用,在缓存没有失效时再次调用,userList为null,郁闷,我知道是缓存的事,但不知道怎么解决,望各位大侠多帮忙,谢谢!!!
解决方案 »
- jsp文件中用frameset引用别的jsp文件不显示
- PostMethod获取post提交的页面代码,如何处理URL中的空格
- 那位大哥帮我看一下这个运行时错误咋解决呢
- 谁有MYSQL+TOMCAT+JSP+SERVLET的试用或免费服务器
- Spring配置两个不同的数据源 关于数据库方言的问题(急)
- 找不到Java类库?请相助!
- 问一下做过论坛后台的朋友
- Spring初始化后修改数据库bean属性的url
- java搞web编程和服务器方面的编程需不需要对下面的这些技术有了解?
- HttpURLconnection 给Struts2 的Action发一个post请求的问题
- java.lang.IllegalStateException: SRVE0199E: 已获取了 OutputStream
- JBPM4.4ProcessInstance和Excution是什么区别
return serviceUserDao.getTesterByCodeAndPwd(parameterMap);
}
<!-- 调用存储过程 getTesterByCodeAndPwd-->
<parameterMap id="parameterMap" type="java.util.HashMap">
<parameter property="IN_TesterCode" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="IN_PassWord" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="result" jdbcType="CURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="userResultMap"/>
</parameterMap>
<select id="getTesterByCodeAndPwd" parameterMap="parameterMap" statementType="CALLABLE" resultType="User">
{call pkg_gettesterbycodeandpwd.proc_gettesterbycodeandpwd(?, ?,?)}
</select>
</mapper>返回值是从param.get("result")中取得的,非常感谢
List<User> userList = serviceUserDao.getTesterByCodeAndPwd(parameterMap);
parameterMap.put("result", userList);
return parameterMap;
}原因应该是存储过程没有被执行,所以也不存在输出参数这个概念了,能用的只有返回值。楼主试试看吧。
{call pkg_gettesterbycodeandpwd.proc_gettesterbycodeandpwd(?, ?,?)}
</select>方法。还是非常感谢ldh911!!!!!
<!-- 调用存储过程 getTesterByCodeAndPwd-->
<parameterMap id="parameterMap" type="java.util.HashMap">
<parameter property="IN_TesterCode" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="IN_PassWord" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="result" jdbcType="CURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="userResultMap"/>
</parameterMap>
<select id="getTesterByCodeAndPwd" parameterMap="parameterMap" statementType="CALLABLE" resultType="User">
{call pkg_gettesterbycodeandpwd.proc_gettesterbycodeandpwd(?, ?,?)}
</select>
这个配置有问题。
call pkg_gettesterbycodeandpwd.proc_gettesterbycodeandpwd (#is_audit_option#,#is_staff_id#,#on_errsys#,#os_syserrtext#,#os_syserrtext#)
</procedure>
而oracle存储过程是通过返回参数实现的只能通过如下方式得到记录集:
serviceUserDao.getTesterByCodeAndPwd(parameterMap); // 调用存储过程
List<User> userList=(List<User>)parameterMap.get("result"); // 从Map中得到返回值,而缓存是不记录Map的,郁闷。oracle有像sqlserver那样直接返回记录集的吗?