mybatis使用package方式映射mapper报错

⚠️ mybatis使用package方式映射mapper报错


在初学mybatis通过junit测试功能时系统一直报

Mapped Statements collection does not contain value for pers.dhx_.DAO.UserMapper.insertUser

大概意思是mybatis无法找到UserMapper的映射文件

也就是识别UserMapper.xml过程中出问题了

测试的代码如下:

    @Test
    public void test1() throws Exception{
//      获取核心配置文件的输入流
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//      获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
//      获取SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(is);
//        获取Sql 的会话对象  -- > SqlSession , 是mybatis提供操作数据库的核心对象
        SqlSession sqlSession = sqlSessionFactory.openSession(true);  // 将参数设置为true , 就是开启了自动提交
//      通过sqlSession获取UserMapper的代理实现对象 ,这个方法的底层 用的是代理模式, 实现的Mapper接口的一个代理实现类,重写了接口的方法(通过映射文件)
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        System.out.println(mapper.insertUser());
//        sqlSession.commit(); // 提交事务
        sqlSession.close(); // 关闭会话
    }
  • 原本是将UserMapper.xml放在resources目录下

UerMapper.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="pers.dhx_.mapper.UserMapper" >   <!--对应 相应的接口-->

<!--
    mapper 接口和映射文件一致
    1.mapper接口的全类名要和mapper保持一致
    2.接口中的方法名要和标签中的id 保持一致
-->
<!-- int   insertUser()   方法名要和id 一致-->
    <insert id="insertUser">
        insert into t_user values(null,'admin1','123456',23,'男','12345@qq.com')
    </insert>
</mapper>

后来查阅资料发现错误原因是, 如果使用package标签映射mapper文件 , resources目录和java目录中的 xml文件要与 接口对应

看图就明白了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0LaLpEUl-1658302227614)(E:\Typora\image\image-20220720151037375.png)]

教程里面的老师没有说这个 ,但是也应该注意

👉其他映射mapper的方法

1️⃣mapper标签使用resource映射

mybatis-config.xml

  • resource
<?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">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->
    <mappers> 
        <mapper resource="pers/dhx_/mapper/UserMapper.xml"/>
    </mappers> 
</configuration>

附上resources目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ocsQvtaj-1658302227615)(E:\Typora\image\image-20220720151516654.png)]

2️⃣mapper标签使用class映射

class 注意要写全类名

需要注意的是这里需要在接口的方法上面写上对应的注解

UserMapper.java

package pers.dhx_.mapper;

import org.apache.ibatis.annotations.Insert;

/**
 * @author Dhx_
 * @className UserMapper
 * @description TODO
 * @date 2022/7/20 15:09
 */
public interface UserMapper {
    @Insert(value = "insert into t_user values(null,'admin','123456',23,'男','12345@qq.com')")
    int insertUser();
}

mybatis-config.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">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->
    <mappers>
        <mapper class="pers.dhx_.mapper.UserMapper"/>
    </mappers>
</configuration>

3️⃣mapper标签使用url映射

其实就是使用绝对路径

  • 一般情况下不会使用这种方式,了解即可
<configuration> 
    <mappers> 
        <mapper url="file:///C:/User/lenovo/Desktop/mappers/UserMapper" /> 
    </mappers> 
</configuration>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值