Java
未读
Stream Api
这是一篇 Java 8 Stream API概述 的文章,介绍了Stream API的基本概念、特征和操作。Stream是一种用于处理数据源元素的队列,支持聚合操作,可以通过中间操作(如filter、map、distinct等)和终止操作(如findFirst、count、reduce等)来处理数据。与传统的集合操作不同,Stream支持管道式操作(Pipelining)和内部迭代(Internal Iteration),并且可以通过串行流和并行流进行优化。文章详细介绍了Stream的生成、常用的中间和终止操作,以及如何利用Stream API进行高效的数据处理。
Java
未读
Mybatis 工作原理
这是一篇 MyBatis概述 的文章,介绍了MyBatis框架的基本概念、工作原理和主要成员。MyBatis是一个用于简化数据库操作的持久层框架,它通过自定义SQL、存储过程和高级映射,帮助程序员专注于SQL编写而无需关注底层JDBC操作。文章详细讲解了MyBatis的核心组件,如Configuration、SqlSession、Executor、StatementHandler等,以及它们在数据库操作中的作用。工作流程上,MyBatis通过配置文件生成SqlSessionFactory,然后通过SqlSession执行SQL语句,进行参数处理和结果集映射,最终返回操作结果。
Java
未读
Mybatis XML标签
这是一篇 MyBatis中XML标签 的文章,介绍了MyBatis中常用的XML标签及其作用。文章首先介绍了<mapper>标签作为MyBatis XML文件的根标签,用于定义命名空间和包含SQL语句。然后,分别讲解了<insert>、<update>、<delete>、<select>等标签的作用,用于执行数据库的增、删、改、查操作。此外,<resultMap>用于映射数据库字段与对象属性,<sql>用于定义可重用的SQL片段,<include>可以引入SQL片段,<if>、<choose>、<when>、<otherwise>用于动态生成SQL,<trim>、<where>、<set>用于处理SQL片段的动态部分。<foreach>支持集合迭代,<cache>和<cache-ref>用于配置缓存,<selectKey>用于获取生成的主键值。
Java
未读
SpringBoot集成Mybatis
这是一篇 Spring Boot与MyBatis集成配置 的文章,介绍了如何在Spring Boot项目中集成MyBatis进行数据库操作。文章首先讲解了在pom.xml文件中添加必要的依赖,包括Spring Boot Starter、MyBatis Starter和MySQL Connector。接着,说明了如何在application.properties中配置数据库连接信息。然后,介绍了如何通过MyMetaObjectHandler实现MyBatis的自动填充功能,处理插入和更新操作的时间字段。接下来,配置了MyBatis的SqlSessionFactory和Mapper接口扫描,创建了Mapper接口用于数据库操作方法的定义。最后,展示了如何在实体类中通过@TableField注解配置自动填充字段,完成整个配置过程以便在Spring Boot项目中使用MyBatis进行数据库操作。
Java
未读
Mybatis 执行器
这是一篇 MyBatis Executor执行器 的文章,介绍了MyBatis中三种基本的Executor执行器。SimpleExecutor每次执行SQL时都会创建并关闭Statement对象;ReuseExecutor通过SQL作为key复用Statement对象,避免每次都创建新的Statement;BatchExecutor则将多个SQL语句批量执行,适用于JDBC批处理操作。文章还提到了一种特殊的Executor——CachingExecutor,它为其他Executor增加了二级缓存功能,通过查询缓存来优化性能,常与Redis等第三方存储结合使用。文章最后指出,Executor的选择应根据SqlSession生命周期和具体的应用场景来决定,特别是ReuseExecutor和BatchExecutor需要手动管理Statement对象。
Java
未读
Spring MVC拦截器
这是一篇关于Spring MVC拦截器的文章,介绍了拦截器的作用、与过滤器的区别、以及如何实现和注册自定义拦截器。Spring MVC的拦截器用于拦截请求并进行预处理和后处理,拦截器通过实现HandlerInterceptor接口来定义三个方法:preHandle(在处理器方法执行前调用)、postHandle(在处理器方法执行后调用)、和afterCompletion(在请求完成后调用)。与过滤器不同,拦截器基于Spring的AOP思想,能够访问IOC容器中的Bean,适用于控制器方法,不能用于静态资源。拦截器的执行顺序与注册顺序一致,可以通过配置类将自定义拦截器注册到Spring MVC中,指定拦截路径和排除路径。
Java
未读
Mybatis 缓存机制
这是一篇关于MyBatis一级缓存和二级缓存的文章,介绍了两者的工作原理、生命周期和配置方式。MyBatis默认开启一级缓存,一级缓存只在同一个SqlSession对象内有效,查询结果会被缓存并在同一会话内重复使用,直到会话结束或缓存被清空。一级缓存的清空操作包括SqlSession的close()、clearCache()方法调用以及执行update、delete、insert操作。二级缓存是跨SqlSession的应用级缓存,默认不开启,需要在映射文件中配置<cache/>来启用。二级缓存使用LRU算法来回收缓存,存储的数据可以是POJO对象,且要求实现Serializable接口,支持缓存的数据包括查询结果,而insert、update、delete操作会刷新缓存。
Java
未读
Spring MVC过滤器
这是一篇关于Java过滤器(Filter)的文章,介绍了过滤器的原理、作用以及在Spring Boot中的使用方法。过滤器是Java Servlet规范的一部分,允许开发者在请求到达目标资源之前和响应离开应用程序之前对其进行处理。它可以用于身份验证、请求参数处理、日志记录、性能优化和防止恶意攻击等场景。过滤器的执行顺序包括过滤前、拦截前、AOP、Controller、AOP、拦截后和过滤后。文章还通过一个Spring Boot实战案例,演示了如何创建和配置自定义过滤器,使用@WebFilter注解配置过滤器,并通过@ServletComponentScan启用Servlet组件的自动扫描。
Java
未读
Spring 生命周期
这是一篇关于Spring Bean生命周期的文章,概述了Bean的生命周期流程,并详细介绍了各个扩展点的作用。Spring Bean的生命周期主要包括四个阶段:实例化、属性赋值、初始化和销毁。实例化阶段创建Bean对象,属性赋值阶段为Bean设置属性和依赖,初始化阶段包括多个步骤,其中涉及到Aware接口依赖注入、BeanPostProcessor的前后处理、以及InitializingBean和init-method的初始化操作。销毁阶段则包括注册销毁回调接口,通过DisposableBean和destroy-method进行Bean的销毁。通过这四个大阶段以及具体的初始化和销毁操作,帮助理解Spring Bean的生命周期。
Java
未读
Spring MVC
这是一篇关于SpringMVC框架作用的文章,概述了框架的核心组件和运行流程。SpringMVC框架是基于请求驱动设计的,核心类是DispatcherServlet,它负责接收请求并分发到对应的控制器。主要组件包括DispatcherServlet(接收请求并分发)、HandlerMapping(映射请求与处理方法)、Controller(处理请求并返回响应)、ModelAndView(封装数据与视图信息)、ViewResolver(解析视图组件)。运行流程中,客户端请求先到DispatcherServlet,经过HandlerMapping解析到对应的Controller,由HandlerAdapter处理请求逻辑,返回ModelAndView对象,最终通过ViewResolver找到具体视图,并将结果返回给客户端。
Java
未读
Spring IOC、DI
这是一篇关于IOC和DI的文章,介绍了Spring框架中的控制反转(IoC)和依赖注入(DI)概念。在传统开发中,A类需要主动创建B类的对象,而Spring通过IoC将对象的创建和管理交给Spring容器,避免了硬编码耦合。DI是Spring实现IoC的方式之一,它通过setter或构造器注入将B对象传递给A类,实现依赖关系的解耦。IOC和DI相互关联,DI依赖于IoC来完成。Spring中的IoC操作包括通过XML配置和注解两种方式来管理Bean,常见注解有@Component、@Service、@Repository和@Controller等。此外,Spring提供了@Value、@Autowired、@Qualifier和@Resource等注解进行依赖注入,支持自动装配和按名称或类型装配,生命周期管理可通过@PostConstruct和@PreDestroy注解来完成,Bean的作用域可以通过@Scope注解来定义。
Java
未读
Spring AOP
这是一篇关于AOP(面向切面编程)的文章,介绍了AOP的基本概念、通知类型和应用场景。AOP通过预编译和动态代理实现统一的程序功能管理。主要概念包括切面(Aspect)、连接点(JointPoint)、通知(Advice)、切入点(Pointcut)和AOP代理。Spring AOP通过JDK动态代理和CGLIB代理生成代理对象,并结合IOC容器管理。AOP的通知类型有Before、AfterReturning、AfterThrowing、After、Around等,执行顺序为Around -> Before -> After -> AfterReturning。AOP的应用场景包括日志、权限控制、事务管理、缓存等。Spring AOP基于注解实现“零配置”,通过@Aspect和@Component等注解定义切面及通知方法。