zoukankan      html  css  js  c++  java
  • 6. 动态 SQL 之<foreach>

    SELECT * from user where id in(1,2,4)

    这个语句就是 查找 id = 1 或 id = 2 或 id = 4 。

    那就可以用<foreach> 这个标签来写:

    其中他的属性我先列举:

    标签用于遍历集合,它的属性:

    • collection:代表要遍历的集合元素,注意编写时不要写#{}

    • open:代表语句的开始部分

    • close:代表结束部分

    • item:代表遍历集合的每个元素,生成的变量名

    • sperator:代表分隔符 

    1.先编写接口:

    2.编写核心配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <configuration>
        <properties resource="datasourceInfo.properties"></properties>
        <typeAliases>
            <typeAlias type="com.bihu.Bean.User" alias="User"></typeAlias>
            <typeAlias type="java.util.List" alias="list"></typeAlias>
        </typeAliases>
    
        <environments default="dev">
            <environment id="dev">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}"/>
                    <property name="url" value="${jdbc.url}"/>
                    <property name="username" value="${jdbc.username}"/>
                    <property name="password" value="${jdbc.password}"/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper resource="com/bihu/mapper/UserMapper.xml"></mapper>
        </mappers>
    
    </configuration>
    mybatis核心配置文件

    3.编写映射文件:

    <?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
        <mapper namespace="com.bihu.Dao.UserMapper">
    
        <select id="findIds" parameterType="list" resultType="user">        <!--已list、user设置别名-->
            <!--原本语句: SELECT * from user where id in(1,2,4) -->
            select * from user
            <where>
                <foreach collection="list" open="id in(" close=")" item="id" separator=",">
                    #{id}
                </foreach>
            </where>
        </select>
    
    
    
        </mapper>
    mybatis 映射文件

    4.编写Service层 (模拟) 查询层

        package com.bihu.Service;
    
    
        import com.bihu.Bean.User;
        import com.bihu.Dao.UserMapper;
        import org.apache.ibatis.io.Resources;
        import org.apache.ibatis.session.SqlSession;
        import org.apache.ibatis.session.SqlSessionFactory;
        import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
        import java.io.IOException;
        import java.io.InputStream;
        import java.util.ArrayList;
        import java.util.List;
    
        public class UserService {
            public static void main(String[] args) throws IOException {
    
                //模拟数据来源
                List<Integer> list = new ArrayList<>();
                list.add(1);
                list.add(2);
                list.add(3);
                //下面开始操作
                InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
                SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
                SqlSession sqlSession = build.openSession();
                UserMapper mapper = sqlSession.getMapper(UserMapper.class);
                List<User> ids = mapper.findIds(list);
                System.out.println(ids);
    
    
            }
        }
    View Code

    运行:

    可以发现语句和查询都对的上号。

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/15151889.html

  • 相关阅读:
    my first blog
    CentOS启动报错:Centos kernel panic-not syncing:VFS:Unable to mount root fs on unknown block
    J2EE在Web容器中启动报错:com.sun.jdi.InvocationException occurred invoking method.
    SVN报错:can't open file db/txn-current-lock:permission denied 解决方法
    Linux(CentOS6.4、CentOS6.3)下安装、配置PostgreSQL9.2
    [模板] 线性代数:矩阵/高斯消元/矩阵求逆/行列式
    [模板] 杂项:二分/离散化/随机数/其他
    [模板] 图论:存储/拓扑排序
    Luogu1137 旅行计划(拓扑排序)
    C++模板、.vimrc和一些Linux配置
  • 原文地址:https://www.cnblogs.com/bi-hu/p/15151889.html
Copyright © 2011-2022 走看看