>php教程 >PHP开发 >mybatis를 일괄 삽입하는 두 가지 방법

mybatis를 일괄 삽입하는 두 가지 방법

高洛峰
高洛峰원래의
2016-11-22 15:26:421360검색

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>
구체적인 사용법은 다음과 같습니다:

* 방법 1 spring+mybatis

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();
    }
일반 매퍼 SQL 별칭과 결합하여 패키지 이름 + 클래스를 사용하는 것이 가장 좋습니다. 이름

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:벡터의 삭제 작업다음 기사:벡터의 삭제 작업