一、本周学习内容
1. MyBatis核心组件与配置
SqlSessionFactory构建:通过SqlSessionFactoryBuilder读取mybatis-config.xml,理解环境配置(environments)与数据源(dataSource)的绑定逻辑。
Mapper接口与XML映射:掌握@Mapper注解与XML中namespace的对应关系,实践parameterType与resultType的动态传参(如#{userId}和${tableName}的区别)。
ResultMap高级映射:使用<association>和<collection>解决一对一、一对多关联查询,实现复杂对象嵌套(如用户信息与订单列表的联表查询)。
2. 动态SQL与灵活查询
OGNL表达式应用:熟练使用<if>、<choose>、<foreach>标签动态拼接SQL(如根据条件查询不同字段)。
分页插件整合:集成PageHelper插件,通过PageHelper.startPage(pageNum, pageSize)实现物理分页,对比逻辑分页的性能差异。
动态更新与批量操作:实践<trim>标签实现INSERT或UPDATE字段的动态裁剪,优化批量插入性能(foreach + ExecutorType.BATCH)。
3. MyBatis与Spring整合
MapperScannerConfigurer:配置@MapperScan自动扫描Mapper接口,结合@Autowired实现依赖注入。
事务管理:通过@Transactional注解控制事务边界,理解MyBatis一级缓存(SqlSession级别)与Spring事务的协同机制。
总结
本周从XML配置到注解驱动,深刻体会到MyBatis“半自动化”ORM的灵活性。它既保留了编写原生SQL的控制力,又通过动态标签和插件机制降低了重复代码量。初期在关联查询与动态SQL拼接上踩坑,但通过调试日志(logImpl=STDOUT_LOGGING)和《MyBatis从入门到精通》快速定位问题。未来计划将MyBatis与之前学习的Spring Cloud结合,探索微服务架构下的高效数据层开发。
核心收获:
SQL与代码解耦:通过XML或注解将SQL独立管理,便于维护和复用。
性能调优手段:动态SQL、分页插件、延迟加载等工具显著提升开发效率。
与Spring的协同:理解SqlSessionTemplate如何保证线程安全,以及事务管理的底层逻辑。