一. MyBatis映射文件深入(动态sql语句)

Mybatis 的映射文件中,前面我们的 SQL 都是比较简单的,有些时候业务逻辑复杂时,我们的 SQL是动态变化的,此时在前面的学习中我们的 SQL 就不能满足要求了

SSM——MyBatis配置文件深入理解_java

1. 动态 SQL 之< if >

SSM——MyBatis配置文件深入理解_mysql_02
SSM——MyBatis配置文件深入理解_sql_03

  • where标签会知道如果它包含的标签中有返回值的话,它就插入一个‘where’。此外,如果标签返回的内容是以AND 或OR 开头的,则它会剔除掉。

  • 同理,上面的对于查询 SQL 语句包含 where 关键字,如果在进行更新操作的时候,含有 set 关键词也是一样的,注意set是用的逗号隔开
    SSM——MyBatis配置文件深入理解_SQL_04

  • 有时候,我们不想用到所有的查询条件,只想选择其中的一个,查询条件有一个满足即可,使用 choose 标签可以解决此类问题,类似于 Java 的 switch 语句

    <select id="queryBlogChoose" parameterType="map" resultType="blog">
      select * from blog
       <where>
           <choose>
               <when test="title != null">
                    title = #{title}
               </when>
               <when test="author != null">
                  and author = #{author}
               </when>
               <otherwise>
                  and views = #{views}
               </otherwise>
           </choose>
       </where>
    </select>
    

2. 动态 SQL 之< foreach >

SSM——MyBatis配置文件深入理解_System_05
SSM——MyBatis配置文件深入理解_mysql_06
SSM——MyBatis配置文件深入理解_mysql_07

3. SQL片段抽取

Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的SSM——MyBatis配置文件深入理解_System_08

二. MyBatis核心配置文件深入

1. typeHandlers标签

SSM——MyBatis配置文件深入理解_SQL_09
SSM——MyBatis配置文件深入理解_SQL_10
SSM——MyBatis配置文件深入理解_SQL_11
SSM——MyBatis配置文件深入理解_System_12

  • 编写类继承BaseTypeHandler
  • 注册到mybatis核心配置文件,mybatis会自动在核心配置文件中调用类型转换的方法

2. plugins标签

mybatis插件

SSM——MyBatis配置文件深入理解_System_13
SSM——MyBatis配置文件深入理解_mysql_14

<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper</artifactId>
   <version>3.7.5</version>
</dependency>
<dependency>
   <groupId>com.github.jsqlparser</groupId>
   <artifactId>jsqlparser</artifactId>
   <version>0.9.1</version>
</dependency>

SSM——MyBatis配置文件深入理解_mysql_15
SSM——MyBatis配置文件深入理解_SQL_16

SSM——MyBatis配置文件深入理解_java_17
SSM——MyBatis配置文件深入理解_System_18

SSM——MyBatis配置文件深入理解_mysql_19

//获得与分页相关参数
   PageInfo<User> pageInfo = new PageInfo<User>(userList);
   System.out.println("当前页:"+pageInfo.getPageNum());
   System.out.println("每页显示条数:"+pageInfo.getPageSize());
   System.out.println("总条数:"+pageInfo.getTotal());
   System.out.println("总页数:"+pageInfo.getPages());
   System.out.println("上一页:"+pageInfo.getPrePage());
   System.out.println("下一页:"+pageInfo.getNextPage());
   System.out.println("是否是第一个:"+pageInfo.isIsFirstPage());
   System.out.println("是否是最后一个:"+pageInfo.isIsLastPage());