最近设计系统架构,需要把项目功能子模块化,框架使用Spring Cloud、Spring Boot,在子模块化的时候遇到DAO层分离的问题,比较复杂难解,另外一个就是maven打包的问题,但是相对好解决一点。
首先创建一个子模块(DAO),配置好并且可以启动,然后再创建一个子模块(API),API再maven中继承了DAO模块,配置application.yml文件之后会出现错误:
Invalid bound statement not found xxxx.xxMapper.selectByxxx()
原因有两个:配置的问题、xml放置位置的问题。
- 配置
* POM文件加入: <dependency> <groupId>com.test</groupId> <artifactId>dao</artifactId> <version>1.0</version> <scope>compile</scope> </dependency> * build栏目加入: <resource> <directory>src/main/resources</directory> <includes> <include>**/*.*</include> </includes> <filtering>false</filtering> </resource> * 使用注解扫描mapper包 @MapperScan(value = "com.test.mapper.repository.mapper") * 配置项(application.yml): spring: application: name: api-server profiles: active: test thymeleaf: cache: false prefix: classpath: /templates datasource: driver-class-name: com.mysql.cj.jdbc.Driver type: org.apache.commons.dbcp2.BasicDataSource url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&characterEncoding=utf-8 username: root password: root dbcp2: initial-size: 5 max-idle: 100 min-idle: 5 max-wait-millis: 3000 test-on-borrow: true test-on-return: false test-while-idle: true validation-query: SELECT 1 time-between-eviction-runs-millis: 30000 soft-min-evictable-idle-time-millis: 1800000 num-tests-per-eviction-run: 3 remove-abandoned-timeout: 180 pool-prepared-statements: true max-open-prepared-statements: 15 mybatis: type-aliases-package: com.test.mapper.repository type-handlers-package: com.test.mapper.repository.mapper configuration: map-underscore-to-camel-case: true default-fetch-size: 100 default-statement-timeout: 30 mapper-locations: classpath*:mapper/*.xml * 最后测试
- xml位置
位置的问题就是xml需要放置在src/main/resources目录下,我之前是一直放在src/main/java/com/test/repository/src/main/resources目录下,所以一直都是失败的。
配置还需要注意的是:
mapper-locations: classpath*:mapper/*.xml