Mybatis的trim标签的使用

前言:

Mybatis 中 Mapper 的 Trim 标签的目的是对其中的 sql 进行一定的格式化处理,使我们的同一个 sql 能满足多种情况

Trim标签中的属性:

  1. prefix : 在 trim 标签中生成的 sql 前面添加一个字符。

  2. suffix: 在 trim 标签中生成的 sql 后面添加一个字符。

  3. prefixOverrides: 在 trim 标签中生成的 sql 前面移除一个指定的字符。

  4. suffixOverrides : 在 trim 标签中生成的 sql 后面移除一个指定的字符。

实例表结构:

CREATE TABLE `tb_class` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `class_name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `class_address` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=68 DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC;

实例1:

  1. insert 语句将 ClassInfo 中不为空的数据进行保存,Mapper :

        INSERT INTO tb_class
        
            
                class_name,
            
            
                class_address,
            
        
        values
        
            
                #{className, jdbcType=VARCHAR},
            
            
                #{classAddress, jdbcType=VARCHAR},
            
        
    

生成的sql 语句:

INSERT INTO tb_class ( class_name, class_address ) values ( ?, ? ) 

解释:
xml 中共有两个 trim, 通过 prefix 和 suffix 在 sql 的开始和结束的地方 加入 “(” 和 “)”, 配合 suffixOverrides 将 sql 结束位置吧 “,” 去除,避免报错,使得该条 insert 可以适用多种情况下的保存功能。

实例1:

  1. 在查询语句中利用 prefixOverrides 的功能,形成多种条件下的 sql 查询:

生成的sql 语句:

select id, class_name, class_address from tb_class where class_name = ? and class_address = ?

解释:
trim 标签通过 prefixOverrides 移除掉了 sql 开始的 “and” 字符串,对于其中 className 和 classAddress 属性,我们传入任意组合情况下都不会报错。

End !

你可能感兴趣的:(#,Mybatis)