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 的格式
相关推荐
-雷阵雨-8 分钟前
MySQL——数据库约束
数据库·mysql
大筒木老辈子9 分钟前
MySQL笔记---C/C++访问MySQL数据库
数据库·笔记·mysql
友友马12 分钟前
『 数据库 』MySQL复习(表的约束)
数据库·mysql
奥尔特星云大使30 分钟前
MySQL分布式架构:MyCat详解
数据库·分布式·mysql·mycat·高可用
SelectDB技术团队31 分钟前
Apache Doris 内部数据裁剪与过滤机制的实现原理 | Deep Dive
大数据·数据库·apache·数据库系统·数据裁剪
像风一样!1 小时前
学习MySQL数据库的高级特性(上)
数据库·mysql
龙猫蓝图1 小时前
wrapper+ xml文件进行SQL编写
mybatis
夜泉_ly2 小时前
Redis -持久化
数据库·redis·缓存
2401_837088502 小时前
什么是NoSQL?
数据库·nosql
web安全工具库3 小时前
从课堂笔记到实践:深入理解Linux C函数库的奥秘
java·数据库·算法