Mybatis
-
XML开发
-
需要mybatis整体的配置文件,一般命名为mybatis-config.xml
-
在整体配置文件中配置mybatis的环境信息如数据源和事务管理器和mapper映射器等等
-
<mappers><mapper resource="mapper/UserMapper.xml"/> </mappers>
-
-
编写mapper接口,单独编写对应接口的xml的文件,该文件中存储SQL
-
使用XML开发需要读取整体配置文件信息,并获取相应的接口
-
public void setUp() throws Exception {// 加载 MyBatis 配置文件String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);}
-
-
-
注解开发---(可以纯注解)
-
一般mybatis中的注解开发也需要整体配置的xml文件
-
在整体xml配置文件中配置mapper的映射器
-
<mappers><mapper class="com.example.mapper.UserMapper"/> </mappers>
-
-
编写mapper接口,接口上不需要添加注解,直接在接口方法中使用相应的注解编写SQL语句
-
读取XML配置信息,并获取相应的接口
-
public void setUp() throws Exception {// 加载 MyBatis 配置文件String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);}
-
-
Spring容器
-
XML开发
-
需要spring容器的整体配置文件,通常使用
applicationContext.xml
作为默认的Spring配置文件名称 -
在该配置文件中编写bean代码即可
-
XML开发需要读取整体配置文件获取Spring容器
-
public void testSpring() {// 加载 Spring 配置文件ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");// 获取 BeanUserService userService = (UserService) context.getBean("userService");
-
-
注解开发
-
注解开发不需要xml配置文件
-
需要一个配置类,使用
@Configuration
注解标记一个类为配置类@Configuration
的作用:
- 标记配置类。
- 启用代理模式,确保
@Bean
方法是单例的。 - 支持
@Import
和@ComponentScan
。
- 不加
@Configuration
的问题:@Bean
方法可能不是单例。- 不支持
@Bean
方法之间的依赖注入。
-
-
在这个配置类中配置扫描的包路径
-
@Configuration @ComponentScan(basePackages = "com.example") // 指定扫描的包 public class AppConfig { }
-
获取Spring容器时加载该配置类即可
-
public class MainApp {public static void main(String[] args) {// 加载配置类,初始化 Spring 容器ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);// 从容器中获取 BeanUserService userService = context.getBean(UserService.class);// 使用 BeanuserService.doSomething();} }
-
Tomcat
- XML开发
- tomcat项目为web应用,一个web应用下存在web.xml文件
- 在web.xml文件中配置servlet或者过滤器的全部信息,包括映射路径等等
- 使用时启动tomcat服务器即可,不需要手动加载web.xml文件
- 注解开发
- 不在web.xml中配置servlet或者过滤器的信息,而直接在类上加注解实现
@WebServlet
注解定义 Servlet,@WebFilter
注解定义 Filter。- 不需要额外的扫描配置,直接使用注解定义完类启动tomcat服务器即可
SpringMVC
-
XML开发
-
需要在web.xml文件中配置DispatcherServlet
-
DispatcherServlet中需要使用初始化参数,来配置Spring容器配置文件的路径
-
<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-mvc-config.xml</param-value></init-param><load-on-startup>1</load-on-startup> </servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern> </servlet-mapping>
-
-
需要在Spring配置文件中配置扫描包的路径以及开启mvc注解驱动
-
<!-- 启用组件扫描,扫描控制器 --> <context:component-scan base-package="com.example.controller" /><!-- 启用注解驱动 --> <mvc:annotation-driven />
-
-
使用注解配置访问路径等信息后启动tomcat服务器即可
-
-
注解开发
-
编写一个类继承AbstractAnnotationConfigDispatcherServletInitializer,该类会被tomcat自动扫描并加载为DispatcherServlet
-
实现该继承类中的方法来指定Spring容器配置类的的class文件
-
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {// 配置根应用上下文(非 Web 相关的 Bean,如服务层、数据层)//这个就是配置Spring容器,指定为配置Spring容器的配置类即可@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class<?>[] { RootConfig.class };}// 配置 Web 应用上下文(Web 相关的 Bean,如控制器(Controller)、视图解析器等)@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class<?>[] { WebConfig.class };}// 配置 DispatcherServlet 的映射路径@Overrideprotected String[] getServletMappings() {return new String[] { "/" };} }
-
-
编写Spring的配置类,配置包扫描信息和开启mvc注解驱动即可
-
可以二合一只配置Spring容器配置文件作为RootConfigClasses
-
这个Spring配置类需要实现WebMvcConfigurer接口,该接口中提供了许多方法用来自定义SpringMVC的行为,比如配置视图解析器、添加拦截器等等
-
@Configuration @EnableWebMvc @ComponentScan(basePackages = "com.example.controller") public class WebConfig implements WebMvcConfigurer {// 配置视图解析器@Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");return resolver;}// 配置静态资源处理@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/static/**").addResourceLocations("/static/");}// 配置拦截器(可选)@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new CustomInterceptor());} }
-
-
最好还是分开进行配置,getRootConfigClasses方法里写Spring容器的配置类,getServletConfigClasses方法里写web相关的配置类
-
Spring容器配置类
-
@Configuration @ComponentScan(basePackages = {"server"}) public class SpringConfig {@Beanpublic User returnBean(){return new User();} }
-
web相关的配置类
-
@Configuration @EnableWebMvc @ComponentScan(basePackages = {"controller"}) public class WebConfig implements WebMvcConfigurer {@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable(); // 启用 DefaultServlet}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new UserInterceptor()).order(1).addPathPatterns("/**");}}
-
-