ibatis调用ms SQLSERVER 存储过程结果集
那就是你的存储过程(report_day.report_day_pro)的问题啦,存储过程没有给回其他的返回值呗。。。
你数据库中主键重复了,所以主键相同数据就被覆盖掉了,但是条数不会减少
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="UserDaoSqlMap">
<typeAlias alias="user" type="org.kylin.emap.bean.UserBean"/>
<resultMap id="userResultMap" class="user">
<result property="id" column="id"/>
<result property="loginName" column="login_name"/>
<result property="loginPasswd" column="login_passwd"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="phone" column="phone" typeHandler="org.kylin.emap.util.ibatis.PgsqlStringArrayTypeHandler"/>
<result property="privilege" column="privilege" typeHandler="org.kylin.emap.util.ibatis.PgsqlIntegerArrayTypeHandler"/>
</resultMap>
<parameterMap id="loginUserParameters" class="java.util.HashMap">
<parameter property="result" jdbcType="OTHER" javaType="java.sql.ResultSet" mode="OUT"/>
<parameter property="loginName" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="loginPasswd" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
</parameterMap>
<select id="checkUser" resultMap="userResultMap" parameterClass="user">
SELECT id, login_name, login_passwd, name, sex, phone, privilege
FROM t_user
WHERE login_name = #loginName# AND login_passwd = #loginPasswd#
</select>
<procedure id="loginUser" resultMap="userResultMap" parameterMap="loginUserParameters" >
{? = call f_login_user(?,?)}
</procedure>
</sqlMap>
在userResultMap中有typeHandler的描述,如phone字段,用org.kylin.emap.util.ibatis.PgsqlStringArrayTypeHandler这个类来处理数组类型,这个类是实现了iBatis的com.ibatis.sqlmap.client.extensions.TypeHandlerCallback,iBatis是很强啊,很方便扩展。
先看procedure的定义,用到了loginUserParameters做参数,返回userResultMap。
loginUserParameters描述了3个参数,按照调用方式: ? = call f_login_user(?, ?)的顺序,第一个参数是返回结果集的,这里的jdbcType填写OTHER,javaType填写java.sql.ResultSet,如果是ORACLE的存储过程通过游标返回结果集的话,jdbcType应该填写为ORACLECURSOR,看来iBatis专门为ORACLE做了开发,不过在PostgreSQL中不能用ORACLECURSOR,得用OTHER。
好了,现在我们看看DAO中如何通过SqlMapClient得到这个结果集:
public UserBean loginUser(String loginName, String loginPasswd) throws DaoException {
HashMap<String, String> parameters = new HashMap<String, String>();
parameters.put("loginName", loginName);
parameters.put("loginPasswd", loginPasswd);
return (UserBean)getSqlMapClientTemplate().queryForObject("UserDaoSqlMap.loginUser", parameters);
}
当前这个例子,存储过程通过游标返回了一行数据,我们可以用queryForObject得到结果集,结果集也自动影射为UserBean了,很方便使用。
mybatis怎么设置当不满足所有if test的条件则返回空?
直接在select外层加if test判断,或者里面加一个如果两个参数都是Null,则1=2,这样都不符合条件,查不到结果。
如何开发自己的通用Mapper
ms,除此之外返回值可以是void或者SqlNode之一。这里先讲一下通用Mapper的实现原理。通用Mapper目前是通过拦截器在通用方法第一次执行的时候去修改MappedStatement对象的SqlSource属性。而且只会执行一次,以后就和正常的方法没有任何区别。使用Provider注解的这个Mapper方法,Mybatis本身会处理成ProviderSqlSource(...
程序员应该选择java还是c#?
精通j2ee,精通struts、springmvc、hibernate或者mybatis,对mysql、oracle有深入理解,精通webservice、精通多线程,能处理高并发,有的还得懂jvm,最好有hadoop等开发经验。最后再来个211以上。 .net方面呢? 精通.Net,精通mvc3-5、精通wpf、wcf、多线程,mssql等等等等。 我现在处于离职状态,所以每天收到猎聘上的一些推...
如何正确掌握Java的学习方法?
我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它。那么这些类中究竟提供了哪些方法给我们使用?方法的参数个数及类型是?类的构造器需不需要参数?总不可能SUN公司的工程师打国际长途甚至...
MyBatis拦截器:给参数对象属性赋值的实例
{\/\/如果是map,有两种情况:(1)使用@Param多参数传入,由Mybatis包装成map。(2)原始传入Map System.out.println("这是一个包装过的类型!");Map map=(Map)arg;for (Object obj : map.values()){ setProperty(obj);} } else {\/\/原始参数传入 setProperty(arg);} } return ...
多次查询缓存的问题 flushCache为什么失效
我不知道这是mybatis的一个bug还是故意这样去设计的.mybatis在执行查询语句的时候,会在本地做一份缓存信息.在BaseExecutor类中: private List queryFromDatabase(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey key, BoundSql boundSql) throws SQLEx...
mybatis是不是不支持批量插入id自增长的数据
我这样写的。<insert id="addTMsgSmsinfoForBatch" parameterType="java.util.List"> <selectKey resultType="long" keyProperty="id" order="BEFORE"> SELECT T旦供测佳爻簧诧伪超镰_MSG_SMSINFO_SEQ.NEXTVAL as id from dual <\/selectKey> INSERT INTO T_MSG_SMSINFO ( <include refid="...
程序员应该选择java还是c#?
精通j2ee,精通struts、springmvc、hibernate或者mybatis,对mysql、oracle有深入理解,精通webservice、精通多线程,能处理高并发,有的还得懂jvm,最好有hadoop等开发经验。最后再来个211以上。 .net方面呢? 精通.Net,精通mvc3-5、精通wpf、wcf、多线程,mssql等等等等。 我现在处于离职状态,所以每天收到猎聘上的一些推...
程序员应该选择java还是c#?
精通j2ee,精通struts、springmvc、hibernate或者mybatis,对mysql、oracle有深入理解,精通webservice、精通多线程,能处理高并发,有的还得懂jvm,最好有hadoop等开发经验。最后再来个211以上。 .net方面呢? 精通.Net,精通mvc3-5、精通wpf、wcf、多线程,mssql等等等等。 我现在处于离职状态,所以每天收到猎聘上的一些推...
程序员应该选择java还是c#?
精通j2ee,精通struts、springmvc、hibernate或者mybatis,对mysql、oracle有深入理解,精通webservice、精通多线程,能处理高并发,有的还得懂jvm,最好有hadoop等开发经验。最后再来个211以上。 .net方面呢? 精通.Net,精通mvc3-5、精通wpf、wcf、多线程,mssql等等等等。 我现在处于离职状态,所以每天收到猎聘上的一些推...
隗鲍尔复: commons-dbcp-1.4.jar 用来支持ibatis ibatis-2.3.4.726.jar ibatis包 jtds-1.2.jar sqlServer连库jar msbase.jar mssqlserver.jar msutil.jar 这三个也是sqlServer连库包,一起加里 哪个都可以.
绥化市13520989744: 如何从Spring 获取 Connection - ?
隗鲍尔复: 运行期从ibatis配置文件中获取sql的两种方法 运行期从ibatis配置文件中获取sql1.通过SqlMapClientDaoSupport,SqlMapClientImpl,MappedStatement,Sql,RequestScope等ibatis提供的类 public List<UserInfo> getUserList(UserInfo userInfo) { String ...
绥化市13520989744: 如何以单用户模式启动SQL server, - ?
隗鲍尔复: 两种方法: 一、sqlservr.exe -m -c 1、 如图所示,关闭sqlserver(实例)服务2、 运行---->cmd--->cd C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe –m 注:C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL...
绥化市13520989744: 如何启动 SQL Server 实例 - ?
隗鲍尔复: 启动 SQL Server 的默认实例 在命令提示符下,输入下列命令之一:net start "SQL Server (MSSQLSERVER)"- 或 - net start MSSQLSERVER 启动 SQL Server 的命名实例 在命令提示符下,输入下列命令之一.请用要管理的实例的名称替换 ...
绥化市13520989744: 如何通过vs创建sql server - ?
隗鲍尔复: 步骤如下 :代开vs2008,在菜单栏中找到“工具”下的“连接到数据库”.在弹出的“选择数据源”窗体中,选择“Microsoft SQL Server”,单击“继续”. 在弹出的“添加连接”窗体中输入 服务器名 用户名 密码 选择一个数据库名(一定要选择一个).这里可以点击“测试连接”看看你输入的是否正确. 然后点击“确定”.即可. 在vs中的“服务器资源管理器”中就出现了你刚才添加的数据库.
绥化市13520989744: 怎么让R语言读写SQL的数据 - ?
隗鲍尔复: 一、 安装RODBC库1、进入R语言的GUI界面(RGUI.EXE),在菜单栏选择“程序包/安装程序包2、在弹出的窗口里往下拉,选择RODBC如图,点击确定3、在ODBC数据源管理器里将需要的数据库添加进去,这里笔者使用的是...
绥化市13520989744: tomcat6.0.33连接SQL SERVER 2000怎么在tomcat里配置? - ?
隗鲍尔复: 1、把SQL Server的jdbc放到tomcat 的web-inf目录下.2、连接代码:public static Connection connToMSSQL() throws SQLException{ Connection msconn = null; try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } catch (...
绥化市13520989744: 程序员.数据库软件SQL SERVER2005在服务里始终没有SQLSERVER(MSSQLSER - ?
隗鲍尔复: 启动:net start mssqlserver 暂停:net pause mssqlserver 重新启动暂停的SQL SERVER:net continue mssqlserver 停止:net stop mssqlserver DOS命令启动sql实例的服务大家都知道用NET START MSSQLSERVER\NET STOP MSSQLSERVER...
绥化市13520989744: lua脚本语言连接sqlserver数据库 - ?
隗鲍尔复: 只使用lua连接过oracle的数据库,大概是这样:-- connet to database function connectDB(sid, user, pwd) sid = sid or "TEST" user = user or "user" pwd = pwd or "pwd" local ENV = luasql.odbc() -- conn db conn, err = ENV:connect(sid, user, pwd) assert (conn, (err or '').." (" .. sid .. ")") end 你执行connet不需要用户名和密码吗?还有odbc的数据源配置的对不对.
绥化市13520989744: c中 使用嵌入式 SQL需要加载什么头文件和库 - ?
隗鲍尔复: 嵌入式SQL程序的VC+SQL server 2000实现的环境配置 嵌入SQL的C应用程序具体到VC++6.0, SQL Server2000 下调试可分为五步:1、环境初始化;2、预编译;3、编译;4、连接;5、运行.下面就其中重要的的操作方法给以详细说明. ...