Files
springboot-scaffold/target/classes/com/example/scaffold/learning/MyBatisLearningController.class

31 lines
5.8 KiB
Plaintext
Raw Normal View History

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>=MyBatis0半自动 ORM 框架SQL 与 Java 对象映射 核心组件SqlSessionFactory
创建 SqlSession 的工厂 
SqlSession执行 SQL 的会话Mapper接口绑定的 SQL 语句 ConfigurationMyBatis 配置信息   java/util/Mapof<00>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;缓存  一级缓存" SqlSession 级别,默认开启$ 二级缓存&)Mapper 级别,需配置 @CacheNamespace ( )Y(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map; + ,}(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;.优点0SQL 灵活可控2性能优化方便4复杂查询友好 678 9java/util/ListH(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;;缺点=SQL 与代码耦合?数据库迁移成本高A需要手写 SQLC 适用场景E1复杂查询、性能要求高、DBA 参与项目G JPA/HibernateI 面向对象K数据库无关M开发效率高O复杂查询困难Q性能调优复杂S学习曲线陡U/标准 CRUD、快速开发、领域驱动设计W建议Y:小型项目用 JPA大型/复杂查询项目用 MyBatis[if]>条件判断 <if test='name != null'> AND name = #{name} </if>_choose/when/otherwisea类似 switch-casectrim/where/sete处理 SQL 拼接gforeachiS循环遍历 <foreach item='item' collection='list' separator=','>#{item}</foreach>kbindm=定义变量 <bind name='pattern' value="'%' + name + '%'" />o示例q<00><select id='findUser'>
SELECT * FROM users
<where>
<if test='name != null'>AND name LIKE #{name}</if>
<if test='email != null'>AND email = #{email}</if>
</where>
</select>
s t<00>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;v范围xSqlSession 级别z默认|开启~ 失效条件<00>执行 insert/update/delete<00>调用 sqlSession.clearCache()<00>事务提交/回滚<00>演示<00>F同一 SqlSession 内连续两次相同查询,第二次不执行 SQL<00> Mapper 级别<00>配置<00>@CacheNamespace 或 XML 配置<00>注意<00>"实体类需要实现 Serializable<00> 本项目<00> UserMapper 已启用二级缓存<00> 验证方式<00>9查看控制台 SQL 日志,缓存命中时不打印 SQL <00><00><00> <00><00>7com/example/scaffold/learning/MyBatisLearningControllersqlSessionFactory-Lorg/apache/ibatis/session/SqlSessionFactory; <00><00><00> <00><00>+org/apache/ibatis/session/SqlSessionFactorygetConfiguration+()Lorg/apache/ibatis/session/Configuration;<00> cacheEnabled
<00><00><00> <00><00>'org/apache/ibatis/session/ConfigurationisCacheEnabled()Z
<00><00><00> <00><00>java/lang/BooleanvalueOf(Z)Ljava/lang/Boolean;<00>localCacheScope
<00><00> <00><00>getLocalCacheScope-()Lorg/apache/ibatis/session/LocalCacheScope;
<00><00><00> <00><00>)org/apache/ibatis/session/LocalCacheScopename()Ljava/lang/String;<00>defaultExecutorType
<00><00> <00><00>getDefaultExecutorType*()Lorg/apache/ibatis/session/ExecutorType;
<00><00><00>&org/apache/ibatis/session/ExecutorType<00>mapUnderscoreToCamelCase
<00><00> <00><00>isMapUnderscoreToCamelCase<00>mappedStatements
<00><00> <00><00>getMappedStatements()Ljava/util/Collection; <00><00><00> <00><00>java/util/Collectionsize()I
<00><00><00> <00><00>java/lang/Integer(I)Ljava/lang/Integer; <00> <00><00>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;
<00><00><00> <00><00>java/lang/Object<init>()V
<00><00><00> <00><00>org/slf4j/LoggerFactory getLogger%(Ljava/lang/Class;)Lorg/slf4j/Logger; <00><00> <00><00>logLorg/slf4j/Logger;concepts()Ljava/util/Map;CodeLineNumberTableLocalVariableTablethis9Lcom/example/scaffold/learning/MyBatisLearningController; Signature7()Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;RuntimeVisibleAnnotations4Lorg/springframework/web/bind/annotation/GetMapping;value /conceptsvsJpa/vs-jpa
dynamicSql /dynamic-sql cacheDemo/cache getConfigconfig)Lorg/apache/ibatis/session/Configuration;/config0(Lorg/apache/ibatis/session/SqlSessionFactory;)VMethodParameters<clinit>
SourceFileMyBatisLearningController.java8Lorg/springframework/web/bind/annotation/RestController;8Lorg/springframework/web/bind/annotation/RequestMapping;/api/learning/mybatis!<00><00><00><00><00><00><00><00><00>` *   <15>!#%<25>'<27>*<2A><00> "#(& <00> *<00><00><00><00><00><00><00>[s<00><00><00><00> F-/13<>5:<>@<40>5BD<>*F-HJL<>5:NPR<>5BT<>*VX<>*<2A><00>"4
675);4<;:B4<00> F<00><00><00><00><00><00><00>[s<00><00>F Z\^`bdfhjlnp<>r<><00>H<00> <00><00><00><00><00><00><00>[s<00><00>s 9uwy{}<12><12><>5<12><12><>#u<12><12><12><12><12><12><12><><12><12><>*<2A><00>_c`.f5_<00> 9<00><00><00><00><00><00><00>[s<00><00><00>
@*<2A><00><><00>L<12>+<2B><00><><00><12>+<2B><00><><00><12>+<2B>ö<00><12>+<2B≯<00><12>+<2B>ѹ<00><00>۸<00><><00>"u
w xyz({1|<w<00>@<00><00>
6<00><00><00><00><00>[s <00>
<00>>
*<2A><00>*+<2B><00><><00><00>
<00><00>
<00><00> <00> <00><00>! <12><><00><><00><><00> <00><00>[s