十五、持久层框架设计实现及MyBatis源码分析-MyBatis基础回顾及高级应用-MyBatis的动态SQL-foreach标签的使用和SQL片断抽取(九)

一、动态 SQL 之foreach

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

在IUserProxyDao接口中添加一个findUserByIds方法

 /**
     * 用数组进行查询,用来演示foreach标签
     * @param ids
     * @return
     */
    List findUserByIds(int[] ids);

在UserProxyMapper.xml文件中添加以下代码片断


编写测试方法,在MyBatisProxyTest测试类中添加如下代码片断进行单元测试

@Test
    public void testFindByIds() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        IUserProxyDao mapper = sqlSession.getMapper(IUserProxyDao.class);
        int[] ids = new int[]{1,2,6};
        List all = mapper.findUserByIds(ids);
        for (User user : all) {
            System.out.println(user);
        }
    }

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

二、SQL⽚段抽取

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





    
        SELECT * FROM user
    
    
    
    

    

    

上一篇笔记地址:https://www.jianshu.com/p/26a4cbba4a98

下一篇笔记地址:https://www.jianshu.com/p/200d11349f8d
具体代码对应下载地址:https://gitee.com/happymima/mybatis.git

你可能感兴趣的:(十五、持久层框架设计实现及MyBatis源码分析-MyBatis基础回顾及高级应用-MyBatis的动态SQL-foreach标签的使用和SQL片断抽取(九))