Mybatis 中Mapper使用package方式配置报错的解决方案

踩了个坑,写出来

Mybatis 中Mapper使用package方式配置报错

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

UserDaoTest中调用了UserDao的insert方法。

1.项目结构如下

2.UserDao接口

package com.mybatis.dao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import com.mybatis.pojo.User;

@Mapper
public interface UserDao {
    void insert( User user);
    int insertSelective(@Param("user") User user);
    int insertList(@Param("users") List<User> users);
    int update(@Param("user") User user);
    User findbyId(@Param("id")Integer id);
}

3.UserDao.xml

4.Mybatis配置文件 Mybatis-config.xml

已经按照正常的package的配置方式,将接口与xml文件放在同一个目录下,其他配置也没问题,就是报找不到UserDao中的方法。

结果去target中看了一眼发现,xml文件没加载。。。。。

解决方案

原来是IDEA maven项目默认不会把src下除java文件外的文件打包到classes文件夹下,需要在maven中增加配置如下

 <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <!--默认是true-->
                <!--<filtering>true</filtering>-->
            </resource>
        </resources>
    </build>

这样xml文件就可以加载了,动态代理为UserDao接口生成实现类,而实现类的具体实现细节就是在xml中,通过package扫描的方式找到xml,就可以正确的生成UserDao的代理类了。

而xml无法加载,就会造成动态代理生成的代理类是无效的(这个代理类对象是可以生成的),当调用方法就会出现开头的错误。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 详解mybatis-plus的 mapper.xml 路径配置的坑

    mybatis-plus今天遇到一个问题,就是mybatis 没有读取到mapper.xml 文件. 特此记录一下,问题如下: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.husy.mapper.SystemUserMapper.findUserByName at com.baomidou.mybatisplus.core.override.MybatisMapperMe

  • MyBatis Mapper代理使用方法详解

    MyBatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 下文重点给大家介绍mapper代理使用方法. 一.开发人员需要完成的任务: mapper.xml映射文件和mapper.java 二.开发规范

  • Mybatis中Mapper映射文件使用详解

    紧接上文所述,在这篇文章中我将对Mapper映射文件进行详细的说明. Mapper映射文件是一个xml格式文件,必须遵循相应的dtd文件规范,如ibatis-3-mapper.dtd.我们先大体上看看支持哪些配置?如下所示,从Eclipse里截了个屏: 从上图可以看出,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.delete.select(增删改查);cache.cache-ref.resultMap.parameterMap.sql. 下

  • Java的MyBatis框架中Mapper映射配置的使用及原理解析

    Mapper的内置方法 model层就是实体类,对应数据库的表.controller层是Servlet,主要是负责业务模块流程的控制,调用service接口的方法,在struts2就是Action.Service层主要做逻辑判断,Dao层是数据访问层,与数据库进行对接.至于Mapper是mybtis框架的映射用到,mapper映射文件在dao层用. 下面是介绍一下Mapper的内置方法: 1.countByExample ===>根据条件查询数量 int countByExample(UserE

  • mybatis的使用-Mapper文件各种语法介绍

    一.查询 mybatis自定义查询条件,queryString.queryMap.limit,Mapper文件写法如下: <select id="getByQueryParam" parameterType="com.systom.base.BaseDaoQueryParam" resultMap="BaseResultMap"> SELECT * FROM user WHERE 1 = 1 <if test="par

  • Mybatis 中Mapper使用package方式配置报错的解决方案

    踩了个坑,写出来 Mybatis 中Mapper使用package方式配置报错 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) UserDaoTest中调用了UserDao的insert方法. 1.项目结构如下 2.UserDao接口 package com.mybatis.dao; import org.apache.ibatis.annotations.Mapper; import

  • Luckysheet 在vue中离线使用及引入报错的解决方案(推荐)

    目录 1.git下载源码运行打包dist 2.将dist文件引入项目 3.应用 4.常见报错 1.git下载源码运行打包dist git 源码地址:https://github.com/mengshukeji/Luckysheet 下载好源码之后执行 npm install npm install gulp -g //跑去源码看看正常与否 npm run dev //如果正常执行打包 npm run build 打包结束后在目录下找到 dist 文件 2.将dist文件引入项目 将dist离线包

  • spring 整合 mybatis 中数据源的几种配置方式(总结篇)

    因为spring 整合mybatis的过程中, 有好几种整合方式,尤其是数据源那块,经常看到不一样的配置方式,总感觉有点乱,所以今天有空总结下. 一.采用org.mybatis.spring.mapper.MapperScannerConfigurer 其实逆向工程也是这种方式 1.数据源配配置文件 2.DAO文件 package com.jdd.mapper; import com.jdd.pojo.Employee; import java.util.List; public interfa

  • 解析 MyBatis 中 Mapper 生效的来龙去脉

    目录 一.MyBatis基本使用 1.1 编写配置文件 1.2 编写Mapper接口及测试方法 1.3 结果 二.源码分析 2.1 通过配置文件构建出 SqlSessionFactory 2.2 获取 SqlSession 对象 2.3 根据 SqlSession 获取 Mapper 代理 2.4 通过 Mapper 代理,执行方法操作数据库 2.5 整体流程图 最近闲了快有半个多月了,一直提不起兴致再去看一些书籍(没有以前疯狂吸食知识的欲望了

  • MyBatis中Mapper的注入问题详解

    在 SpringBoot 体系中,MyBatis 对 Mapper 的注入常见的方式我知道的有 2 种: 1.@MapperScan MapperScan 类是 mybatis-spring 包里面的. 通过在启动类上使用 @MapperScan,然后通过 basePackages 属性指定 Mapper 文件所在的目录来进行扫描装载,默认情况下指定目录下的所有.java文件都会被当做 Mapper 来加载处理. @MapperScan(basePackages = "com.test.spri

  • 关于MyBatis中Mapper XML热加载优化

    前几天在琢磨mybatis xml热加载的问题,原理还是通过定时扫描xml文件去跟新,但放到项目上就各种问题,由于用了mybatisplus死活不生效.本着"即插即用"的原则,狠心把其中的代码优化了一遍,能够兼容mybatisplus,还加入了一些日志,直接上代码 package com.bzd.core.mybatis; import java.io.File; import java.io.FileNotFoundException; import java.io.IOExcept

  • Mybatis中mapper.xml实现热加载介绍

    目录 背景 目的 实现方式 总结 背景 有些需求可能更新sql的频率较高,但又不想频繁发布java应用程序,所以mybatis-mapper.xml热加载的需求顺势而出. 目的 只需调起加载mapper.xml的程序,无需重启整个java应用,低耦合. 实现方式 mapper.xml可以指定路径.如springboot工程resources目录下:亦可独立维护在某个git仓库,然后由程序加载到运行机器上去.具体加载git仓库到运行机器代码如下: package com.jason.git; im

  • 解决Mybatis中mapper.xml文件update,delete及insert返回值问题

    最近写了几个非常简单的接口(CRUD),在单元测试的时候却出了问题,报错如下: Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'messageListener': Unsatisfied dependency expressed through field 'reviewCheckInfoService'; nested exce

  • Mybatis中Mapper标签总结大全

    一.标签分类 定义SQL语句 insert delete update select 配置关联关系 collection association 配置java对象属性与查询结果集中列名的对应关系 resultMap 控制动态SQL拼接 foreach if choose 格式化输出 where set trim 定义常量 sql 其他 include 二.标签总结 1. 基础SQL标签 1.1 查询select 标签属性 id 唯一的名称,对应dao中mapper的接口名称 paramterTy

随机推荐