Mybatis动态SQL

常规注释编写SQL语句

package qzer.mbs1.dao;

import org.apache.ibatis.annotations.*;
import qzer.mbs1.pojo.User;

import java.util.List;

@Mapper
public interface UserMapper {
    @Select("select * from user")
    public List<User> show();//查询所有

    @Select("select  * from user where id = #{id}")
    public User getById(int id);//获取单个

    @Delete("delete from user where id = #{id}")
    public int deleteById(int id);//删除单个

    @Select("select * from user where id = #{id} and phone = #{phone}")
    public int login(int id, String phone);//条件匹配

    @Insert("insert into user(name,age,gender,phone)" +
            "values(#{name},#{age},#{gender},#{phone})")
    public int insert(User user);//增加单个

    @Update("update user set name = #{name}, age = #{age}, gender = #{gender}, phone = #{phone} where id = #{id}")
    public int update(User user);//修改
    @Select("select * from user where name like concat('%',#{name},'%') ")
    public List<User> getByName(String name);//模糊查询 注意concat函数的使用
}

使用xml映射编写动态SQL语句

xml映射文件与Mapper接口名称一致,并且将xml文件放置在Mapper接口相同包下(同包同名)
xml映射文件的namespace属性值与Mapper接口全限定名一致
xml映射文件中sql语句的id与接口方法名一致,返回数据类型一致
xml映射文件配置(Mapper.xml)

动态SQL

where:用来动态拼接条件
if:用来进行条件判断并动态拼接
    public List<User> getByName(String name);//模糊查询 注意concat函数的使用
   <select id="getByName" resultType="qzer.mbs1.pojo.User">
   		select *
        from user
        <where>
            <if test="name != null">name like concat('%', #{name}, '%')</if>
        </where>
    </select>
set : 动态地在行首插入SET关键字,会删除额外的逗号。(在update语句中)
    public int update(User user);//修改
 <!--    动态更新-->
    <update id="update">
        update user
        <set>
            <if test="name != null">
            name   = #{name},
            </if>
            <if test="age != null">
            age    = #{age},
            </if>
            <if test="gender != null">
            gender = #{gender},
            </if>
            <if test="phone != null">
            phone  = #{phone}
            </if>
        </set>
        where id = #{id}
    </update>
批量删除forearch

collection:遍历的集合
iteam:遍历出来的元素
separator:分隔符
open:遍历开始前拼接的SQL片段
close:遍历结束后拼接的SQL片段

  public void deleteByIds(List<Integer> list);
  <delete id="deleteByIds">
        delete from user where id in
        <foreach collection="list" item="id" separator="," open="(" close=")">
            #{id}
        </foreach>
    </delete>

UserMapper.java

package qzer.mbs1.dao;

import org.apache.ibatis.annotations.*;
import qzer.mbs1.pojo.User;

import java.util.List;

@Mapper

public interface UserMapper {
    public List<User> show();//查询所有

    public User getById(int id);//获取单个

    public int deleteById(int id);//删除单个

    public int login(int id, String phone);//条件匹配

    public int insert(User user);//增加单个


    public int update(User user);//修改

    public List<User> getByName(String name);//模糊查询 注意concat函数的使用

    public void deleteByIds(List<Integer> list);
}

UserMapper.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="qzer.mbs1.dao.UserMapper">

    <!--    resultType:单条结果的类型-->
    <!--    id:Mapper对应方法的方法名-->
    <select id="show" resultType="qzer.mbs1.pojo.User">
        select *
        from user
    </select>
    <select id="getById" resultType="qzer.mbs1.pojo.User">
        select *
        from user
        where id = #{id}
    </select>
    <select id="login" resultType="java.lang.Integer">
        select *
        from user
        where id = #{id}
          and phone = #{phone}
    </select>
    <!--    动态查询-->
    <select id="getByName" resultType="qzer.mbs1.pojo.User">
        select *
        from user
        <where>
            <if test="name != null">name like concat('%', #{name}, '%')</if>
        </where>
    </select>
    <delete id="deleteById">delete
                            from user
                            where id = #{id}
    </delete>
    <delete id="deleteByIds">
        delete from user where id in
        <foreach collection="list" item="id" separator="," open="(" close=")">
            #{id}
        </foreach>
    </delete>
    <insert id="insert">
        insert into user(name, age, gender, phone)
        values (#{name}, #{age}, #{gender}, #{phone})
    </insert>
    <!--    动态更新-->
    <update id="update">
        update user
        <set>
            <if test="name != null">
                name = #{name},
            </if>
            <if test="age != null">
                age = #{age},
            </if>
            <if test="gender != null">
                gender = #{gender},
            </if>
            <if test="phone != null">
                phone = #{phone}
            </if>
        </set>
        where id = #{id}
    </update>

</mapper>

总结

if
用于判断该条件是否成立,如果条件为true,则拼接SQL形式

where
where元素只在子元素有内容的情况下才插入where子句,而且会自动去除子句的开头AND或OR

set
动态地在行首插入SET关键字,并且会删除额外的逗号,在update语句中使用

forearch
依赖操作集合

sql
通过id定义SQL片段

include
通过refid引用SQL片段

相关推荐

  1. MyBatis动态SQL

    2024-06-07 14:40:01       41 阅读
  2. Mybatis 动态 SQL - foreach

    2024-06-07 14:40:01       40 阅读
  3. MyBatis动态Sql

    2024-06-07 14:40:01       40 阅读
  4. MyBatis动态SQL语句

    2024-06-07 14:40:01       45 阅读
  5. MyBatis动态SQL

    2024-06-07 14:40:01       45 阅读

最近更新

  1. Transformer模型论文解读、源码分析和项目实践

    2024-06-07 14:40:01       0 阅读
  2. python:使用openpyxl模块处理excel

    2024-06-07 14:40:01       0 阅读
  3. pg数据库时间比较

    2024-06-07 14:40:01       1 阅读
  4. C# 枚举的定义及使用

    2024-06-07 14:40:01       2 阅读
  5. Prompt Engineering 探险

    2024-06-07 14:40:01       1 阅读
  6. 机器学习之神经网络

    2024-06-07 14:40:01       2 阅读
  7. Lianwei 安全周报|2024.07.09

    2024-06-07 14:40:01       1 阅读

热门阅读

  1. Kotlin getter 和 setter

    2024-06-07 14:40:01       11 阅读
  2. # ROS 获取激光雷达数据 (Python实现)

    2024-06-07 14:40:01       9 阅读
  3. vue2 集成element 步骤

    2024-06-07 14:40:01       7 阅读
  4. 基于Spring Security添加流控

    2024-06-07 14:40:01       12 阅读