1. mybiat foreach 태그
foreach는 주로 조건을 작성하는 데 사용되며 SQL 문에서 집합을 반복할 수 있습니다. foreach 요소의 속성에는 주로 항목, 인덱스, 컬렉션, 열기, 구분 기호 및 닫기가 포함됩니다. item은 반복 시 컬렉션에 있는 각 요소의 별칭을 나타내고, index는 반복 프로세스 중 각 반복의 위치를 나타내는 데 사용되는 이름을 지정하고, open은 문이 시작하는 내용을 나타내며, 구분 기호는 각 반복 사이의 시간을 나타냅니다. 구분 기호로 사용되는 기호와 종료를 의미하는 것은 무엇입니까? foreach를 사용할 때 가장 중요하고 가장 오류가 발생하기 쉬운 것은 이 속성을 지정해야 하지만 상황에 따라 이 속성의 값은 다음과 같습니다. , 주로 세 가지 상황이 있습니다.
단일 매개변수가 전달되고 매개변수 유형이 List인 경우 컬렉션 속성 값은 목록입니다.
단일 매개변수가 전달되고 매개변수 유형이 배열 배열인 경우 컬렉션의 속성 값은 배열입니다
여러 매개변수가 전달된 경우 이를 맵으로 캡슐화해야 합니다
구체적인 사용법은 다음과 같습니다.
<insert id="insertBatch" parameterType="List"> INSERT INTO TStudent(name,age) <foreach collection="list" item="item" index="index" open="("close=")"separator="union all"> SELECT #{item.name} as a, #{item.age} as b FROM DUAL </foreach></insert>
spring+mybatis
방법 2:
//获取sqlsession//从spring注入原有的sqlSessionTemplate@Autowiredprivate SqlSessionTemplate sqlSessionTemplate;// 新获取一个模式为BATCH,自动提交为false的session// 如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH,false); //通过新的session获取mapper fooMapper = session.getMapper(FooMapper.class); int size = 10000; try{ for(int i = 0; i < size; i++) { Foo foo = new Foo(); foo.setName(String.valueOf(System.currentTimeMillis())); fooMapper.insert(foo); if(i % 1000 == 0 || i == size - 1) { //手动每1000个一提交,提交后无法回滚 session.commit(); //清理缓存,防止溢出 session.clearCache(); } } } catch (Exception e) { //没有提交的数据可以回滚 session.rollback(); } finally{ session.close(); }