머리말
백엔드 서비스 개발을 수행 할 때, 특히 빅 데이터가 배치에 삽입 될 때 일반 ORM 프레임 워크 (Mybatis, Hibernate, JPA)는 프로그램의 성능 요구 사항을 충족시킬 수 없습니다. 물론, 우리가 기본 JDBC를 사용하여 작동하는 것은 불가능하므로 효율성이 높지만 복잡성이 증가 할 것입니다.
종합적으로 고려할 때, 우리는 스프링에 jdbctemplate를 사용하고 배치 작업을 수행하기 위해 이름을 지정합니다.
변형 전에
설명을 시작하기 전에 먼저 JPA가 배치로 작동하는 방법을 살펴 보겠습니다.
엔티티 사용자 :
공개 클래스 Appstudent {개인 정수 ID; 개인 정수 classid; 개인 문자열 이름; 개인 정수 시대; // pseudocode, 생략 된 구조물 및 GET, SET Methods}}Dynamicquery pseudocode :
@RepositoryPublic Class DynamicQueryImpl은 DynamicQuery를 구현합니다. 공개 EntityManager getEntityManager () {return em; } // 실제로, 그것은 단지 루프를위한 것이고 EntityManager의 지속 메소드를 사용하여 @override public <t> void savelist (list <t> resultList) {for (int i = 0; i <resultList.size (); i ++) {t t = resultList.get (i); em.persist (t); }}}변형 후
jdbctemplate
jdbctemplate에서 제공하는 주요 방법 :
jdbctemplate 클래스에서 주입에 @autowired를 사용하면됩니다.
@autowiredPrivate jdbctemplate jdbctemplate;
배치 삽입 작업 :
public void batchsave () {list <object []> batchargs = new arraylist <object []> (); batchargs.add (new Object [] {1, "Xiao Ming", 21}); batchargs.add (new Object [] {2, "Xiaohong", 22}); batchargs.add (new Object [] {3, "Lucy", 23}); 문자열 sql = "사용자에 삽입 (사용자 이름, 비밀번호) 값 (?,?)"; jdbctemplate.batchupdate (SQL, Batchargs);}위의 내용은 기본적으로 배치 삽입 기능을 구현하지만 많은 데이터베이스 필드가 있으면 자리 표시 자 형태로 인코딩하는 것이 좋지 않을 수 있습니다. 여기서 Spring은 또한 SimpleJdbctemplate (Spring3.1+가 나중에 구식으로 표시되지만 스프링 4.3에 완전히 제거됩니다. 후자는 필요를 완전히 충족시킬 수 있음) 및 nameparameterjdbctemplate 템플릿 엔진을 제공합니다.
이름이 parameterjdbctemplate
최대 절전 모드를 사용한 학생들은 그것이 HQL에서 사용할 수 있다는 것을 알고 있습니까? 또는 : * 외부 쿼리 매개 변수를 구성합니다. 스프링 JDBC 프레임 워크에서는 명명 된 매개 변수를 사용하여 SQL 매개 변수를 바인딩하는 방법도 제공됩니다.
우리는 단지 namedparameterjdbctemplate 클래스에서 주입을 위해 @autowired를 사용해야합니다.
@autowiredprivate nameparameterjdbctemplate nameparameterjdbctemplate;
배치 삽입 작업 :
public void batchsave () {list <user> list = new arraylist <user> (); // 새 사용자 list.add (new AppStudent (1, "Zhang San", 21)); list.add (New Appstudent (1, "li si", 22)); list.add (New Appstudent (1, "Wang Ermazi", 23)); // 배치를 배열로 배열로 sqlparametersource [] beansources = sqlparametersourceutils.createbatch (list.toarray ()); 문자열 sql = "app_student에 삽입 (class_id, name, age) 값 (: classid, : name, : age)"; pameparameterjdbctemplate.batchupdate (sql, beansources);}마지막으로 System.CurrentTimeMillis ()를 사용하여 특정 변환 전후에 실행 시간을 비교하고 인쇄합니다.
long start = system.currenttimeMillis (); // 코드를 리모델링하고 전후에 코드를 리모델링하고 Long End = System.CurrentTimeMillis (); System.out.println ( "두 번째 시간 :"+(END-Start));
금식은 확실히 빠릅니다. 얼마나 빠른지에 관해서는 데이터 볼륨 및 기계 구성을 기반으로 관련 비교를해야합니다.
프로젝트 소스 코드 : https://gitee.com/52itstyle/spring-data-jpa
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.