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等的配置即可,只留下我说的那几个,如果还不能理解,看我留下的这个链接吧。打包项目的demo
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 包的mapperxml 的路径需要指定一下:
如下,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包的项目,但是它们对应的表,也是需要导入到新库里,否则查询会报失败的。