ghblk 2024-05-17 21:40 采纳率: 85.7%
浏览 3
已结题

(标签-spring|关键词-Mapper)

使用springboot时遇到一个问题,

img

img


这为什么会报错?
我明明使用了@Mapper和@Autowired

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-17 21:40
    关注

    引自免费微信小程序:皆我百晓生

    看起来你正在尝试使用Spring Boot、MyBatis以及注解驱动的方式来配置一个简单的用户服务。然而,你在启动应用时遇到了错误,提示找不到UserMapper的bean。这个问题通常是由于MyBatis的相关配置没有正确设置导致的。

    首先,确保你已经在Spring Boot项目的pom.xml文件中添加了MyBatis的相关依赖。如果你还没有添加,可以加入以下依赖:

    <dependencies>
        <!-- ... -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>
        <!-- If you are using MySQL -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- ... -->
    </dependencies>
    

    接下来,你需要在src/main/resources目录下创建一个名为mybatis-config.xml的配置文件,并且在这个文件中启用自动扫描mapper接口:

    <?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>
        <mappers>
            <mapper resource="org/example/myfirstproject/mapper/UserMapper.xml"/>
        </mappers>
    </configuration>
    

    然后,在UserMapper.java中,你需要包含MyBatis的@Mapper注解,并且创建对应的XML映射文件(例如:UserMapper.xml),将SQL语句放在XML文件中:

    package org.example.myfirstproject.mapper;
    
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.session.SqlSession;
    import org.example.myfirstproject.model.User;
    
    @Mapper
    public interface UserMapper {
        @Insert("INSERT INTO myfirstproject.userinfo(username, password) VALUES (#{userName}, #{password})")
        void insert(User user);
    }
    

    创建一个对应的UserMapper.xml文件:

    <mapper namespace="org.example.myfirstproject.mapper.UserMapper">
        <insert id="insert" parameterType="com.example.myfirstproject.model.User">
            INSERT INTO myfirstproject.userinfo(username, password) VALUES (#{userName}, #{password})
        </insert>
    </mapper>
    

    现在回到UserServiceImpl.java,删除@Autowired private UserMapper userMapper;这一行,因为Spring Boot会根据@Mapper注解自动扫描并注入UserMapper到你的服务类中。确保你的register()方法接收的是User对象,而不是用户名和密码字符串:

    package org.example.myfirstproject.service.impl;
    
    import org.example.myfirstproject.model.User;
    import org.example.myfirstproject.mapper.UserMapper;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserServiceImpl implements UserService {
    
        // No need for @Autowired here as Spring Boot will automatically inject it
        private final UserMapper userMapper;
    
        public UserServiceImpl(UserMapper userMapper) {
            this.userMapper = userMapper;
        }
    
        @Override
        public void register(User user){
            userMapper.insert(user);
        }
    }
    

    确保你的User.java类有一个构造函数,以便Spring可以实例化它:

    package org.example.myfirstproject.model;
    
    public class User {
        private String userName;
        private String password;
    
        public User(String userName, String password) {
            this.userName = userName;
            this.password = password;
        }
    
        // getters and setters...
    }
    

    现在,你的应用应该能正常启动并且不会抛出找不到UserMapper的异常了。记得检查数据库连接是否配置正确,这样才能成功插入数据。如果还有其他问题,可能需要检查Spring Boot的其他配置,例如DataSource、JdbcTemplate或Druid等。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月1日
  • 已采纳回答 5月24日
  • 创建了问题 5月17日

悬赏问题

  • ¥15 工价表引用工艺路线,应如何制作py和xml文件
  • ¥15 根据历史数据,推荐问题类型
  • ¥15 需要仿真图,简单的二阶系统实例
  • ¥15 stm32光控照明仿真
  • ¥15 使用人工智能的方法生成满足一定统计参数要求的随机数序列
  • ¥15 SENT协议中相关问题咨询
  • ¥15 URL地址href跳转问题
  • ¥15 mysql数据库备份恢复
  • ¥15 mmdetection mask-rcnn
  • ¥25 matlab可以将微分方程的解显示为相图形式吗