it编程 > 编程语言 > Java

MyBatis中常用的SQL语句详解

2人参与 2025-03-10 Java

mybatis 中常用的 sql 语句与标准 sql 语句基本一致,但 mybatis 提供了一些额外的特性和标签来更方便地构建和管理 sql 语句。

以下列出 mybatis 中常用的 sql 语句,并结合 mybatis 的特性进行说明:

1. select (查询)

基本查询:

<select id="selectuserbyid" parametertype="int" resulttype="user">
  select id, username, password, email from users where id = #{id}
</select>

多条件查询 (动态 sql):

<select id="selectusers" parametertype="map" resulttype="user">
  select id, username, password, email from users
  <where>
    <if test="username != null and username != ''">
      and username like concat('%', #{username}, '%')
    </if>
    <if test="email != null and email != ''">
      and email = #{email}
    </if>
  </where>
</select>

关联查询 (join):

<select id="selectuserwithorders" parametertype="int" resultmap="userwithordersresultmap">
  select
    u.id as user_id,
    u.username,
    o.id as order_id,
    o.order_date
  from users u
  left join orders o on u.id = o.user_id
  where u.id = #{id}
</select>

<resultmap id="userwithordersresultmap" type="user">
  <id property="id" column="user_id"/>
  <result property="username" column="username"/>
  <collection property="orders" oftype="order">
    <id property="id" column="order_id"/>
    <result property="orderdate" column="order_date"/>
  </collection>
</resultmap>

分页查询 :

<!-- mysql -->
<select id="selectusersbypage" parametertype="map" resulttype="user">
  select id, username, password, email from users limit #{offset}, #{pagesize}
</select>

<!-- oracle -->
<select id="selectusersbypage" parametertype="map" resulttype="user">
  select * from (
    select t.*, rownum rn from (
      select id, username, password, email from users
    ) t where rownum <= #{endrow}
  ) where rn > #{startrow}
</select>

2. insert (插入)

<insert id="insertuser" parametertype="user">
  insert into users (username, password, email) values (#{username}, #{password}, #{email})
</insert>
<insert id="insertuser" parametertype="user" usegeneratedkeys="true" keyproperty="id">
  insert into users (username, password, email) values (#{username}, #{password}, #{email})
</insert>

批量插入 (foreach):

<insert id="batchinsertusers" parametertype="java.util.list">
  insert into users (username, password, email) values
  <foreach collection="list" item="user" separator=",">
    (#{user.username}, #{user.password}, #{user.email})
  </foreach>
</insert>

3. update (更新)

<update id="updateuser" parametertype="user">
  update users set username = #{username}, password = #{password}, email = #{email} where id = #{id}
</update>
<update id="updateuserselective" parametertype="user">
  update users
  <set>
    <if test="username != null and username != ''">
      username = #{username},
    </if>
    <if test="password != null and password != ''">
      password = #{password},
    </if>
    <if test="email != null and email != ''">
      email = #{email},
    </if>
  </set>
  where id = #{id}
</update>

4. delete (删除)

<delete id="deleteuserbyid" parametertype="int">
  delete from users where id = #{id}
</delete>
<delete id="deleteusersbyids" parametertype="java.util.list">
  delete from users where id in
  <foreach collection="list" item="id" open="(" close=")" separator=",">
    #{id}
  </foreach>
</delete>

5. 其他常用标签和特性

<sql id="usercolumns">
  id, username, password, email
</sql>

<select id="selectuserbyid" parametertype="int" resulttype="user">
  select <include refid="usercolumns"/> from users where id = #{id}
</select>

总结

mybatis 的核心在于将 sql 语句与 java 代码分离,并通过 xml 或注解的方式进行配置。 尽可能使用 #{} 进行参数绑定,以防止 sql 注入。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

Java中切面的使用方法举例详解

03-10

MyBatis里映射文件sql语句爆红问题及解决方案

03-10

IDEA创建SpringBoot的五种方式

03-10

Java格式化小数并保留两位小数的四种方法

03-10

SELECT INTO用法及支持的数据库

03-10

对象存储服务MinIO快速入门(集成项目的详细过程)

03-10

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论