mybatis的<sql>标签使用

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

记录:421

场景:使用MyBatis的<sql></sql>标签元素,把重复的SQL语句集中到<sql>标签,使用标签的id属性指定唯一标识。在<insert><update><delete><select>等标签中使用<include></include>标签引用<sql></sql>标签。

版本: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.使用<sql></sql>标签元素

场景:<sql></sql>标签元素在<mapper>标签元素中定义,使用<include></include>标签引用<sql>标签。

2.1Java接口

@Repository
public interface Label04SqlMapper {
  List<CityLabelPO> queryCity01(CityLabelPO cityPO);
  List<CityLabelPO> queryCity02(CityLabelPO cityPO);
  List<CityLabelPO> queryCity03(CityLabelPO cityPO);
}

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.Label04SqlMapper">
  <sql id="selectSql">
      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
  </sql>
  <select id="queryCity01" resultType="com.hub.example.domain.CityLabelPO">
      <include refid="selectSql"></include>
      WHERE aa.CITY_ID = #{cityId}
  </select>
  <select id="queryCity02" resultType="com.hub.example.domain.CityLabelPO">
      <include refid="selectSql"></include>
      WHERE aa.CITY_NAME = #{cityName}
  </select>
  <select id="queryCity03" resultType="com.hub.example.domain.CityLabelPO">
      <include refid="selectSql"></include>
      <where>
          <if test="cityName !=null and cityName !='' ">
              aa.CITY_NAME = #{cityName}
          </if>
      </where>
  </select>
</mapper>

3.测试

3.1测试代码

@Slf4j
@RestController
@RequestMapping("/hub/example/cityLabel")
public class CityLabelController {
  @Autowired
  private Label04SqlMapper label04SqlMapper;
  @GetMapping("/load04")
  public Object load04() {
    log.info("测试开始...");
    CityLabelPO cityPO = CityLabelPO.builder().cityId(3L).build();
    // 示例一
    List<CityLabelPO> list01 = label04SqlMapper.queryCity01(cityPO);
    // 示例二
    cityPO = CityLabelPO.builder().cityName("上海").build();
    list01 = label04SqlMapper.queryCity02(cityPO);
    // 示例三
    cityPO = CityLabelPO.builder().cityName("杭州").build();
    list01 = label04SqlMapper.queryCity03(cityPO);
    log.info("测试结束...");
    return "执行成功";
  }
}

3.2测试请求

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

3.3执行SQL

示例使用<sql></sql>标签后,根据不同条件组装不同查询的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",
  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_NAME = ?

示例三:

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_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;
}

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-813511.html

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

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

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

相关文章

  • 【MyBatis】四、MyBatis中的动态SQL标签

    动态SQL语句是动态的拼接Mybatis中SQL语句的情况,可以动态的在Mybatis中使用SQL if语句的xml文件: 传入对象来进行调用: where标签中的and会被自动去掉,并且若没有合适的内容,则不会添加where 注意:where标签只能去掉条件前的and、五福去掉条件后的and trim标签会在其内容

    2024年02月09日
    浏览(41)
  • MyBatis:动态 SQL 标签

    MyBatis 动态 SQL 标签 ,是一组预定义的标签,用于构建动态的 SQL 语句,允许在 SQL 语句中使用条件、循环和迭代等逻辑。通过使用动态 SQL 标签,开发者可以根据不同的条件和参数生成不同的 SQL 语句,实现更加灵活的数据访问操作。但是,需要谨慎处理 SQL 注入问题,确保所

    2024年02月04日
    浏览(60)
  • Mybatis是什么?Mybatis中动态sql常用标签有哪些?

    Mybatis是什么? Mybatis是一种开源的Java持久层框架,它可以将SQL语句和Java代码进行分离,使得开发人员可以更加专注于业务逻辑的实现。与Hibernate等ORM框架不同的是,Mybatis使用XML或注解的方式来描述SQL语句,这种方式更加灵活,因此在一些需要高度自定义SQL语句的场景下,

    2024年02月05日
    浏览(43)
  • MyBatis 动态SQL之<where>标签-

    where 标签主要用来简化 SQL 语句中的条件判断,可以自动处理 AND/OR 条件。 在if标签和choose-when-otherwise标签的案例中,SQL语句加入了一个条件’1=1’,它既保证了where后面的条件成,页避免了where后面出现的第一个词语是and 或者or之类的。 假设把条件‘1=1’去掉,可以出

    2024年02月11日
    浏览(49)
  • 数据库操作不再困难,MyBatis动态Sql标签解析

    MyBatis缓存原理 Mybatis的CachingExecutor与二级缓存 Mybatis plugin 的使用及原理 MyBatis四大组件Executor、StatementHandler、ParameterHandler、ResultSetHandler 详解 MyBatis+Springboot 启动到SQL执行全流程 使用MyBatis,或者MyBatis-plus,有一项重要的开发技能就是写动态sql,动态sql能帮我们省略很多复杂逻

    2024年02月12日
    浏览(72)
  • MyBatis 动态SQL之<choose><when><otherwise>标签-

    MyBatis 中动态语句 choose-when-otherwise 类似于 Java 中的 switch-case-default 语句。由于 MyBatis 并没有为 if 提供对应的 else 标签,如果想要达到…… 的效果,可以借助 、、 来实现。 hoose 标签按顺序判断其内部 when 标签中的判断条件是否成立,如果有一个成立,则执行相应的 SQL 语句

    2024年02月09日
    浏览(44)
  • MyBatis的代理开发方式、动态sql语句和typeHandlers和plugins标签实战

    接上篇博客: MyBatis基础知识和快速入门、MyBatis核心配置文件讲解,本文继续讲解MyBatis动态SQL语句、typeHandlers和plugins标签。 传统开发方式 编写UserDao接口 编写UserDaoImpl实现 mapper文件 测试传统方式 代理开发方式 代理开发方式介绍 采用 Mybatis 的代理开发方式实现 DAO 层的开发

    2023年04月27日
    浏览(43)
  • Java Mybatis02+oracle拓展

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

    2024年02月16日
    浏览(37)
  • SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第三天)动态SQL

    昨天我们深入学习了 Mybatis的核心对象SqlSessionFactoryBuilder , 掌握MyBatis核心配置文件以及元素的使用 ,也掌握MyBatis映射文件及其元素的使用。那么今天我们需要掌握的是更加复杂的查询操作。 学会编写MyBatis中动态SQL 学会MyBatis的条件查询操作 学会MyBatis的更新操作 学会MyBati

    2024年02月11日
    浏览(53)
  • 深入解析 MyBatis 中的 <;foreach>; 标签:优雅处理批量操作与动态 SQL

    在当今的Java应用程序开发中,数据库操作是一个不可或缺的部分。MyBatis作为一款颇受欢迎的持久层框架,为我们提供了一种优雅而高效的方式来管理数据库操作。在MyBatis的众多特性中, foreach 标签无疑是一个强大的工具,它使得在SQL语句中进行动态循环迭代变得轻而易举。

    2024年02月13日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包