时间:2021-07-01 10:21:17 帮助过:24人阅读
版权声明:本文为博主原创文章,未经博主允许不得转载。
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:package com.ydssy.dao.product;
import java.util.List;
import java.util.Map;
import com.ydssy.model.product.ProductStore;
public interface ProductStoreMapper {
//接口 传入一个集合
List<ProductStore> parameterlist(String[] s);
}
映射文件
<?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.ydssy.dao.product.ProductStoreMapper" >
<!--Array:forech中的collection属性类型是array,collection的值必须是:list,item的值可以随意,Dao接口中参数名字随意 -->
<select id="parameterlist" parameterType="com.ydssy.model.product.ProductStore" resultType="com.ydssy.model.product.ProductStore">
select ps.* from es_product_store ps where ps.goodsid in<foreach collection="array" item="employeeId" index="index" open="(" close=")" separator=",">
#{employeeId}
</foreach>
</select>
</mapper>
测试类
package test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import com.ydssy.dao.product.ProductStoreMapper;
import com.ydssy.model.product.ProductStore;
public class TestProductStoreMapper {
private SqlSession session;
private ProductStoreMapper dao;
@Before// @Before在··之前
public void init() {
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
// SqlSessionFactory通过SqlSessionFactoryBuilder的ssfb方法里的类加载器的getResourceAsStream方法获取配置文件信息
//getResourceAsStream会创建一个流 通过这个流去获取配置文件,这个文件会返回一个importString这个流
SqlSessionFactory ssf = ssfb.build(TestProductStoreMapper.class.getClassLoader().getResourceAsStream("com/ydssy/goods/goods.xml"));
// 获得SqlSession对象
// (SqlSession是执行sql的一个容器 通过session访问数据库)。
session = ssf.openSession();
//用session对象去获取接口 ,getMapper方法会返回符合Tapper映射器( 即EmployeeDAO 接口) 要求的对象
dao = session.getMapper(ProductStoreMapper.class);
}
@Test
public void test3() {
String[] s = new String[] { "516","518" };
List<ProductStore> result = dao.parameterlist(s);
System.out.println(result);
session.commit();
session.close();
}
}
配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<environments default="environment">
<environment id="environment">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql:///symall_emoji?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=true" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers><!-- 配置文件连接 映射器文件 -->
<mapper resource="com/ydssy/mapping/goods/GoodsCatMapper.xml" />
<mapper resource="com/ydssy/mapping/product/ProductStoreMapper.xml" />
</mappers>
</configuration>
包
MyBatis参数传入集合之foreach动态sql
标签:完整 tis products 技术 3.0 getc commit 迭代 ping