Mybatis之常用动态Sql语句

数据库结构、实体类

java 复制代码
public class Youth {

    private Integer id;
    private String username;
    private Date birthday;
    private Character sex;
    private String address;
    private Integer age;


    public Youth(Integer id, String username, Date birthday, Character sex, String address) {
        this.id = id;
        this.username = username;
        this.birthday = birthday;
        this.sex = sex;
        this.address = address;
    }

    public Youth() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public Character getSex() {
        return sex;
    }

    public void setSex(Character sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Youth{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex=" + sex +
                ", address='" + address + '\'' +
                ", age=" + age +
                '}';
    }
}

where-if

where-if多用于查询含有某个特征语句上 如果 where标签内的条件成立 它会自动去掉条件语句开头多余的 and 或者 or

它会通过判断是否符合test中的属性来进行选择性执行 会将满足此条件的内置语句进行嵌入到sql语句中进行执行

在接口文件中写入

java 复制代码
List<Youth> getYouthBywhereif(Youth youth);

在映射文件中写入

java 复制代码
<select id="getYouthBywhereif" resultType="youth">
        select * from youth
        <where>
            <if test=" username != null and username !='' ">
                and username = #{username}
            </if>
            <if test="birthday != null">
                and birthday = #{birthday}
            </if>
            <if test="sex!=null and sex!=''"  >
                and sex= #{sex}
            </if>
            <if test="address!=null and address!=''">
                and address = #{address}
            </if>
            <if test="age!=null">
                and age = #{age}
            </if>
        </where>
    </select>

测试类中写入

java 复制代码
@Test
    public void getYouthBywhereifTest(){
        Youth youth = new Youth();
        youth.setSex('男');
        youth.setAddress("北京");
        List<Youth> youths = youthMapper.getYouthBywhereif(youth);
        for(Youth y:youths){
            System.out.println(y);
        }
    }

执行结果为

set-if

set-if多用于选择性修改操作上 它会自动去掉条件语句结尾多余的 ,

在映射文件中写入

java 复制代码
<update id="updateYouthBysetif" parameterType="youth">
        update youth
        <set>
            <if test="username!=null and username!=''">
                username = #{username},
            </if>
            <if test="birthday!=null">
                birthday =#{birthday},
            </if>
            <if test="sex!=null and sex!=''">
                sex = #{sex},
            </if>
            <if test="address!=null and address!=''">
                address=#{address},
            </if>
            <if test="age!=null">
                age = #{age}
            </if>
        </set>
        <where>
            id=#{id}
        </where>
    </update>

在测试类中写入

java 复制代码
@Test
    public void updateYouthBysetifTest(){
        Youth youth = new Youth(4,"张三", new Date(2019 - 1900,10 - 1,9),'男',"北京");
        int i = youthMapper.updateYouthBysetif(youth);
        if(i>0)
            System.out.println("修改成功");
        else
            System.out.println("修改失败");
    }

执行结果为

特别须知

  1. 在test中非字符串类型 不可使用 属性 != ' '
  2. 建议将实体类的属性使用包装类进行修饰 因为非包装类不能使用 类似于age != null 的格式
相关推荐
reasonsummer2 分钟前
【教学类-160-11】20260419 AI视频培训-练习011“豆包AI视频《佛源植语》+豆包图片风格:无(关键词:藏传唐卡)”
数据库·音视频·豆包
瀚高PG实验室21 分钟前
pgroonga全文检索插件的BUG
数据库·postgresql·bug·瀚高数据库
Rick199324 分钟前
mysql 慢查询如何快速定位
数据库·mysql
2401_8330336232 分钟前
c++如何实现简单的文件签名验证_HMAC-SHA1算法应用【进阶】
jvm·数据库·python
qq_3926906641 分钟前
SQL报表查询标准规范_SQL书写规范优化
jvm·数据库·python
Vect__43 分钟前
MySQL的数据类型和约束
android·数据库·mysql
八秒记忆的老男孩1 小时前
Sentinel5P的L1B级数据预处理(BD7和BD8)【20260427】
数据库·redis·缓存
ChoSeitaku1 小时前
5.MySQL表的约束|空属性|默认值|列描述|主键|自增长|唯一键|外键
android·数据库·mysql
S1998_1997111609•X1 小时前
滄集/㞯鎩.赫量被恶意篡改?|\^*仺\~:sall,sql=㶏齾bci.ji.app_sql=-heart{TCP.box}‘雧……㞋
网络·数据库·网络协议·百度·微信
2301_803875611 小时前
c++如何通过重定向streambuf流捕获标准错误输出并记录到运行日志【详解】
jvm·数据库·python