mybatis的<choose>标签使用

这篇具有很好参考价值的文章主要介绍了mybatis的<choose>标签使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

记录:418

场景:使用MyBatis的<choose></choose>标签的<when></when>标签的test属性,对入参属性的值做非null(!=null)、非空(!='')判断,或者与常量做相等(==)或者不等判断(!=)。

版本:JDK 1.8,Spring Boot 2.6.3,mybatis-3.5.9。

1.基础知识

1.1MyBatis的标签

(1)查看MyBatis支持的标签

地址:http://mybatis.org/dtd/mybatis-3-mapper.dtd

(2)查看标签使用

以<mapper></mapper>标签元素为例,在mybatis-3-mapper.dtd中如下:

<!ELEMENT mapper (cache-ref | cache | resultMap* | parameterMap* | sql* | insert* | update* | delete* | select* )+>
<!ATTLIST mapper
namespace CDATA #IMPLIED
>

<!ELEMENT mapper(...)+>,表示这是一个标签元素mapper.

(..| insert*| update* | delete* | select*),表示在mapper元素中可以嵌套使用的元素清单。

<!ATTLIST mapper>,表示这是一个元素标签的支持的属性。

1.2MyBatis的使用

(1)在application.yml配置文件配置mybatis映射的xml文件位置。

mybatis:
  mapper-locations: classpath*:mapper/**/*.xml

(2)创建一个Java接口。在接口中添加方法。

(3)创建一个Java接口映射的xml文件。在xml中使用<mapper></mapper>标签的namespace属性指定Java接口的全路径。Java接口和xml映射文件就完成了绑定关系。

(4)在<mapper></mapper>标签内,使用<insert><update><delete><select>等标签的id属性指定Java的方法名称。Java接口的方法和xml映射文件的<mapper></mapper>内部的标签就完成了绑定关系。

2.使用<choose></choose>标签元素

场景:<choose></choose>标签元素在<insert><update><delete><select>等标签元素内使用。

一般组合:<choose><when></when><otherwise></otherwise></choose>

一般组合:<choose><when></when><when></when></choose>

示例功能:示例使用<choose></choose>标签,根据不同条件组装不同查询的SQL。

2.1Java接口

@Repository
public interface Label02ChooseMapper {
  List<CityLabelPO> queryCity(CityLabelDTO cityLabelDTO);
}

2.2Java接口映射的xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hub.example.mapper.Label02ChooseMapper">
  <select id="queryCity" parameterType="com.hub.example.domain.CityLabelDTO"
        resultType="com.hub.example.domain.CityLabelPO">
    select CITY_ID AS "cityId",
    <choose>
        <when test="flagColumn !=null and flagColumn !='' and flagColumn == '01' ">
            CITY_NAME AS "cityName",
            LAND_AREA AS "landArea",
            POPULATION AS "population",
            GROSS AS "gross",
            CITY_DESCRIBE AS "cityDescribe",
            DATA_YEAR AS "dataYear",
            UPDATE_TIME AS "updateTime"
        </when>
        <when test="flagColumn !=null and flagColumn !='' and flagColumn == '02' ">
            CITY_NAME AS "cityName",
            LAND_AREA AS "landArea"
        </when>
        <otherwise>
            CITY_NAME AS "cityName",
            LAND_AREA AS "landArea",
            POPULATION AS "population",
            GROSS AS "gross"
        </otherwise>
    </choose>
    from
    <choose>
        <when test="flagFrom !=null and flagFrom !='' and flagFrom == '01' ">
            t_city
        </when>
        <otherwise>
            t_city_01
        </otherwise>
    </choose>
    aa
    where
    <choose>
        <when test="cityId !=null and cityId !='' and flagWhere == '01' ">
            aa.CITY_ID = #{cityId}
        </when>
        <when test="cityName !=null and cityName !='' and flagWhere == '02' ">
            aa.CITY_NAME = #{cityName}
        </when>
    </choose>
  </select>
</mapper>

3.测试

3.1测试代码

@Slf4j
@RestController
@RequestMapping("/hub/example/cityLabel")
public class CityLabelController {
  @Autowired
  private Label02ChooseMapper label02ChooseMapper;
  @GetMapping("/load02")
  public Object load02() {
    log.info("测试开始...");
    // 示例一
    CityLabelDTO labelDTO = CityLabelDTO.builder()
            .cityId(1L).flagColumn("01")
            .flagFrom("01").flagWhere("01").build();
    List<CityLabelPO> labelPOList = label02ChooseMapper.queryCity(labelDTO);
    // 示例二
    labelDTO = CityLabelDTO.builder()
            .cityName("上海").flagColumn("02")
            .flagFrom("02").flagWhere("02").build();
    labelPOList = label02ChooseMapper.queryCity(labelDTO);
    log.info("测试结束...");
    return "执行成功";
  }
}

3.2测试请求

URL:http://127.0.0.1:18080/hub-example/hub/example/cityLabel/load02

3.3执行SQL

示例使用<choose></choose>标签后,根据不同条件组装不同查询的SQL,适配不同业务场景。

示例一:

SELECT
  CITY_ID AS "cityId",
  CITY_NAME AS "cityName",
  LAND_AREA AS "landArea",
  POPULATION AS "population",
  GROSS AS "gross",
  CITY_DESCRIBE AS "cityDescribe",
  DATA_YEAR AS "dataYear",
  UPDATE_TIME AS "updateTime"
FROM
  t_city aa
WHERE aa.CITY_ID = ?;

示例二:

SELECT
  CITY_ID AS "cityId",
  CITY_NAME AS "cityName",
  LAND_AREA AS "landArea"
FROM
  t_city_01 aa
WHERE aa.CITY_NAME = ?;

4.支撑

4.1实体对象

(1)封装结果对象CityLabelPO

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CityLabelPO {
  private Long cityId;
  private String cityName;
  private Double landArea;
  private Long population;
  private Double gross;
  private String cityDescribe;
  private String dataYear;
  private Date updateTime;
}

(2)封装参数CityLabelDTO

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CityLabelDTO {
  private Long cityId;
  private String cityName;
  private Double landArea;
  private Long population;
  private Double gross;
  private String cityDescribe;
  private String dataYear;
  private Date updateTime;
  // 标记查询的字段
  private String flagColumn;
  // 标记查询的表
  private String flagFrom;
  // 标记where条件
  private String flagWhere;
}

4.2建表语句

CREATE TABLE t_city (
  CITY_ID BIGINT(16) NOT NULL COMMENT '唯一标识',
  CITY_NAME VARCHAR(64) COLLATE utf8_bin NOT NULL COMMENT '城市名',
  LAND_AREA DOUBLE DEFAULT NULL COMMENT '城市面积',
  POPULATION BIGINT(16) DEFAULT NULL COMMENT '城市人口',
  GROSS DOUBLE DEFAULT NULL COMMENT '生产总值',
  CITY_DESCRIBE VARCHAR(512) COLLATE utf8_bin DEFAULT NULL COMMENT '城市描述',
  DATA_YEAR VARCHAR(16) COLLATE utf8_bin DEFAULT NULL COMMENT '数据年份',
  UPDATE_TIME DATETIME DEFAULT NULL COMMENT '更新时间'
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='城市信息表';

以上,感谢。

2023年4月23日文章来源地址https://www.toymoban.com/news/detail-714210.html

到了这里,关于mybatis的<choose>标签使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot中间件—ORM(Mybatis)框架实现

    目录 定义 需求背景 方案设计 代码展示 UML图  实现细节 测试验证  总结 源码地址(已开源) :https://gitee.com/sizhaohe/mini-mybatis.git  跟着源码及下述UML图来理解上手会更快, 拒绝浮躁,沉下心来搞         ORM:Object Relational Mapping  --  对象关系映射,是一种程序设计技术,

    2024年02月16日
    浏览(33)
  • mybatis使用xml中的if-else/choose

    最近需要使用 xml 文件来实现一些增删改查,此文对 其中的 if-else 加以说明 背景: 有一个引用类,假设叫 Student 现在我们查询条件也被封装成一个引用类,例如: 那么使用 xml 怎么来使用和接收呢? 首先肯定是在 mapper 里面有一个方法 然后在 xml 文件中写这个方法的具体实

    2024年04月23日
    浏览(38)
  • Java Mybatis02+oracle拓展

    Mybatis 02 Oracle 拓展 1.Mybatis 02 创建数据库和表 创建工程 实体类 util工具类 接口方法 Resource Mapper xml 文件 配置文件 测试 加入模糊查询(根据姓名) 测试结果 2.ParameterType语法 实战 参数为对象 参数为集合 结果 注解标识 3.增删改语法 增加第一种方式 增加第二种方式 删除 删除

    2024年02月16日
    浏览(36)
  • Mybatis 常用条件语句,大于小于、if、for、模糊搜索、case when、choose

    目录 大于小于 if 条件判断  for循环 LIKE 模糊搜索 case when choose选择语句 前言-与正文无关         生活远不止眼前的苦劳与奔波,它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中,我们往往容易陷入工作的漩涡,忘记了停下脚步,感受周围的世

    2024年02月01日
    浏览(74)
  • mybatis的<sql>标签使用

    记录 :421 场景 :使用MyBatis的sql/sql标签元素,把重复的SQL语句集中到sql标签,使用标签的id属性指定唯一标识。在insertupdatedeleteselect等标签中使用include/include标签引用sql/sql标签。 版本 :JDK 1.8,Spring Boot 2.6.3,mybatis-3.5.9。 1.基础知识 1.1MyBatis的标签 (1)查看MyBatis支持的标签 地址

    2024年01月22日
    浏览(39)
  • mybatis的<foreach>标签使用

    记录 :419 场景 :使用MyBatis的foreach/foreach标签的循环遍历List类型的入参。使用collection属性指定List,item指定List中存放的对象,separator指定分割符号,open指定开始字符,close指定结束字符。 版本 :JDK 1.8,Spring Boot 2.6.3,mybatis-3.5.9。 1.基础知识 1.1MyBatis的标签 (1)查看MyBatis支持的

    2023年04月24日
    浏览(41)
  • mybatis trim标签使用详解

    mybatis的trim标签一般用于去除sql语句中多余的and,逗号,或者给sql语句前拼接 “where“、“set“以及“values(“ 等前缀,或者添加“)“等后缀,可用于选择性插入、更新、删除或者条件查询等操作。 以下是trim标签中涉及到的属性: prefix=添加前缀 suffix=添加后缀 prefix

    2024年02月06日
    浏览(45)
  • Mybatis手动配置ORM,不用自动ORM等操作

    目录 一、解决mapper.xml存放在resources以外路径中的读取问题 二、模糊查询 三、主键回填 插入之后:(主键是自增的) 插入之前: 四、MyBatis自动ORM失效  结果映射(ResultMap - 查询结果的封装规则): 或者起别名:在SQL中使用 as 为查询字段添加列别名,以匹配属性名。 五、

    2023年04月18日
    浏览(68)
  • Mybatis中where标签和if标签结合使用说明

    由于不小心将 and 或者 or 写在了语句后面,导致mybatis无法自主判别,这种问题在新上手的同学中很是常见。下面我们探讨一下,在哪些情况下Mybatis无法判断动态SQL语句中的 and 或者 or 。 select筛选出视图对象的参数,用于给前端返回页面参数使用。 以下代码格式是正确,我们

    2023年04月08日
    浏览(36)
  • MyBatis 动态SQL的标签有哪些?如何使用?

    目录 1. MyBatis 动态SQL标签有什么用? 2. if 标签 3. where 标签 4. trim 标签 5. choose,when,otherwise 6. foreach 1. MyBatis 动态SQL标签有什么用? 我来说一个场景大家就明白了,如下图,大家应该在铁路12306上买过火车票吧,可以看到,我们在选票的时候可以对车做很多种选择和筛选,系

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包