Пружинная загрузка: Автоматический картограф не работает

#java #spring #spring-boot #spring-mvc #mybatis

Вопрос:

Я новичок в spring boot и mybatis. Я создаю репо, которое имеет структуру:

 main
    java
        com
           ssm
              controller
                  UserController.java
              mapper
                  UserMapper.java # can generated by mybatis generator
              dao
                  UserDao.java # which extends interface UserMapper
              model
                  User.java
              service
                  UserService.java
                  UserServiceImpl.java
              UserSpringBootApplication.java
                   
    resources
        com
           ssm
              xml
                 UserMapper.xml
                 UserDao.xml
        static
        templates
        application.properties
        mybatis-config.xml
 

В файле UserSpringBootApplication.java его содержимое

 @SpringBootApplication
public class UserSpringBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserSpringBootApplication.class, args);
    }

}
 

В файле UserDao.java :

 @Mapper
public interface UserDao extends UserMapper {


   // example
   @ResultMap("Record")
   @Select("select * from UserTable")
   List<User> getAllRecords();
}
 

В файле UserMapper.java :

 @Mapper
public interface UserMapper
 

В файле application.properties :

 # database config
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test_db
spring.datasource.username=root
spring.datasource.password=xxxxxx

# mybatis
mybatis.config-location=classpath:mybatis-config.xml
 

В файле UserServiceImpl.java я пытаюсь автоматически подключить UserDao. Но при запуске приложения
это выдает мне ошибку: Field UserDao in com.ssm.service.UserServiceImpl required a bean of type 'com.ssm.dao.UserDao' that could not be found.

 @Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;
     
    // ...
}
 
  • Как я могу справиться с этим делом?
  • Что-нибудь не так с настройкой application.properties ?
  • Является ли структура моего репо разумной?

Большое спасибо!

Комментарии:

1. Можете ли вы поделиться своим кодом, вырезанным для UserDao? что он делает?

2. @vaibhavsahu Я добавляю несколько примеров UserDao . Поскольку я генерирую UserMapper.java с помощью mybatis-генератора, я пытаюсь добавить новую функцию sql, с помощью UserDao которой расширяется UserMapper .

Ответ №1:

РЕДАКТИРОВАТЬ: Это только решение для MapStruct , реальное решение в комментариях!

Вы должны использовать @Mapper аннотацию следующим образом:

 @Mapper(componentModel = "spring")
 

Из джавадока:

spring: сгенерированный картограф представляет собой компонент Spring и может быть получен с помощью @Autowired

См.: https://mapstruct.org/documentation/stable/api/org/mapstruct/Mapper.html

Комментарии:

1. Cannot resolve method 'componentModel' . Похоже, для этого нет параметра componentModel Mapper .

2. Извини, я виноват. Я был сбит с толку с помощью MapStruct.

3. Вы добавили mybatis-spring-boot-starter в качестве зависимости?

4. извините, я не добавил mybatis-spring-boot-starter в качестве зависимости. Это работает сейчас!!! Большое спасибо!!! Зачем мне нужна эта зависимость?

5. Вы можете добавить @MapperScan(«ваш.базовый.пакет») в свой класс конфигурации Spring. Но обычно стартер mybatis-spring-boot-starter должен делать это за вас. Можете ли вы добавить конфигурацию зависимостей maven/gradle для spring boot / mybatis в свой вопрос?