Java

首页 标签 Java
# Java #
关注
262739内容
@Configuration
`@Configuration` 注解用于标记配置类,相当于 XML 配置文件,可定义 Bean 并被 Spring 容器管理。配合 `@Bean` 注解注册实例,通过注解方式启动容器,自动加载配置类及其中的 Bean。
汇总
本文汇总MyBatis核心配置与使用要点,涵盖配置加载优先级、多环境配置、事务管理、XML映射(一对一、一对多、多对多)、分页策略(逻辑与物理分页对比)、缓存机制、执行器类型及批量操作源码分析,助力高效开发。
映射关系(1-1 1-n n-n)
MyBatis中通过resultMap实现映射关系:一对一(id、result)、一对多(collection)、多对一(association)、多对多(借助中间类)。解决属性与字段不一致问题,支持复杂对象关联,如用户-角色、博客-作者、部门-用户等场景,灵活构建嵌套结果。
实战演练
本项目基于SpringDataMongoDB实现头条文章评论功能,涵盖增删改查、按文章ID查询、分页查询及点赞优化。通过MongoTemplate提升点赞效率,避免全字段更新,结合索引优化查询性能,构建高效稳定的评论微服务。
Java泛型类型擦除以及类型擦除带来的问题
Java泛型在编译时会进行类型擦除,所有泛型信息被移除,替换为原始类型(如Object或限定类型)。例如,List<String>和List<Integer>在运行时均为List,导致反射可绕过泛型限制。类型检查发生在编译期,针对引用而非对象本身。擦除后通过桥方法解决多态冲突,自动插入类型转换,但不支持基本类型、静态成员不能使用类级泛型参数,且instanceof无法用于泛型类型判断。
One Trick Per Day
初始化Map建议用Guava指定预期大小,避免扩容;禁用Executors创建线程池,防止OOM,应手动通过ThreadPoolExecutor或Guava方式创建;Arrays.asList返回不可变集合,禁止修改操作;遍历Map优先使用entrySet或forEach提升性能;SimpleDateFormat非线程安全,建议用ThreadLocal或JDK8新时间API;并发修改记录需加锁,推荐乐观锁配合version机制。
分页
本文介绍了五种分页实现方式:MyBatis自带的RowBounds内存分页、PageHelper插件分页、SQL原生分页、数组分页及拦截器分页。对比了逻辑分页与物理分页的优劣,指出大数据量下应优先选用物理分页以降低内存开销,提升性能。
MyBatis
本文介绍MyBatis常见配置,包括属性加载优先级(方法参数 > resource/url > properties)、核心设置如缓存、延迟加载、主键生成等,以及多环境配置与事务管理(JDBC/MANAGED),适用于多数据源场景,结合Spring时无需额外配置事务管理器。
整合Logback
整合Logback实现滚动记录与多文件输出,按日志类型分类存储(如INFO、ERROR、SQL等),通过logback-spring.xml配置多appender,结合Logger命名空间精确控制输出。Java示例展示如何使用LogProxy获取指定日志文件的Logger实例,实现精细化日志管理,提升系统可维护性与排查效率。(238字)
不定参数入参
支持非JSON和JSON两种入参方式:非JSON通过@RequestParam或@RequestBody接收基础类型参数;JSON入参可使用JSONObject接收单个或多个参数,或通过@RequestBody封装对象接收并支持@Valid校验,提升代码规范性与可维护性。(239字)
免费试用