#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 в свой вопрос?