定制化
为满足需求,有时需要自己定制程序。
定制化程序的常见方式:
-
首先需要知道原理
- SpringBoot底层帮我们注册的诸多组件,往往都使用了
@ConditionalOnMissingBean
,即容器中如果没有该组件那么则注册并注入。 - 因此需要定制化则只需要我们自己将需要替换的组件注入IOC容器即可。
- SpringBoot底层帮我们注册的诸多组件,往往都使用了
-
方式
- 修改配置文件
- 编写自定义配置类
- web应用,实现
WebMvcConfigurer
。
@Configuration public class InterceptorConf implements WebMvcConfigurer { @Bean public WebMvcRegistrations webMvcRegistrations(){ return new WebMvcRegistrations() { @Override public RequestMappingHandlerMapping getRequestMappingHandlerMapping() { return null; } }; } }
如果想完全接管SpringMVC则需要加上
@EnableWebMVC
注解。一旦完全接管,则静态资源、欢迎页、视图解析器等自动配置失效。@EnableWebMVC
会导入DelegatingWebMvcConfiguration
,这个配置类中其实也自动配置了一些底层的东西。@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented @Import(DelegatingWebMvcConfiguration.class) public @interface EnableWebMvc { }
WebMvcAutoConfiguration
想要生效,容器中必须没有WebMvcConfigurationSupport
。而DelegatingWebMvcConfiguration
继承于WebMvcConfigurationSupport
,因此WebMvcAutoConfiguration
不会生效。总结:
@EnableWebMVC
导致WebMvcAutoConfiguration
没有生效。
数据库访问
导入JDBC场景
你只需要配置url、driver、username、password
spring:
datasource:
url: jdbc:mysql://localhost:3307/boerk
username: root
password: root123
driver-class-name: com.mysql.jdbc.Driver
谨记:是username不是data-username,是password不是data-password(别问我为什么)。
Mybatis
-
需要引入依赖
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency>
-
需要指定全局配置文件位置和映射文件位置
spring: datasource: url: jdbc:mysql://localhost:3307/boerk username: root password: root123 driver-class-name: com.mysql.jdbc.Driver mybatis: config-location: classpath:mybatis/Mybatis-conf.xml mapper-locations: classpath:mybatis/mapper/*.xml
-
其他按照以往进行书写。
//controller @RequestMapping("/get/{id}") @ResponseBody public User getUserById(@PathVariable("id") int id){ User user = userService.getUserById(id); System.out.println(user); return user; } //service public User getUserById(int id){ return userMapper.getUserById(id); } //mapper User getUserById(int id);
-
提醒:必须给mapper接口标注
@mapper
注解,这样才能被mybatis扫描到。 -
由于全局配置文件中没有写任何东西,以及任何的setting都可以通过
configuration
在配置文件中设置,所有全局配置文件可以不写。且一旦使用configuration
,就不能存在全局配置文件。 -
严格来说是通过
configuration
来指定mybatis的相关配置项。
也可以使用基于注解的方式进行CRUD。
@SELECT("select * from user where uid = #{id}")
User getUserById(int id);
//@Options为当前CRUD标签的配置项。比如resultMap等等。
可以完全摆脱配置文件。当然也可以两种方式都使用。
使用@MapperScan("xx")
可以简化开发,设置mapper扫描路径。