注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

让一切都逝去吧

排骨炖泥菜/猪肝炒苹果/鱼籽狗肉汤/狗头薏米汤

 
 
 

日志

 
 

mybatis的mapper映射  

2013-05-16 19:11:14|  分类: mybatis |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
      mybatis的mapper映射文件没配置好,会有这个错误
java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for [某个dao接口的具体方法]
一般要检查配置文件命名空间,还有applicationContext.xml里的配置
    <bean id ="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
          p:dataSource-ref="dataSource" p:configLocation="classpath:mybatis-config.xml">
        <property name="mapperLocations">
            <list>
                <value>classpath*:com/xxx/**/*Mapper.xml</value>
            </list>
        </property>
    </bean>
其中的classpath后没有加上*号,可能也会出问题。

      另外有个插入后返回id的配置
<insert id="insertSelective" parameterType="com.grandstream.website.domain.Sys_Operator" useGeneratedKeys="true" keyProperty="sysid"></insert>
其中useGeneratedKeys和keyProperty两个属性起作用。目前暂时没试过。
Mybatis 3 配置文件参考这个:

[2013-5-19]更新
经测试可以返回id,用mybatis generator生成实体的方式的话,主要是generatedKey的配置
<table tableName="xxx">
<generatedKey column="ID" sqlStatement="select SEQ_xxx.NEXTVAL from dual"/>
...
</table>
这样生成的xml mapper里面就有上面那些配置了。执行mybatis的insert后,实体的id就有值了,然后getId()就取得刚插入记录的id了。

对于具体配置,还是抄录如下:
针对Sequence主键而言,在执行insert sql前必须指定一个主键值给要插入的记录,如Oracle、DB2,可以采用如下配置方式:

<insert id="add" parameterType="vo.Category">
<selectKey resultType="java.lang.Short" order="BEFORE" keyProperty="id">
SELECT SEQ_TEST.NEXTVAL FROM DUAL
</selectKey>
insert into category (name_zh, parent_id,
show_order, delete_status, description
)
values (#{nameZh,jdbcType=VARCHAR},
#{parentId,jdbcType=SMALLINT},
#{showOrder,jdbcType=SMALLINT},
#{deleteStatus,jdbcType=BIT},
#{description,jdbcType=VARCHAR}
)
</insert>


针对自增主键的表,在插入时不需要主键,而是在插入过程自动获取一个自增的主键,比如MySQL,可以采用如下两种配置方式:


<insert id="add" parameterType="vo.Category" useGeneratedKeys="true" keyProperty="id">
insert into category (name_zh, parent_id,
show_order, delete_status, description
)
values (#{nameZh,jdbcType=VARCHAR},
#{parentId,jdbcType=SMALLINT},
#{showOrder,jdbcType=SMALLINT},
#{deleteStatus,jdbcType=BIT},
#{description,jdbcType=VARCHAR}
)
</insert>


<insert id="add" parameterType="vo.Category">
<selectKey resultType="java.lang.Short" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID() AS id
</selectKey>
insert into category (name_zh, parent_id,
show_order, delete_status, description
)
values (#{nameZh,jdbcType=VARCHAR},
#{parentId,jdbcType=SMALLINT},
#{showOrder,jdbcType=SMALLINT},
#{deleteStatus,jdbcType=BIT},
#{description,jdbcType=VARCHAR}
)
</insert>
目前只在oracle下应用成功,其他数据库暂未尝试。
  评论这张
 
阅读(7918)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018