springboot基于mybatis扫描jar包中的controller、service、dao、xml
最近有这样的需求,是将某个业务模块接口,比如新闻的接口模块
作为一个公共固定的模块,整个包括controller
、model
、mapper
、mapper .xml
,都通过jar
包的形式引入到其他项目中。
如果能够实现,这样避免了复制粘贴的繁琐,只需要几步配置,以及引入我们提前打包好的新闻模块
jar,将表结构拷到新项目的数据库里,即可调用里边的接口。
1、要引入的项目模块介绍
下边是我要做成 jar
包的小项目,如下:
其实主要就是含有controller
、model
、mapper
、mapper .xml
,即我们调用接口需要的东西。
注意上边的controller
、serviceImpl
里的会有@RestController
、@RequestMapping
、@Service
注解,这些注解都需要引入spring
包才可以,我直接是在pom.xml
里引入了如下的依赖:
<!--controller、service需要的注解--><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.3.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.6.RELEASE</version></dependency><!-- mybatis Mapper里需要它里边的一个注解--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis-spring-boot}</version></dependency><!-- mybatis分页插件依赖 service实现类里用到了 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>4.1.0</version></dependency><!--用到了一个它里边的方法--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version></dependency>
其实要做成的jar
包,去掉关于数据库、mybatis等的配置即可,只留下我说的那几个。
2、打包jar
我在idea
里通过clean install
打包的项目,具体的再将打好的jar
包上传到你们的maven
私服里,就不说了。
3、主项目引入jar需要做的配置
(1)pom里引入打包好的jar
比如下边是我打包好的jar包,并上传到我们的maven私服上的依赖,将它引入到项目里。
<dependency><groupId>znxd.demo</groupId><artifactId>znxd-zlzs-demo</artifactId><version>1.2</version></dependency>
(2)springboot项目中application.properties添加配置
因为引入的jar
包的mapper xml
的路径需要指定一下:
如下,classpath\*
即是配置jar
包里的xml路径。locations
如果指定多个需要用,
分割。
mybatis.mapper-locations=classpath:mapper/*/*Mapper.xml,classpath*:mapper/*/*Mapper.xml
可能有人觉得还需要配置:
mybatis.type-aliases-package=
但是我没有配置这个,竟然也成功了。所以这里不写了
(3)springboot项目启动项加入扫描包位置
如下,znxd.demo
是jar
包中的位置,必须要让spring
扫描到它里边的controller
、service
等等。
另外,znxd.demo.mapper
是jar
包里边的mapper
接口的位置,也是需要添加到MapperScan
注解里边。
@SpringBootApplication
@EnableTransactionManagement
@ComponentScan(basePackages={"znxd.zlzs","znxd.demo"})
@MapperScan(basePackages = {"znxd.zlzs.mapper","znxd.demo.mapper"})
(4)数据库表结构
当然引入了jar
包的项目,但是它们对应的表,也是需要导入到新库里,否则查询会报失败的。