mybatis动态sql

一、在学习mybatis中,有很重要的一部分是动态sql,动态sql需要借助mybatis中的标签,这里主要讲解mybatis中常用的标签。

二、selectKey

  插入数据后返回当前数据的id

  IUserDao接口中的方法

  void   add(User user);

 IUserDao.xml代码

    <insert id="add" parameterType="User">
        INSERT INTO USER ( id,username,address,sex) VALUES (#{id},#{username},#{address},#{sex})
        <selectKey resultType="int" keyProperty="id" order="AFTER">
            SELECT last_insert_id()
        </selectKey>
    </insert>

  测试代码

    @Test
    public void add() {
        User user = new User();
        user.setUsername("李白");
        user.setSex("男");
        user.setAddress("北京");
        userDao.add(user);
        System.out.println(user.getId());
    }

  最终返回插入数据的id值给user.getId();

三、where

  用于过滤条件,和if标签组合使用,第一个if标签可以不写and,后边的if标签必须写and

  接口中的方法

  

  List<User> queryUserByUsernameAndSex(User user);

  xml代码

   <!--where标签-->
    <select id="queryUserByUsernameAndSex" resultType="User">
        SELECT *
        FROM user
        <where>
            <if test="username !=null and username !='' ">
                username= #{username}
            </if>
            <if test="sex !=null and sex !='' ">
              and  sex= #{sex}
            </if>
        </where>
    </select>

  测试类

 @Test
    public  void  queryUserByUsernameAndSex(){
        User user = new User();
        user.setUsername("zz");
        user.setSex("1");

        List<User> users = userDao.queryUserByUsernameAndSex(user);
        users.forEach(u->{
            System.out.println(u);
        });

    }

   查询结果:

User{id=2, username='zz', birthday=Thu Mar 18 00:00:00 CST 2021, sex='1', address='左子'}
User{id=7, username='zz', birthday=null, sex='1', address='左子dsds在'}

 四、set标签

  IUserDao接口中代码,除最后一个if标签语句中不加逗号,其他语句都加逗号

  void  updateUserSelective(User user);

  IUserDao.xml中代码

 <!--set标签-->
    <update id="updateUserSelective" parameterType="User">
        UPDATE  user
        <set>
            <if test="username !=null and username !='' ">
                username = #{username} ,
            </if>
            <if test="password !=null and password !='' ">
                password = #{password} ,
            </if>
            <if test="sex !=null and sex !='' ">
                sex = #{sex}
            </if>
        </set>
        <where>
            <if test="id &gt;0">
                id=#{id}
            </if>
        </where>
    </update>

  测试类中代码

   @Test
    public  void  updateUserSelective(){
        User user = new User();
        user.setUsername("qq");
        user.setPassword("333");
        user.setId(12);

        userDao.updateUserSelective(user);
    }

五、foreach标签

  IUserDaoj接口中代码 

 List<User> queryUserByIds(List list);

  IUserDao.xml中代码

  <!--foreach标签-->
    <select id="queryUserByIds" resultType="User">
        SELECT  *
        FROM  user
        <where>
            <foreach collection="list" item="id" open=" id in (" close=")" separator=",">
                #{id}
            </foreach>
        </where>
    </select>

  测试代码

  @Test
    public void queryUserByIds() {
        ArrayList<Object> objects = new ArrayList<>();
        objects.add(1);
        objects.add(2);
         objects.add(3);

        List<User> users = userDao.queryUserByIds(objects);
        users.forEach(user -> {
            System.out.println(user);
        });
    }

六、include标签

  IUserDao.xml代码

<!--sql标签配合include标签使用-->
    <sql id="selectUser">
        SELECT * FROM  user
    </sql>
    <!--foreach标签-->
    <select id="queryUserByIds" resultType="User">
       <include refid="selectUser"/>
        <where>
            <foreach collection="list" item="id" open=" id in (" close=")" separator=",">
                #{id}
            </foreach>
        </where>
    </select>

 

posted @ 2021-03-01 20:21  林间清风  阅读(51)  评论(0)    收藏  举报