在整合Spring + Mybatis框架的时候,自动扫描配置都已经配置好了。
配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.1.xsd  http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"><!-- 自动扫描 --><context:component-scan base-package="com.aheizi" /><!-- 引入配置文件 --><bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location" value="classpath:properties/jdbc.properties" /></bean><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName" value="${driver}" /><property name="url" value="${url}" /><property name="username" value="${username}" /><property name="password" value="${password}" /><!-- 初始化连接大小 --><property name="initialSize" value="${initialSize}"></property><!-- 连接池最大数量 --><property name="maxActive" value="${maxActive}"></property><!-- 连接池最大空闲 --><property name="maxIdle" value="${maxIdle}"></property><!-- 连接池最小空闲 --><property name="minIdle" value="${minIdle}"></property><!-- 获取连接最大等待时间 --><property name="maxWait" value="${maxWait}"></property></bean><!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!-- 自动扫描mapping.xml文件 --><property name="mapperLocations" value="classpath*:com/aheizi/mapping/*.xml"></property><property name="typeAliasesPackage" value="com.aheizi.domain" /></bean><!-- DAO接口所在包名,Spring会自动查找其下的类 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.aheizi.dao" /><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean><!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean>
</beans>

但是在install的时候报了如下错误:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.aheizi.dao.UserMapper.selectByUserIdat org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:184)at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:38)at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:49)at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:42)at com.sun.proxy.$Proxy11.selectByUserId(Unknown Source)at com.aheizi.service.impl.UserServiceImpl.getUserById(UserServiceImpl.java:20)at com.aheizi.testmybatis.TestSpringDemo.test1(TestSpringDemo.java:37)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:601)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)at org.springframework.test.context.junit4.SpringJUnit4Cla***unner.runChild(SpringJUnit4Cla***unner.java:231)at org.springframework.test.context.junit4.SpringJUnit4Cla***unner.runChild(SpringJUnit4Cla***unner.java:88)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)at org.junit.runners.ParentRunner.run(ParentRunner.java:309)at org.springframework.test.context.junit4.SpringJUnit4Cla***unner.run(SpringJUnit4Cla***unner.java:174)at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:601)at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)

显示绑定错误,分析可知应该是在UserMapper接口和SQL的隐射文件没有结合。
第一时间检查了mapper的namespace属性,确认没有错。
后来查看了target/classes/../mapping并不存在,也就是说mapper.xml文件并没有在编译的时候放进classes中。
那么接口当然绑定不了selectByUserId这个方法。
查资料得知,有两个解决办法:
1.在pom.xml中添加如下代码:

<resources>  <resource>  <directory>src/main/resources</directory>  <includes>  <include>**/*.properties</include>  <include>**/*.xml</include>  </includes>  <filtering>true</filtering>  </resource>  <resource>  <directory>src/main/java</directory>  <includes>  <include>**/*.xml</include>  </includes>  <filtering>true</filtering>  </resource>
</resources>

添加完成后,install仍然报错,查看classes文件,xml文件已经存在,但是却出现了其他问题,jdbc驱动找不到了,唉,无力。
解决不了心里很不舒服啊,花了一下午,终于解决了,将上面的文件修改为:

<resources>  <resource>  <directory>src/main/resources</directory>  </resource>  <resource>  <directory>src/main/java</directory>  <includes>  <include>**/*.xml</include>  </includes>  <filtering>true</filtering>  </resource>
</resources>

意思是maven在编译的时候class文件夹下包含src/main/resources下的文件与src/main/java下的*.properties文件。
上面一个直接指定,会加载不了。

这样处理让我感觉有点别扭。

2.将mapper.xml映射文件放到resources文件夹下。
文件目录如下:

运行就不会报错了,但是我看着还是有点别扭,就是看着不爽,等以后想到好办法之后再换吧。

我就纳了个闷了,maven这样限制xml文件的位置,即没让我觉得美观,也没有感到实用。

转载于:https://blog.51cto.com/zhanghuiyuan/1937067

maven项目编译漏掉src/main/java下的xml配置文件相关推荐

  1. 解决idea中maven项目无法读取src/main/java目录下面的配置文件问题

    解决idea中maven项目无法读取src/main/java目录下面的配置文件问题 参考文章: (1)解决idea中maven项目无法读取src/main/java目录下面的配置文件问题 (2)ht ...

  2. 无法将maven 编译部署src/main/java下的资源文件

    我有一个小项目 之前可以完美的运行 但是现在换到了idea 上面后 跑不起来!然后就各种找原因 他报错 是说找不到 mybties里存放mapping 文件的位置 后来 在同事的帮助下 他在pom.x ...

  3. 在创建maven项目中出现src/main/java 和src/maim/java 报错解决方法

    eclispe在创建maven项目时出现src/main/java 和src/maim/java没有在项目中出现,在通过java Build Path>>source 发现这两个文件有报错 ...

  4. 解决maven打包时漏掉src/main/java资源里的xml的问题

    在整合Spring + Mybatis框架的时候,自动扫描配置都已经配置好了. 配置如下: <context:component-scan base-package="com.yd&q ...

  5. 解决项目无法读取src/main/java目录下面的配置文件问题

    我们在用Mybatis去操作底层数据库的时候,需要用到xml配置文件,一般我们是把它的配置文件和持久层接口与实现类放在同目录下. maven项目的时候,我们可能会遇到无法读取到dao对应的mapper ...

  6. maven web项目不能创建src/main/java等文件夹的问题

    eclipse创建maevn web项目,在选择maven_archetype_webapp原型后,默认只有src/main/resources这个Source Floder.  按照maven目录结 ...

  7. 问题日志:解决使用 Spring initializr 创建 Springboot 项目时,`src\main\java` 文件夹没有变为蓝色的问题

    ​ 解决问题时间:2022-08-21--17:48 一.问题描述: 在使用 Spring initializr 创建过一次项目并且成功之后,再次进行新项目创建时,发现又出现了无法正常创建成功的情况- ...

  8. 在Eclipse中,如何将项目中的src/main/java目录设置为源代码包?

    2019独角兽企业重金招聘Python工程师标准>>> 右键点击工程 -- Properties -- Java Build Path --Source -- Link Source ...

  9. spring mvc学习(23):eclipse创建Maven项目没有src/main/java并不能新建的问题

    eclipse里第一次创建Maven项目时,src/main/java与src/test/java目录都不会出现,这是因为eclipse里的一个默认配置.这两个目录是真实存在的,只是隐藏了. 这时候想 ...

最新文章

  1. numpy中amin()方法中维度axis=0 1 2 的理解
  2. css长图如何展示局部,css可以设置图片以最短边为依据展示在父级中吗?
  3. 弹出键盘windowsoftinputmode属性设置值
  4. java 正则 小数_详解Java判断是否是整数,小数或实数的正则表达式
  5. 【Python可视化】Windows 10系统上Pyecharts安装教程
  6. 百度之后,电子银行还安全么?
  7. Linux虚拟化KVM-Qemu分析(七)之timer虚拟化
  8. ros的插件库 pluginlib 的简介
  9. Atitit 下推自动机﹙PDA﹚说明书 目录 1. 概念组成与原理成分 1 2. 性状 1 3. 适用场景 主治 适应症 1 3.1. 所有场景()。 1 3.2. 语法解析 构建ast 2 3.
  10. 监听程序当前无法识别连接描述符中请求的服务_Linux I/O复用中select poll epoll模型的介绍及其优缺点的比较...
  11. Android 人脸识别,活体检测离线SDK
  12. python条形图的间距_如何减少堆积条形图中条形图之间的间距?
  13. 美国访问学者生活之行-开车租车及停车
  14. 请尊重一个姑娘的努力 (文/杨熹文)
  15. 牺牲一个存储空间的循环队列实现方法
  16. linux aria2 参数,aria2常用命令
  17. 《大数据时代:生活、工作与思维的大变革》读书笔记3(完)
  18. Java工具类库Hutool,GitHub星标15k+
  19. 用Python爬取wallhaven高清原图
  20. 药物与生物大分子的相互关系(分子与药物以及人体关系)

热门文章

  1. Ada 程序设计语言(The Ada Programming Language)[第二集]
  2. java s3 与ceph的关系_Ceph存储与S3对象存储性能优化.pdf
  3. impala连接使用方法
  4. Django 框架入门篇(安装与创建项目)
  5. 题解 UVA1555 【Garland】(二分)
  6. 明明连上了网,但是打不开网页
  7. Struts2升级注意事项
  8. Protobuf 的 proto3 与 proto2 的区别
  9. DeepID2+:Deeply Learned Attributes for Crowded Scene Understanding
  10. 想知道深度学习卷积在GPU上如何优化吗?“大神”赵开勇带你深入浅出