Mybatis3 学习笔记

这个老师讲得很好,推荐学习。 

02.SSM-mybatis-快速入门(上)_哔哩哔哩_bilibili

基础篇

第一章 mybatis-config.xml

<properties ...>

<setting ...>

<typeAliases ...>

<typeHandler ..>

<objectFactory>

<plugins>

<environments>

<mapper>

MyBatis 3 | 配置 – mybatis

第二章 mapper.xml

2.1 一般查询

<select>

        parameterType

                简单类型

                POJO

                Map

                离散类型         @Param

        resultType

                简单类型

                POJO        

                Map

                List        元素类型

        resultMap

                <id         property         column />

                <result    property        column />        autoMapping

                <association    property        javaType>        对一关联

                <collection         property        ofType>          对多关联

                分步查询        延迟加载
</select>

2.2 存储过程执行

<select statementType="CALLABLE" parameterType="map">

      {     call procedure_name(

                #{propertyName, mode=IN, jdbcType=VARCHAR},

                #{propertyName, mode=OUT, jdbcType=INTEGER}

              )

        }

</select>

注意检查 procedure name必须与数据库一致。

2.3 插入/更新/删除

<insert/update/delete>

        useGeneratedKeys         property

        selectKey        before/after property

</insert/update/delete>

MyBatis 3 | XML 映射器 – mybatis

第三章 动态SQL

<if test=""> 条件满足时输出

</if>

<choose>  按照优先级次序多选一

        <when test="">

        </when>

        <otherwise>

        </otherwise>

</choose>

<foreach collection index item open seperator close> map时index做key

</foreach>

<trim prefix suffix prefixOverrides suffixOverrides>
</trim>

trim 标签是 MyBatis 动态 SQL 中的一个强大工具,用于动态拼接 SQL 语句,特别是在处理条件查询、更新操作时非常有用。以下是 trim 标签的详细解析和图解:

1. trim 标签的属性

trim 标签有四个主要属性:

  • prefix:在生成的 SQL 语句前添加指定的内容。

  • suffix:在生成的 SQL 语句后添加指定的内容。

  • prefixOverrides:去除生成的 SQL 语句前不需要的内容。

  • suffixOverrides:去除生成的 SQL 语句后不需要的内容。

2. 使用场景

trim 标签通常用于以下场景:

  • 条件查询:动态生成 WHERE 子句。

  • 更新操作:动态生成 SET 子句。

  • 插入操作:动态生成 INSERT INTO (...) VALUES (...) 语句。

MyBatis 3 | 动态 SQL – mybatis

进阶篇

第四章 插件开发和分页插件

4.1 自定义插件

1)扩展点位置 (type,method, args)

MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • ParameterHandler (getParameterObject, setParameters)
  • ResultSetHandler (handleResultSets, handleOutputParameters)
  • StatementHandler (prepare, parameterize, batch, update, query)

2) 实现Interceptor接口定义

// ExamplePlugin.java
@Intercepts({@Signature(
  type= Executor.class,
  method = "update",
  args = {MappedStatement.class,Object.class})})
public class ExamplePlugin implements Interceptor {
  private Properties properties = new Properties();

  @Override
  public Object intercept(Invocation invocation) throws Throwable {
    // implement pre processing if need
    Object returnObject = invocation.proceed();
    // implement post processing if need
    return returnObject;
  }

  @Override
  public void setProperties(Properties properties) {
    this.properties = properties;
  }
}

4.2 PageHelper插件使用

Mybatis-PageHelper/wikis/zh/HowToUse.md at master · pagehelper/Mybatis-PageHelper

1)mybatis-config.xml中引入插件配置

<plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <property name="helperDialect" value="mysql"/>
        </plugin>
    </plugins>

2)第一种用法PageHelper.startPage

 @Test
    public void testList() {
        PageHelper.startPage(2, 2);
        List<User> userList = userMapper.list();
        PageInfo<User> pageInfo = new PageInfo<>(userList);
        System.out.println(pageInfo);
    }

PageHelper.startPage方法,把pageNum/pageSize存储在ThreadLocal对象中,通常情况下时线程安全的。

2)使用参数方式

想要使用参数方式,需要配置 supportMethodsArguments 参数为 true,同时要配置 params 参数。 例如下面的配置:

<plugins>
    <!-- com.github.pagehelper为PageHelper类所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
        <property name="supportMethodsArguments" value="true"/>
        <property name="params" value="pageNum=pageNumKey;pageSize=pageSizeKey;"/>
	</plugin>
</plugins>

在 MyBatis 方法中:

List<User> selectByPageNumSize(
@Param("user") User user,
@Param("pageNumKey") int pageNum,
@Param("pageSizeKey") int pageSize);

当调用这个方法时,由于同时发现了 pageNumKey 和 pageSizeKey 参数,这个方法就会被分页。params 提供的几个参数都可以这样使用。

除了上面这种方式外,如果 User 对象中包含这两个参数值,也可以有下面的方法:

List<User> selectByPageNumSize(User user);

当从 User 中同时发现了 pageNumKey 和 pageSizeKey 参数,这个方法就会被分页。

注意:pageNum 和 pageSize 两个属性同时存在才会触发分页操作,在这个前提下,其他的分页参数才会生效。

第五章 Mybatis cache

5.1  一级缓存和二级缓存

+-------------------+
|   MyBatis 应用    |
+-------------------+
          |
          v
+-------------------+
|   SqlSession      |  <---- 一级缓存(Session 级别缓存)
+-------------------+
          |
          v
+-------------------+
|   Mapper          |  <---- 二级缓存(Mapper 级别缓存)
+-------------------+

一级缓存(Session 级别缓存)

  • 作用范围:一级缓存是 SqlSession 级别的缓存,仅在当前 SqlSession 的生命周期内有效。

  • 存储位置:存储在 SqlSession 的内存中。

  • 特点

    • 自动管理:MyBatis 自动维护一级缓存,无需手动配置。

    • 生命周期:与 SqlSession 的生命周期一致,SqlSession 关闭后,一级缓存失效。

    • 作用:减少对数据库的访问次数,提高查询效率。

二级缓存(Mapper 级别缓存)

  • 作用范围:二级缓存是 Mapper 级别的缓存,作用于整个应用级别,多个 SqlSession 可以共享二级缓存。

  • 存储位置:存储在 Cache 接口的实现类中,可以是内存缓存、文件缓存或其他存储方式。

  • 特点

    • 需要手动配置:需要在 Mapper 文件中配置 <cache> 标签。

    • 生命周期:与应用的生命周期一致,应用关闭后,二级缓存失效。

    • 作用:进一步减少对数据库的访问次数,提高查询效率,适用于多用户共享的场景

Mybatis 一/二级缓存关系及访问顺序-优快云博客

5.2 二级cache启用条件

1)需要Cache的对象实现过java.io.Serializable接口。

2)需要在 Mapper 文件中配置 <cache> 标签。

3)需要sqlSession执行过commit()  操作。

参考文献:

尚硅谷 Mybatis3 学习视频:

02.SSM-mybatis-快速入门(上)_哔哩哔哩_bilibili

老师总结的学习笔记:

Typora-Study-Notes/MyBatis/01-MyBatis简介.md at master · JunXing-Tech/Typora-Study-Notes

Mybatis 3 官方材料:

MyBatis 3 | 简介 – mybatis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值