Mybatis框架——动态SQL

目录

1.Mybatis动态SQL

 2.MyBatis 中用于实现动态 SQL 的元素

3.查所有

4.If 元素

5.trim 元素

6.Choose 元素

7.set 元素

8.foreach 元素

根据传入id删除学生信息 

根据传入列名查询学生相关信息


1.Mybatis动态SQL

MyBatis 的一个强大的特性之一通常是它的动态 SQL 能力。如果你有使用 JDBC 或其他相似框架的经验,你就明白条件地串联 SQL 字符串在一起是多么的痛苦,确保不能忘了空格或在列表的最后省略逗号,动态SQL可以彻底处理这种痛苦。

 2.MyBatis 中用于实现动态 SQL 的元素

If

where

trim

set

choose (when, otherwise)

foreach

3.查所有

数据库student表中的数据如下!!!

 在StudentDao类中写该方法

 //查所有

List<Student> findStudents();

 在StudentMapper.xml文件中写相应的SQL语句  

    <select id="findStudents" resultType="student">
        select * from student
    </select>

  在测试类的main方法中调用该方法

查询结果如下! 

4.If 元素

 在StudentDao类中写该方法

 List<Student> findStudents1(Student student);

 mybatis动态sql——if标签:

 if 标签可以对传入的条件进行判断
    <if test="条件表达式"></if>
    <where>
        判断内部if标签如果有一个返回true,
        会自动添加一个where关键字,
        还会去除where后面多余的关键字,

        如果标签返回的内容是以 AND 或 OR 开头,它会剔除掉 AND 或 OR。
    </where>

 在StudentMapper.xml文件中写相应的SQL语句   

 
    <select id="findStudents1" resultType="student">
        select * from student
        <where>
            <if test="name!=null">
                and name = #{name}
            </if>
            <if test="num!=0">
                and num = #{num}
            </if>
            <if test="gender!=null">
                and gender = #{gender}
            </if>
        </where>
    </select>

 在测试类的main方法中调用该方法 

查询结果如下!

5.trim 元素

 在StudentDao类中写该方法

 List<Student> findStudents2(Student student);

trim   让我们添加一个指定的前级关键字
          让我们去除一个指定的关键字

 在StudentMapper.xml文件中写相应的SQL语句    

   <select id="findStudents2" parameterType="student" resultType="student">
        select * from student
        <trim prefix="where" prefixOverrides="and|or">
            <if test="name!=null">
                or name = #{name}
            </if>
            <if test="num!=0">
                and num = #{num}
            </if>
            <if test="gender!=null">
                and gender = #{gender}
            </if>
        </trim>
    </select>

 在测试类的main方法中调用该方法  

查询结果如下! 

6.Choose 元素

在StudentDao类中写该方法

List<Student> findStudents3(Student student);

在StudentMapper.xml文件中写相应的SQL语句     

在该方法中,when和otherwise相当于if,else。当when中的条件不成立时,会走otherwise这条路

    <select id="findStudents3" parameterType="student" resultType="student">
        select * from student
        <where>
         <choose>
            <when test="name!=null">
                name = #{name}
            </when>
            <otherwise>
                name = "王五"
            </otherwise>
         </choose>
        </where>
    </select>

在测试类的main方法中调用该方法   

当在测试类的main方法中set了name,那么就会查询此时传入的name

查询结果如下! 

要是在测试类的main方法中没有set了name或者是set了数据库表里没有的name,那么查询此时就会走otherwise这条路,查询otherwise中传入的name

 

查询结果如下! 

7.set 元素

 数据库student表中的数据如下!!!

在StudentDao类中写该方法

void updateStudent(Student student);

在StudentMapper.xml文件中写相应的SQL语句     

 <set></set>  

动态添加set关键字,还可以去掉最后的逗号

  <update id="updateStudent" parameterType="student">
        update student
       <!-- <trim prefix="set" prefixOverrides=",">
        </trim>-->
        <set>
           <if test="name!=null">
              name = #{name},
           </if>
           <if test="num!=0">
              num = #{num},
           </if>
           <if test="gender!=null">
              gender = #{gender}
           </if>
        </set>
        where id = #{id}
    </update>

 在测试类的main方法中调用该方法    

 修改结果如下! 

8.foreach 元素

主要用在构建 in 条件中,它可以在 SQL 语句中进行迭代一个集合,foreach 元素的属性主要有 item,index,collection,open,separator,close

item 表示集合中每一个元素进行迭代时的别名

index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置

open 表示该语句以什么开始

separator 表示在每次进行迭代之间以什么符号作为分隔符

close 表示以什么结束,在使用 foreach 的时候最关键的也是最容易出错的就是 collection 属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的

根据传入id删除学生信息 

在StudentDao类中写该方法 

 void deleteStudent(List<Integer> list);

 在StudentMapper.xml文件中写相应的SQL语句    

    <delete id="deleteStudent">
        delete from student where id in
          <foreach item="a" collection="list" open="(" close=")" separator=",">
            #{a}
          </foreach>
    </delete>

 在测试类的main方法中调用该方法     

 

  删除结果如下! 

根据传入列名查询学生相关信息

在StudentDao类中写该方法 

List<Student> findStudentsByColumn(List<String> list);

 在StudentMapper.xml文件中写相应的SQL语句    

    <select id="findStudentsByColumn" resultType="Student">
        select
            <foreach item="c" collection="list" separator=",">
                ${c}
            </foreach>
        from student
    </select>

 在测试类的main方法中调用该方法     

 

  查询结果如下! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值