解决Mapped Statements collection does not contain value for selectPersonByNo和改进方法

这是今天在学习Mybatis时遇到的错误,搞了一下午
在这里插入图片描述
最后晚上终于整出来了,错误就是因为映射文件中的id和selectOne中的参数写的不一致
在这里插入图片描述

在这里插入图片描述
造成这一异常的还有其他可能,搜了许多的博客,他们都是在说是因为Mybatis的配置文件中没有写映射文件在这里插入图片描述
总之总算整完了,这MyBatis入门也太费事了吧orz。
更-----2020年10月5日17:37:53
为了不让自己上面的情况再次发生,下面还有一种方案
编写一个接口:

在这里插入图片描述
映射文件中(PersonMapper.xml):
在这里插入图片描述
接口中PersonMapper.java:在这里插入图片描述
namespaces=接口的全类名(eclipse)[namespaces=接口名(idea)]
id =接口中的方法名
parameterType=方法中的参数类型
SQL语句中的参数=方法中的参数名
resultType=方法的返回值类型(若没有resultType时,返回值类型为void)

编写好后,测试代码也需要改
原来的代码:

Person person = session.selectOne("selectPersonByNo",2);

更改过后

PersonMapper personMapper = session.getMapper(PersonMapper.class);
        Person person = personMapper.selectPersonByNo(1);
//session.commit();

若要是进行增删改操作时需要进行session.commit操作。


映射文件代码PersonMapper.xml

<?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="PersonMapper">
    <select id="selectPersonByNo" parameterType="int" resultType="Person">
        select * from person where no = #{no}
</select>
</mapper>

Mybatis的配置文件Mybatis.xml

<?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>
    <environments default="development">
        <environment id="development">

            <!--事务提交的方式
            JDBC:利用JDBC方式处理事务(commit,rollback,close)
            MANAGED:将事务交由其他组件去-->
            <transactionManager type="JDBC"/>
            <!--数据源类型:
            UNPOOLED:传统的JDBC模式(每次访问数据库,均需要打开,关闭数据库)
            POOLED:使用数据库连接池
            JNDI:从tomcat中获取一个内置的数据库连接池
            -->
            <dataSource type="POOLED">
                <!-- 配置数据库信息-->
                <property name="driver" value="oracle.jdbc.OracleDriver"/>
                <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:ORCL"/>
                <property name="username" value="scott"/>
                <property name="password" value="686900"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载映射文件-->
        <mapper resource="PersonMapper.xml"/>
    </mappers>
</configuration>

接口PersonMapper.java代码

public interface PersonMapper {
    Person selectPersonByNo(int no);
}

测试代码:

 public static void selectPersonByNo()throws IOException {
        //加载Mybatis配置文件,为了访问数据库
        Reader reader = Resources.getResourceAsReader("Mybatis.xml");

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //这里的session相当于当时jdbc的connection
        SqlSession session = sqlSessionFactory.openSession();

//        Person person = session.selectOne("selectPersonByNo",2);
        PersonMapper personMapper = session.getMapper(PersonMapper.class);
        Person person = personMapper.selectPersonByNo(1);
        System.out.println(person);
        session.close();
    }
  • 36
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
引用和提到了一个错误信息"Mapped Statements collection does not contain value for selectOne",这个错误是由于Mybatis在执行数据库操作时找不到对应的SQL语句所引起的。根据这个错误信息,我们可以推测在执行deleteActivityInstance操作时也是同样的原因引起的。解决这个问题的方法是在Mybatis的配置文件中添加对应的映射语句。 可能的解决方法如下: 1. 首先,在Mybatis的配置文件中查找是否有对应的映射语句,即是否在SQL映射文件中定义了名为deleteActivityInstance的语句。 2. 如果没有找到该语句,需要在SQL映射文件中添加一个名为deleteActivityInstance的语句,并确保它的id与Mybatis的配置文件中的映射语句匹配。 3. 如果已经存在该语句,重新检查Mybatis的配置文件中是否正确引用了该映射语句。 总之,当出现Mapped Statements collection does not contain value for deleteActivityInstance的错误时,需要检查Mybatis的配置文件和SQL映射文件,确保映射语句的定义和引用是正确的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Mapped Statements collection does not contain value for xxx问题解决方法](https://blog.csdn.net/heyl163_/article/details/129920915)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [[Mybatis]Mapped Statements collection does not contain value for selectOne](https://blog.csdn.net/weixin_45254062/article/details/129665135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值