Mybatis报错----result Map

来源:互联网 发布:java jquery ajax 编辑:程序博客网 时间:2024/05/19 02:18

每次搭建Mybatis环境和Spring整合的时候都会报这个错:java.lang.IllegalArgumentException: Result Maps collection already contains value for XXX这个错误


搭建过程如下:

Spring Beans文件:

<!-- 配置包扫描 --><!-- 使用annotation 自动注册bean, 并保证@Required、@Autowired的属性被注入 -->    <context:component-scan base-package="com.lgy"><context:exclude-filter type="annotation"expression="org.springframework.stereotype.Controller" /></context:component-scan> <!-- 使其注解生效 --><context:annotation-config /><!-- 加载数据源 --><import resource="datasource/data_source.xml"/><!-- 配置MyBatis SqlSessionFactory --><import resource="mybatis/my_batis.xml"/> <!-- 配置MyBatis事物通知 --><import resource="transmanager/transmanager.xml"/>

Mybatis文件:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans                     http://www.springframework.org/schema/beans/spring-beans.xsd                    http://www.springframework.org/schema/context                     http://www.springframework.org/schema/context/spring-context.xsd                    http://www.springframework.org/schema/tx                     http://www.springframework.org/schema/tx/spring-tx.xsd                    http://www.springframework.org/schema/aop                     http://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 配置MyBatis SqlSessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation" value="classpath:myBatis-config.xml"></property><property name="mapperLocations" value="classpath:mapper/**/*Mapper.xml" /></bean><!-- 采用自动扫描包的形式来实例化dao层 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  <property name="basePackage" value="com.lgy.dao.**" />  </bean> </beans>

Mybatis core:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 别名配置 --><typeAliases><package name="com.lgy.entry"/></typeAliases></configuration>

用package配置别名,就是把该包下的所有类都配置了别名。



Dao:

import com.lgy.entry.UserInfo;import com.lgy.entry.base.UserInfoQuery;/** * 微信用户管理 * @author feng * */public interface UserInfoDao {/** * 增加用户信息 * @param userInfo */void addUserInfo(UserInfo userInfo);/** * 修改用户订阅状态信息 * @param userInfo */void updateUserInfoByOpenId(UserInfo userInfo);/** * 根据openId查找用户信息 */UserInfo findUserInfoByOpenId(String openId);/** * 查询所有用户信息 带分页条件 */List<UserInfo> finUserInfoList(UserInfoQuery userInfoQuery);/** * 获取所有的数量 * @param userInfoQuery * @return */Integer getCount(UserInfoQuery userInfoQuery);}

Mappler文件:

<?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.lgy.dao.UserInfoDao">    <resultMap type="UserInfo" id="userInfoRM">    <id column="id" property="id"/>        <result column="open_id" property="openId" />    <result column="subscribe_status" property="subscribeStatus" />    </resultMap>        <!-- Limiti SQL --><sql id="userInfoLimit"><if test="startRow != null and pageSize != null">limit #{startRow},#{pageSize}</if></sql>    <!-- 插入一条userinfo记录 -->    <insert id="addUserInfo" parameterType="UserInfo">    insert into weixin_user_info(id, openId, subscribe_status) values(null, #{openId}, #{subscribeStatus});    </insert>        <!-- 根据openId查找用户信息 -->    <update id="updateUserInfoByOpenId" parameterType="UserInfo">    update weixin_user_info    set    subscribe_status = #{subscribeStatus}    where    openId = #{openId}    </update>        <select id="findUserInfoByOpenId" parameterType="String" resultMap="userInfoRM">    select ui.id id, ui.openId open_id,    ui.subscribe_status subscribe_statusfrom weixin_user_info uiwhere ui.openId = #{openId};    </select>        <!-- 带分页查询所有 -->    <select id="finUserInfoList" parameterType="UserInfoQuery" resultMap="userInfoRM">    select     ui.id id, ui.openId open_id,    ui.subscribe_status subscribe_statusfrom weixin_user_info ui<include refid="userInfoLimit" />    </select>    <!-- 查询所有的条数 -->    <select id="getCount" parameterType="UserInfoQuery" resultType="Integer">select count(1) from weixin_user_info</select></mapper>

配置文件都正确。这样就会出现 java.lang.IllegalArgumentException: Result Maps collection already contains value for XXX这个错误。

    解决办法是:删除Mybatis.xml中的<mappers>标签所有内容。因为如果user-mapper.xml与namespace的接口在同一路径下,就不需要在mybaits.xml中再进行配置了,也无需进行扫描。


0 0