spring+ibatis 插入是正确的,但查询不出数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring+ibatis 插入是正确的,但查询不出数据相关的知识,希望对你有一定的参考价值。

代码如下:
<typeAlias type="entity.User" alias="User"/>
<resultMap id="userList" class="User">
<result column="test_id" property="id" jdbcType="int" />
<result column="test_name" property="userName" jdbcType="VARCHAR" />
<result column="test_pass" property="passWord" jdbcType="VARCHAR" />
</resultMap>

<insert id="insertUsers" parameterClass="User">
insert into user (test_name,test_pass) values (#userName#,#passWord#)
<selectKey resultClass="int" keyProperty="id">
SELECT LAST_INSERT_ID() as value
</selectKey>
</insert>
<select id="getUsersByName" parameterClass="String" resultClass="User">
select * from Ibatis where name=#value#
</select>

在dao层,调用插入:getSqlMapClientTemplate().insert("insertUsers",newUser);可以插入数据

但是,查询return (User)getSqlMapClientTemplate().queryForObject("getUsersByName",userName);一直是查询结果为空。数据库中是存在数据的!

参考技术A 你这种 情况,你首先要查一下 你的value值是否真的传进去了,另外就是要查一下 你返回的值 你是否有正确的接收到追问

怎么查看value值是否传进去了?在调用getSqlMapClientTemplate().queryForObject("getUsersByName",userName)时userName是有值的。还有,我把select * from Ibatis where name=#value#这个改为select * from Ibatis where name=‘lfy’后,还是一样取不到数据

追答

你的数据库中有 表ibatis吗?
你把select * from Ibatis where name=‘lfy’ 拿到你数据库中执行一下看 有没有结果

追问

我写错了 是select * from user where test_name=‘lfy’和select * from user where test_name=#value#
mysql中执行select * from user where test_name=‘lfy’是有值的 但是通过ibatis取不到数据

追答

你传的 userName 是String 类型 还是 实体bean

本回答被提问者和网友采纳

ibatis使用iterate实现批量插入insert正确写法

由于想批量入库提升效率,最近实现了ibatis的批量插入,结果一直报错 :StringIndexOutOfBoundsException ,原来是value中的格式不正确。

本人邮箱:[email protected],欢迎讨论

正确写法示例:

RecieveDataRecordsDao

   public long iterate_insert(List<RecieveDataRecordsDB> db) {
        Object obj = getSqlMapClientTemplate().insert("iterate_insert", db);
        if (obj == null) { return 0; }

        return (Long) obj;
    }
mapper.xml

<insert  id ="iterate_insert"   parameterClass ="java.util.List">

insert into recieve_data_records (trader_serial_id,phone_num,data_volume,timestamp,lasttime,errorcount,errordesc,errorchannel,type,operator,provinceId,appid) values      

      <iterate  conjunction =","  >
     (#db[].trader_serial_id:VARCHAR#,#db[].phone_num:BIGINT#,#db[].data_volume:BIGINT#,#db[].timestamp:BIGINT#,#db[].lasttime:BIGINT#,#db[].errorcount:INTEGER#,#db[].errordesc:VARCHAR#,#db[].errorchannel:INTEGER#,#db[].type:INTEGER#,#db[].operator:INTEGER#,#db[].provinceid:VARCHAR#,#db[].appid:VARCHAR#)         
      </iterate>

</insert>

 

 

 

--------------------- 

注意事项:
1. value内的值,必须按照 #传入参数名[].属性名:类型 这个格式写。否则会报 StringIndexOutOfBoundsException 异常。方括号将参数标记为List,否则解析器会简单的将List输出成String。我检查半天才发现原来是格式不正确引起的
2. 如果传入的参数类型是List,则不需要在iterate上写property属性
---------------------

以上是关于spring+ibatis 插入是正确的,但查询不出数据的主要内容,如果未能解决你的问题,请参考以下文章

ibatis使用iterate实现批量插入insert正确写法

ibatis 批量插入oracle总结

Mybatis selectKey不返回序列值

使用 ibatis 将字符串列表插入到多列中的表中

ibatis动态多条件组合查询以及模糊查询

spring ibatis jta 事务管理不起来