관계형 데이터베이스 운영 언어와 객체 지향 언어의 차이로 인해 데이터베이스와 Java 응용 프로그램간에 다리를 구축하는 데 많은 시간을 소비해야합니다. 일반적으로 자체 매핑 레이어를 작성하거나 최대 절전 모드와 같은 타사 ORM (Object Relational Mapper) 객체 관계 매핑 프레임 워크를 사용할 수 있습니다. ORM 프레임 워크는 사용하기가 매우 편리하지만 프레임 워크 작동 데이터베이스의 성능을 올바르게 구성하고 개선하기는 쉽지 않습니다. ORM 프레임 워크는 종종 응용 프로그램 성능을 저하시킵니다. 최근에 나는 새로운 오픈 소스 프로젝트 인 Speedment를 기여하여 Java 8을 사용하여 데이터베이스 애플리케이션을 개발하는 것이 더 빠르고 효율적입니다.
속도는 ORM을 사용하여 데이터베이스를 작동하는 옵션입니다. 과거에는 데이터베이스를 작동하기 위해 100 줄의 Java 코드가 필요했습니다. Java 8에서는 한 줄의 코드 만 있으면됩니다.
1990 년대 후반, Java를 사용하여 데이터베이스 응용 프로그램을 개발했을 때, 예외, 유형 변환 등과 같은 많은 코드 논리가 직접 작성해야했습니다. 많은 변경 사항 이후 이러한 코드는 유지 관리 및 확장이 어려워졌습니다.
관계형 데이터베이스 운영 언어와 객체 지향 언어의 차이로 인해 데이터베이스와 Java 응용 프로그램간에 다리를 구축하는 데 많은 시간을 소비해야합니다. 일반적으로 자체 매핑 레이어를 작성하거나 최대 절전 모드와 같은 타사 ORM (Object Relational Mapper) 객체 관계 매핑 프레임 워크를 사용할 수 있습니다. ORM 프레임 워크는 사용하기가 매우 편리하지만 프레임 워크 작동 데이터베이스의 성능을 올바르게 구성하고 개선하기는 쉽지 않습니다. ORM 프레임 워크는 종종 응용 프로그램 성능을 저하시킵니다.
최근에 나는 새로운 오픈 소스 프로젝트 인 Speedment를 기여하여 Java 8을 사용하여 데이터베이스 애플리케이션을 개발하는 것이 더 빠르고 효율적입니다.
속도 가란 무엇입니까?
속도는 오픈 소스 프로젝트입니다. Java 8의 새로운 기능을 기반으로 개발 된 새로운 Java 라이브러리입니다.이 프로젝트의 개발 이후 모든 코드는 Java 8으로 작성되었습니다. 속도는 쿼리 데이터베이스에 표준 흐름을 사용하여 개발자가 새로운 쿼리 API를 배우고 JDBC, ResultSet 및 데이터베이스와 관련된 기타 지정된 작업을 고려할 필요가 없습니다.
속도는 기존 데이터베이스를 기반으로 코드를 자동으로 생성합니다. 이러한 방식으로 인해 개발자는 데이터베이스 엔티티에 대한 코드 라인을 작성할 필요가 없습니다. 생성 된 코드에는 Javadocs 도움말 문서도 포함되어있어 개발자가 사용자 나 책과 같은 개체에 대한 엔티티 클래스를 작성하지 못하게합니다. 대신 기존 데이터베이스를 만들거나 사용한 다음 속도와 연결하면됩니다. 그런 다음 속도는 데이터베이스 구조를 분석하여 엔티티 클래스의 코드를 생성합니다.
더 흥미로운 것은 속도가 토끼를 마스코트로 사용한다는 것입니다. 다음 예에서는 "Hare"라는 데이터베이스를 사용하여 속도가 어떻게 사용되는지 보여줍니다. 이 데이터베이스의 테이블 구조는 다음과 같습니다.
mysql> 설명 hase;
+-------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 필드 | 유형 | 널 | 키 | 기본값 | 추가 |
+-------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| id | int (11) | 아니요 | pri | 널 | auto_increment |
| 이름 | 바르 차 (45) | 아니요 | | 널 | |
| 색상 | 바르 차 (45) | 아니요 | | 널 | |
| 나이 | int (11) | 아니요 | | 널 | |
+-------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
세트에 4 줄 (0.01 초)
다음은 데이터베이스 정보를 기반으로 속도에 의해 생성 된 해당 엔티티 클래스입니다 (간결함은 Javadocs를 여기에서 제거했습니다).
Public Interface Hare 확장 엔티티 <Hare> {공개 최종 정적 참조 대용 할 수있는 필드 <HARE, Integer> id = New ReferenceComecomepablefieldImpl <> ( "id", Hare :: GetId, Hare :: SetId); public static referencecomecomparablestringfield <Hare> name = new referencompablestringfieldpl <> "", Hare : : hare :: HARE :: SETNAME); 공개 최종 정적 참조 COMPARABLESTRINGFIELD <HARE> COLOR = NEW CERENCECOMPARABLESTRINGFIELDIMPL <> ( "색상", HARE :: GETCOLOR, HARE :: SETCOLOR); 공개 최종 정적 참조 필드 <HARE, Integer> Age = New reateComparablefieldimpl <( "Age" Hare :: setage); integer getId (); String getName (); String getColor (); integer getage (); Hare SetGID (Integer ID); Hare SetName (String Name); Hare SetColor (String Color); Hare Petage (/** Graph-Like Traversal Methods 제거*/Stream joins rish rish <stroot). findCarrotsByowner (); 스트림 <carrot> findCarrotsByrival (); stream <carrot> findCarrots ();}별도의 기사를 사용하여 SQL 조인 작업 대신에 사용할 수있는 Find*() 메소드의 사용법을 소개합니다.
쿼리 예제
다음 예제는 HARE 테이블의 데이터베이스 정보를 쿼리하는 방법을 보여줍니다.
List <Hare> OldHares = hares.stream ()
.filter (age.greaterthan (8))
.collect (tolist ());
스마트 스트리밍
위의 코드는 HARE 데이터베이스 테이블의 모든 행을 통해 반복 된 것으로 보이지만 실제로는 그렇지 않습니다. 스트림은 지능적입니다. Collect () 작업에 도달하면 필터 작업을 분석하고 8보다 큰 Hare.age를 사용하여 하위 작동을 저장하고 "Age> 8"작동과 동일한 효과를 생성합니다. 여러 필터를 사용하는 경우 스트리밍 작업을 저장하기 위해 병합됩니다. 다음은 스트리밍을 사용한 여러 작업의 또 다른 예입니다.
Long nooldhares = hares.stream ()
.filter (age.greaterthan (8))
.maptoint (Hare :: Getage)
.sorted ()
.세다();
위의 코드에서 스트림이 Count () 작업에 도달하면 자체 파이프 라인을 확인합니다. 먼저, 위의 예에서 연령 조작이 추론되며, 둘째, count () 결과를 변경하지 않고 maptoint () 및 sorted () 조작이 추론되므로 제거 될 수 있으므로이 코드의 작동은 "8 세 이상의 Hare에서 COUNT (*)를 선택하십시오. 즉, 스트림이 SQL로 변환되는 방법에 대해 많은 관심을 갖지 않고도 Java 8 스트림을 사용할 수 있습니다.
다운로드하고 참여하는 방법
Speedment의 API를 사용하는 방법과 프로젝트에서 속도를 사용하는 방법을 배우려면 URL www.speedment.org를 방문하거나 Gitter에 대한 의견을 방문하거나 Github에서 속도 소스 코드를 다운로드하여 자신의 코드를 제공 할 수 있습니다.
요약
초기에 일부 오래된 프로젝트를 되돌아 보면 100 줄 이상의 코드가있는 데이터베이스 클래스는 이제 Java 8을 사용하여 1 줄의 코드로 줄일 수 있습니다. 즉, 반전 후 무어의 법칙입니다. 14 년 (= 7 몰 기간)에, 라인의 수는 약 7 번 절반으로 줄어 듭니다. 이것은 진보입니다!
데이터 흐름이란 무엇입니까?
스트림은 집계 작업 소스를 지원하는 시퀀스의 객체를 나타냅니다. 다음은 데이터 흐름의 특성입니다.
요소 시퀀스 - 스트림은 특정 요소 세트를 순차적으로 제공합니다. 수요의 스트림 페치/컴퓨팅 요소. 요소를 저장하지 않습니다.
소스 - 스트림은 컬렉션, 어레이 또는 I/O 리소스를 입력 소스로 사용합니다.
집계 작업 - 데이터 흐름은 필터, 맵, 리미트, 축소, 찾기, 일치 등과 같은 집계 작업을 지원합니다.
파이프 라인 전송 - 대부분의 스트림 작업 리턴 스트림 자체는 결과를 파이프로 만들 수 있습니다. 이러한 작업을 중간 작업이라고하며 해당 기능은 입력, 프로세스 입력 및 출력을 사용하여 대상으로 돌아가는 것입니다. Collect () 메소드는 터미널 작동이며, 일반적으로 스트림의 끝을 표시하기 위해 파이프 라인 작업의 끝에 존재합니다.
자동 반복 - 스트림 작동은 내부적으로 반복적으로 비교되며, 반복에는 소스 요소를 제공하기 위해 컬렉션이 필요하다는 것이 분명합니다.