idea 创建的maven+spring+mybatis项目整合 报错无法创建bean

本文记录了一个由Maven构建的Spring+MyBatis+Struts2项目的开发过程中遇到的问题:MyBatis无法正确加载映射XML文件。通过调整POM文件中的资源配置,最终解决了这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 


最近在做一个由maven构建的spring+mybatis+struts2项目,刚开始的时候是用自己的老电脑Win7环境下的eclipse写的,托管到了码云上面,刚开始什么问题都没有

 

直到某一天在公司的时候无聊想继续写这个项目,于是就把这个项目clone了一份在公司用的电脑上,在公司用的是mac+idea,结果问题就来了,clone下来的代码居然不能运行!!!,各种看着一脸懵逼的报错信息(idea的tomcat运行日志文件很不好找,找了好久)辛辛苦苦弄了一周左右,期间经历了把项目删了又建,然后自己搭环境等各种坑爹的环节,一开始报错信息千奇百怪,在弄了这么久之后大概就稳定成了如下的样子:

 

rk.beans.factory.BeanCreationException: Error creating bean with name 'userService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.scpchome.dao.UserDao com.scpchome.service.impl.UserServiceImpl.userDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.scpchome.dao.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Related cause: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao' defined in file [/Users/kep/Documents/apache-tomcat-7.0.70/webapps/ROOT/WEB-INF/classes/com/scpchome/dao/UserDao.class]: Cannot resolve reference to bean 'sqlSessionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in file [/Users/kep/Documents/apache-tomcat-7.0.70/webapps/ROOT/WEB-INF/classes/applicationContext-mybatis.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.core.io.Resource[]' for property 'mapperLocations'; nested exception is java.lang.IllegalArgumentException: Could not resolve resource location pattern [classpath:com/scpchome/dao/mapping/*.xml]: class path resource [com/scpchome/dao/mapping/] cannot be resolved to URL because it does not exist

 

一直是不能创建bean的样子,经过一行一行地阅读报错信息。。最后发现mybatis的映射xml文件居然没有找到,然后又去翻classes目录,结果果然没有,知道具体的错误就好办了,随后百度了一发在pom文件中加入了如下代码,困扰了一周的问题成功解决

 

 

<build>
   

      <resources>
        <!--编译之后包含xml-->
        <resource>
          <directory>src/main/java</directory>
          <includes>
            <include>**/*.xml</include>
          </includes>
          <filtering>true</filtering>
        </resource>
      </resources>

  </build>

 

 

 

 

 

 

<think>我们被要求创建一个集成MavenSpringMVC和MyBatis-Plus的项目。参考站内引用,我们得知MyBatis-Plus需要配置插件(引用[2])、配置文件(引用[3])以及可能遇到的XML文件位置问题(引用[4])。我们将按步骤创建项目。步骤1:创建Maven项目1.打开IntelliJIDEA,选择“File”->“New”->“Project”。2.在左侧选择“Maven”,在右侧勾选“Createfromarchetype”,然后选择“maven-archetype-webapp”,点击“Next”。3.填写GroupId(例如:com.example)、ArtifactId(例如:demo)、Version,点击“Next”。4.配置Maven,点击“Next”,然后输入项目名和位置,点击“Finish”。步骤2:配置pom.xml添加SpringMVC、MyBatis-Plus和其他依赖。```xml<project>...<properties><spring.version>5.3.18</spring.version><mybatis-plus.version>3.5.1</mybatis-plus.version><mysql.version>8.0.28</mysql.version><jackson.version>2.13.2</jackson.version></properties><dependencies><!--SpringMVC--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><!--SpringJDBC(用于事务)--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><!--ServletAPI--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><!--MyBatis-Plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency><!--MySQL驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!--JacksonforJSON--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><!--其他可能需要的依赖--></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><!--配置Tomcat插件(可选)--><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port><path>/</path></configuration></plugin></plugins></build></project>```步骤3:配置web.xml在`src/main/webapp/WEB-INF`目录下创建`web.xml`,配置Spring的DispatcherServlet。```xml<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-context.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>```步骤4:创建Spring配置文件在`src/main/resources`目录下创建:1.`spring-context.xml`(Spring上下文配置,包括MyBatis-Plus)2.`spring-mvc.xml`(SpringMVC配置)spring-context.xml:```xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"><!--扫描除了Controller之外的组件--><context:component-scanbase-package="com.example"><context:exclude-filtertype="annotation"expression="org.springframework.stereotype.Controller"/></context:component-scan><!--数据源配置(参考引用[3])--><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><propertyname="driverClassName"value="com.mysql.cj.jdbc.Driver"/><propertyname="url"value="jdbc:mysql://localhost:3306/test?allowPublicKeyRetrieval=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8"/><propertyname="username"value="root"/><propertyname="password"value="123456"/></bean><!--MyBatis-Plus的SqlSessionFactory--><beanid="sqlSessionFactory"class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean"><propertyname="dataSource"ref="dataSource"/><!--如果需要,配置Mapper.xml位置(引用[4])--><propertyname="mapperLocations"value="classpath*:/mapper/*.xml"/><!--配置MyBatis-Plus全局配置(可选)--><propertyname="globalConfig"ref="globalConfig"/></bean><!--MyBatis-Plus全局配置--><beanid="globalConfig"class="com.baomidou.mybatisplus.core.config.GlobalConfig"><propertyname="dbConfig"><beanclass="com.baomidou.mybatisplus.core.config.GlobalConfig$DbConfig"><!--主键生成策略(参考引用[1],如果有自定义生成器)--><propertyname="idType"value="ASSIGN_ID"/></bean></property></bean><!--配置扫描Mapper接口--><beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"><propertyname="basePackage"value="com.example.mapper"/></bean><!--事务管理器--><beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"/></bean><!--启用事务注解--><tx:annotation-driventransaction-manager="transactionManager"/></beans>```spring-mvc.xml:```xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttps://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--扫描Controller--><context:component-scanbase-package="com.example.controller"use-default-filters="false"><context:include-filtertype="annotation"expression="org.springframework.stereotype.Controller"/></context:component-scan><!--配置视图解析器--><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="prefix"value="/WEB-INF/views/"/><propertyname="suffix"value=".jsp"/></bean><!--启用MVC注解驱动--><mvc:annotation-driven/><!--静态资源处理--><mvc:default-servlet-handler/></beans>```步骤5:配置MyBatis-Plus(可选,如自定义ID生成器)根据引用[1],我们可以配置自定义ID生成器,创建一个配置类(注意:如果使用Spring的XML配置,可以不用Java配置类):```javapackagecom.example.config;importcom.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassMybatisPlusConfig{@BeanpublicIdentifierGeneratorcustomIdGenerator(){returnnewCustomIdGenerator();}}```步骤6:创建包结构和测试创建以下包:-`com.example.controller`-`com.example.mapper`-`com.example.entity`-`com.example.service`然后,创建一个实体类(例如User),Mapper接口(使用MyBatis-Plus的BaseMapper),Service和Controller。步骤7:配置日志(参考引用[3])在`src/main/resources`下创建`application.properties`(或使用Spring的XML配置,但引用[3]中的属性配置可以放在Spring配置文件中)。我们可以将MyBatis-Plus的日志配置在`spring-context.xml`中通过`sqlSessionFactory`的属性设置,或者使用属性文件。这里我们在`spring-context.xml`的`sqlSessionFactory`中已经配置了`globalConfig`,但日志实现可以通过单独的属性设置(如引用[3]中的`mybatis-plus.configuration.log-impl`)。我们可以在`spring-context.xml`中配置:```xml<!--在sqlSessionFactory内部配置configuration属性--><beanid="sqlSessionFactory"class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">...<propertyname="configuration"><beanclass="org.apache.ibatis.session.Configuration"><propertyname="logImpl"value="org.apache.ibatis.logging.stdout.StdOutImpl"/></bean></property></bean>```步骤8:运行和测试使用Tomcat运行(通过Maventomcat7插件,或配置本地Tomcat服务器)。注意:如果遇到XML文件位置问题,参考引用[4]将XML文件放在`resources`目录下,并在`spring-context.xml`中正确指定`mapperLocations`。§§相关问题§§1.如何解决MyBatis-Plus在IDEA中找不到Mapper接口的问题?2.SpringMVC集成MyBatis-Plus时事务如何配置?3.IDEA中如何使用MyBatis-Plus的代码生成器?</think> ### 在 IntelliJ IDEA创建集成 MavenSpring MVC 和 MyBatis-Plus 项目的教程 #### 步骤 1:创建 Maven 项目 1. **打开 IDEA** → **File** → **New** → **Project** 2. 左侧选择 **Maven** → 勾选 **Create from archetype** → 选择 **maven-archetype-webapp** 3. 输入项目信息: - `GroupId`:例如 `com.example` - `ArtifactId`:例如 `demo-project` 4. 完成创建,等待依赖加载完成[^2] #### 步骤 2:配置 pom.xml 依赖 ```xml <dependencies> <!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.18</version> </dependency> <!-- MyBatis-Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.2</version> </dependency> <!-- JDBC 连接 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> <!-- Servlet API --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> </dependencies> ``` #### 步骤 3:配置 Spring MVC 1. 创建 `web.xml`: ```xml <web-app> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> ``` 2. 创建 `spring-servlet.xml`: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="..."> <context:component-scan base-package="com.example.controller"/> <mvc:annotation-driven/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> </beans> ``` #### 步骤 4:配置 MyBatis-Plus 1. 创建数据源配置文件 `application.properties`: ```properties # 数据库配置 [^3] spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123456 # MyBatis-Plus 配置 mybatis-plus.mapper-locations=classpath:mapper/*.xml mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl ``` 2. 创建 Java 配置类 `MybatisConfig.java`: ```java @Configuration @MapperScan("com.example.mapper") public class MybatisConfig { @Bean public MybatisSqlSessionFactoryBean sqlSessionFactory( DataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean(); factory.setDataSource(dataSource); return factory; } } ``` #### 步骤 5:目录结构 ``` src ├── main │ ├── java │ │ └── com/example │ │ ├── controller │ │ ├── entity │ │ ├── mapper │ │ └── MybatisConfig.java │ ├── resources │ │ ├── application.properties │ │ └── mapper │ └── webapp │ ├── WEB-INF │ │ ├── views │ │ ├── spring-servlet.xml │ │ └── web.xml ``` #### 步骤 6:运行测试 1. 添加 Tomcat 服务器配置 2. 创建测试 Controller: ```java @RestController public class TestController { @GetMapping("/test") public String test() { return "集成成功!"; } } ``` 3. 访问 `http://localhost:8080/test` 验证结果[^4] #### 常见问题解决 1. **XML 文件无法加载**:确认 `mapper-locations` 路径配置正确,XML 文件放在 `resources/mapper/` 目录下[^4] 2. **插件支持**:安装 MyBatis-Plus 插件增强代码生成功能(File → Settings → Plugins)[^2] 3. **ID 生成器**:自定义 ID 生成器需实现 `IdentifierGenerator` 接口并注册 Bean[^1]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值