多模块工程应该这样使用mybatisplus

时间:2024-03-23 09:54:40

多模块工程应该这样使用mybatisplus

​ 如果公司会经常创建项目,但是想将一些公共的功能抽取出来,封装成jar放到私服。其他项目需要使用时直接去引用,这样可以避免很多问题。例如:不写重复业务逻辑,项目更新是只需要更新一套源码,所有项目即可更新。员工看不到完整的源码,包好源码安全等等问题。经过大企业的员工都知道,很多大企业都是这样搞的,但是这样搞会比较耗费时间,但是可以理解的。

​ 如果在多个工程中实现这样的功能,我们会面临着在父工程中操作数据库的业务吧,会遇到对象如何注入spring容器的问题吧。当你遇到这些问题的时候,一定要将问题解决在问题出处,千万不要留给下面的开发人员。如果你把问题留下来,如果面对的开发人员是个新手该怎么办,这样会让新员工去看的你开发文档,是一件不乐观的事情。所以开发父工程的时候,关于配置的全部给默认值,下面的开发人员可以根据需求配置,不配置也没问题,只有这样才会给开发人员减轻技术压力。

​ 废话不多说,直接上码,咋们码上说话。呵呵,那是不可能的,开会两小时,撸码五分钟。

多模块工程应该这样使用mybatisplus

​ 在我们写springboot应用是,都会在启动类上打上 @SpringBootApplication这个注解。需要注意:这个注解只能扫描当前包及其子包,那么我们写的是一个父工程,明显这个注解是扫描不到的,这就意味着程序中 @Service@Component这种注解就不能扫描到,对象就不能注入spring容器了。我们该怎么办呢?

​ 在 @SpringBootApplication注解上面的 @ComponentScan注解是干嘛的,该注解标识的类, 会被 Spring 自动扫描并且装入bean容器。他是可以直接指定包扫描的把,那么我们是不是可以直接在启动类上添加这个注解,指定父工程的包路径呢?你指定的父工程是扫描到了,没问题了。但是当前工程出问题了,自动配置失效了。你还需要指定当前工程的扫描包。这显然不是一个好的解决方法,我们要求是不把问题留给后面的开发人员嘛。

多模块工程应该这样使用mybatisplus

​ 问题出现在哪里,我们就在哪里把问题解决,并要留给后面的人。

​ 既然面临的问题是父工程扫描不到,那么我们就在父工程中创建一个配置文件,在这个配置文件上使用 @ComponentScan注解指定包扫描。多模块工程应该这样使用mybatisplus这就就可以将该工程的@Service@Component这些注解表示的类注入spring容器了。这个配置文件是写好了,spring怎么加载呢?spring怎么知道我们这个是配置文件,需要加载呢?在该工程的 resources/META-INF/spring.factories文件中指定配置文件,这样配置文件才会生效。

​ 另外还可以手动注入的方式,在配置文件上使用 @Configuration注解,手动将对象注入spring容器,如果对象很多,建议使用包扫描。当然了,我们采用这用方式手动注入,就没有必要再需要注入的对象上写@Service@Component这些注解了。

多模块工程应该这样使用mybatisplus

父工程中使用mybatisplus,其他的不在多说,直接参考mybatisplus-spring-boot的配置。这里需要注意的是mapper接口,平时我们都直接在mapper接口上打 @Mapper注解,或者在配置文件上使用 @MapperScan扫描 mapper接口。但是很开心的告诉你,这里使用 @Mapper注解是不行的,必须使用 @MapperScan扫描。这个注解直接在刚才创建的配置文件上写上就行,没有必要再去创建一个配置文件了。

多模块工程应该这样使用mybatisplus

综上所述,在父工程中用springboot结合MP一起使用时,需要注意两天,1、对象注入spring容器的问题,2、mapper接口扫描的问题。对象注入spring容器可以选中手动注入,也可以自动注入。mapper接口只能使用 @MapperScan注解扫描mapper包,使用 @Mapper是没有效果的。

多模块工程应该这样使用mybatisplus