美文网首页
02.MyBatis映射文件深入

02.MyBatis映射文件深入

作者: 黑咔 | 来源:发表于2019-04-18 09:07 被阅读0次

    1.1 动态sql语句

    1. 动态sql语句概述

    Mybatis 的映射文件中,前面我们的 SQL 都是比较简单的,有些时候业务逻辑复杂时,我们的 SQL是动态变化的,此时我们的 SQL 就不能满足要求了。

    2. (重点)动态 SQL 之<if>

    我们根据实体类的不同取值,使用不同的 SQL语句来进行查询。比如在 id如果不为空时可以根据id查询,如果username 不同空时还要加入用户名作为条件。

        <select id="findByCondition" parameterType="user" resultType="user">
            select * from user
            <where>
                <if test="id != 0">
                    and id=#{id}
                </if>
                <if test="username != null">
                    and username=#{username}
                </if>
                <if test="password != null">
                    and password=#{password}
                </if>
            </where>
        </select>
    
    动态 SQL 之<if> 动态 SQL 之<if>
    3. 动态 SQL 之<foreach>

    循环执行sql的拼接操作,例如:SELECT * FROM USER WHERE id IN (1,2,5)。

    <foreach>标签用于遍历集合,它的属性:
    • collection:代表要遍历的集合元素,注意编写时不要写#{}
    • open:代表语句的开始部分
    • close:代表结束部分
    • item:代表遍历集合的每个元素,生成的变量名
    • sperator:代表分隔符

    List<User> findByIds(List<Integer> ids);
    
        <select id="findByIds" parameterType="list" resultType="user">
            select * from user
            <where>
                <foreach collection="list" open="id in (" close=")" item="id" separator=",">
                    #{id}
                </foreach>
            </where>
        </select>
    

    测试代码片段如下:

        @Test
        public void test2() throws IOException {
            InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
            List<Integer> ids = Arrays.asList(1, 3, 5);
            List<User> userList = mapper.findByIds(ids);
            System.out.println(userList);
        }
    

    1.2 SQL片段抽取

    Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的


    SQL片段抽取

    MyBatis映射文件配置小结:

    <select>:查询
    <insert>:插入
    <update>:修改
    <delete>:删除
    <where>:where条件
    <if>:if判断
    <foreach>:循环
    <sql>:sql片段抽取

    相关文章

      网友评论

          本文标题:02.MyBatis映射文件深入

          本文链接:https://www.haomeiwen.com/subject/oduywqtx.html