首页 > 数据库 >在MyBatis中,可以使用以下动态SQL标签来编写灵活的SQL语句

在MyBatis中,可以使用以下动态SQL标签来编写灵活的SQL语句

时间:2024-04-14 12:45:18浏览次数:24  
标签:语句 username 示例 user SQL MyBatis email SELECT

一、<if>:条件判断标签,用于在SQL语句中添加条件判断。通过判断给定的条件是否成立,决定是否包含相应的SQL片段。示例:

<select id="getUserList" resultType="User">
  SELECT * FROM user
  <where>
    <if test="username != null">
      AND username = #{username}
    </if>
    <if test="email != null">
      AND email = #{email}
    </if>
  </where>
</select>

二、<where>:用于拼接WHERE子句,自动处理WHERE关键字和多个条件之间的连接关系(AND或OR)。示例:

<select id="getUserList" resultType="User">
  SELECT * FROM user
  <where>
    <if test="username != null">
      AND username = #{username}
    </if>
    <if test="email != null">
      AND email = #{email}
    </if>
  </where>
</select>

 

三、<set>:用于拼接UPDATE语句的SET子句,自动处理SET关键字和多个字段更新。示例:

<update id="updateUser" parameterType="User">
  UPDATE user
  <set>
    <if test="username != null">
      username = #{username},
    </if>
    <if test="password != null">
      password = #{password},
    </if>
    <if test="email != null">
      email = #{email}   #注意最后这里不能有 逗号
    </if>
  </set>
  WHERE id = #{id}
</update>

四、<trim>:用于自定义SQL语句片段的修剪,可以去除开头或结尾的特定字符。常用于处理动态拼接的SQL语句中的逗号、AND、OR等问题。示例:

<select id="getUserList" resultType="User">
  SELECT * FROM user
  <trim prefix="WHERE" prefixOverrides="AND |OR ">
    <if test="username != null">
      AND username = #{username}
    </if>
    <if test="email != null">
      AND email = #{email}
    </if>
  </trim>
</select>

五、<foreach>:用于遍历集合并拼接对应的SQL语句片段,常用于IN语句的参数拼接。示例:

<select id="getUserListByIds" resultType="User">
  SELECT * FROM user
  WHERE id IN
  <foreach collection="ids" item="id" separator="," open="(" close=")">
    #{id}
  </foreach>
</select>

六、<choose>:类似于Java中的switch语句,根据条件选择执行不同的分支。可以与<when>和<otherwise>配合使用。示例:

<select id="getUserList" resultType="User">
  SELECT * FROM user
  <where>
    <choose>
      <when test="username != null">
        AND username = #{username}
      </when>
      <when test="email != null">
        AND email = #{email}
      </when>
      <otherwise>
        AND status = 1
      </otherwise>
    </choose>
  </where>
</select>

除了上述提到外,MyBatis还提供了其他一些有用的标签,如:

七、<sql>:定义可重用的SQL片段,在需要的地方可以通过<include>标签引入。示例:

<sql id="userColumns">
  username, password, email
</sql>
 
<select id="getUserList" resultType="User">
  SELECT <include refid="userColumns"/> FROM user
</select>

八、<include>:用于引入之前定义的可重用SQL片段。示例:

<select id="getUserList" resultType="User">
  SELECT *
  FROM user
  WHERE id IN
  <include refid="userIdList"/>
</select>
 
<sql id="userIdList">
  <foreach collection="ids" item="id" separator="," open="(" close=")">
    #{id}
  </foreach>
</sql>

九、<bind>:用于将一个表达式的结果绑定到一个变量上,便于在后续的SQL语句中使用。示例:

<select id="getUserList" resultType="User">
  <bind name="namePattern" value="'%'+username+'%'"/>
  SELECT * FROM user
  WHERE username LIKE #{namePattern}
</select>

 

十、<resultMap>:定义查询结果与对象属性之间的映射关系,可以进行高级的结果映射配置。示例:

<resultMap id="userResultMap" type="User">
  <id property="id" column="user_id"/>
  <result property="username" column="user_name"/>
  <result property="email" column="user_email"/>
</resultMap>
 
<select id="getUserList" resultMap="userResultMap">
  SELECT user_id, user_name, user_email
  FROM user
</select>

这些是MyBatis中的一些常用动态SQL标签,可以根据具体需求选择合适的标签来编写动态和灵活的SQL语句。使用这些标签可以提高SQL的可读性、可维护性和重用性。


原文链接:https://blog.csdn.net/Lwehne/article/details/132494566

 

标签:语句,username,示例,user,SQL,MyBatis,email,SELECT
From: https://www.cnblogs.com/isme-zjh/p/18134004

相关文章

  • java: 无法访问org.mybatis.spring.annotation.MapperScan、类文件具有错误的版本 61.
    使用的Mybatis-spring依赖的版本3.0.1太高,将版本改为2.2.2<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><depende......
  • MySQL 函数
    汇总函数rolluprollup是SQL关键字,在MySQL中得用withrollup。它是groupby子句的扩展,用于统计后增加一行汇总数据。举例,现有库存表,我们按仓库名称分组,统计每个仓库的产品总量,最后来一个汇总。mysql>SELECT*FROMinventory;+----+---------------+---------+----------......
  • 在centos7下面,安装mysql,并设置 用户名为henry
    好的,以下是在CentOS7下安装MySQL并完成你所要求的操作的详细步骤:1.**安装MySQL**:首先,使用`yum`包管理器安装MySQL:sudoyuminstallmysql-server 2.**启动MySQL服务**:安装完成后,启动MySQL服务:sudosystemctlstartmysqld 3.**设置MySQL开机自启......
  • mysql部署MGB
    基础环境node0:192.168.110.50 -->master节点node1:192.168.110.60node2:192.168.110.70MySQL版本->MySQL8.0.36在每台电脑上配置host名cat>/etc/hosts<<-'EOF'192.168.31.230n0192.168.31.231n1192.168.31.232n2EOF修改对应主机的主机名hostnamectlset......
  • MYSQL 主从同步失败:Slave_SQL_Running: No
    SHOWSLAVESTATUS\G;显示Slave_SQL_Running:No 解决方法:从主服务器查询:  SHOWMASTERSTATUS在从服务器上:changemastertomaster_host='169.254.60.151', #主库的IP地址master_user='slave', #在主库上创建的复制账号master_password='???????',......
  • Docker mysql 配置文件读取失败 [Warning] World-writable config file '/etc/mysql/c
    这个警告表明MySQL正在忽略/etc/mysql/conf.d/my.cnf这个配置文件,因为它被设置为了全世界可写。这个警告是基于安全性的考虑。当配置文件被设置为全世界可写时,任何人都可以修改它,这可能会导致安全风险,因为恶意用户可以更改MySQL的配置,从而影响数据库的行为和安全性。为了......
  • MySQL 8 显示错误代码2058
    在使用mysql-uroot-P3307-proot和SQLyong连接MySQL时报错1.在MySQL8.3CommandLineClient登录点击查看代码Enterpassword:****WelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis14Serverversion:8.3.0MySQLCommunitySer......
  • MySQL-09-mysql 存储过程入门介绍
    拓展阅读MySQL00ViewMySQL01Rulermysql日常开发规范MySQL02truncatetable与delete清空表的区别和坑MySQL03Expression1ofORDERBYclauseisnotinSELECTlist,referencescolumnMySQL04EMOJI表情与UTF8MB4的故事MySQL05MySQL入门教程(MySQLtutor......
  • 如何找到相应程序的bin目录?(以MySQL为例)
    用win+R打开[运行]接着输入services.msc打开[服务] 在[名称]当中找到相应的程序,双击进入,如MySQL 就可以找到相应程序的bin目录啦......
  • FastAPI-MySQL-Cookie代码实现
    连接数据库fromsqlalchemyimportcreate_enginefromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemy.ormimportsessionmakerfromurllib.parseimportquote_pluspassword='123456'encoded_password=quote_plus(password)SQLALCHEM......