Java에 좋은 동적 SQL 빌더 라이브러리가 있습니까? [닫은]
누구나 Squiggle 과 같은 Java 용 좋은 SQL 빌더 라이브러리를 알고 있습니다 . 가급적이면 적극적으로 개발중인 프로젝트입니다.
가급적 Zend_Db_Select 와 같은 구문 을 사용하면 다음과 같은 쿼리를 만들 수 있습니다.
String query = db.select().from('products').order('product_id');
Querydsl 및 jOOQ 는 두 가지 인기있는 선택입니다.
jOOQ 를 추천 할 수 있습니다 . DSL 및 매우 사용자 정의가 가능한 리버스 엔지니어링 접근 방식을 제공합니다.
jOOQ는 유창하고 부가 인 DSL에서 복잡한 SQL, 유형 레코드, 소스 코드 생성, 활성 레코드, 저장 프로 시저 생성, 고급 데이터 유형 및 Java를 결합합니다.
ddlutils 가 최선의 선택입니다 : http://db.apache.org/ddlutils/api/org/apache/ddlutils/platform/SqlBuilder.html
다음은 예제 (groovy)를 만듭니다.
Platform platform = PlatformFactory.createNewPlatformInstance("oracle");//db2,...
//create schema
def db = new Database();
def t = new Table(name:"t1",description:"XXX");
def col1 = new Column(primaryKey:true,name:"id",type:"bigint",required:true);
t.addColumn(col1);
t.addColumn(new Column(name:"c2",type:"DECIMAL",size:"8,2"));
t.addColumn( new Column(name:"c3",type:"varchar"));
t.addColumn(new Column(name:"c4",type:"TIMESTAMP",description:"date"));
db.addTable(t);
println platform.getCreateModelSql(db, false, false)
//you can read Table Object from platform.readModelFromDatabase(....)
def sqlbuilder = platform.getSqlBuilder();
println "insert:"+sqlbuilder.getInsertSql(t,["id":1,c2:3],false);
println "update:"+sqlbuilder.getUpdateSql(t,["id":1,c2:3],false);
println "delete:"+sqlbuilder.getDeleteSql(t,["id":1,c2:3],false);
//http://db.apache.org/ddlutils/database-support.html
Hibernate Criteria API (일반 SQL은 매우 강력하고 활발한 개발 중) :
List sales = session.createCriteria(Sale.class)
.add(Expression.ge("date",startDate);
.add(Expression.le("date",endDate);
.addOrder( Order.asc("date") )
.setFirstResult(0)
.setMaxResults(10)
.list();
다음 라이브러리를 사용할 수 있습니다.
https://github.com/pnowy/NativeCriteria
라이브러리는 Hibernate "create sql query"위에 구축되어 Hibernate에서 지원하는 모든 데이터베이스를 지원합니다 (Hibernate 세션 및 JPA 공급자가 지원됨). 빌더 패턴 등을 사용할 수 있습니다 (개체 매퍼, 결과 매퍼).
github 페이지에서 예제를 사용할 수 있으며 Maven 중앙에서 사용할 수 있습니다.
NativeCriteria c = new NativeCriteria(new HibernateQueryProvider(hibernateSession), "table_name", "alias");
c.addJoin(NativeExps.innerJoin("table_name_to_join", "alias2", "alias.left_column", "alias2.right_column"));
c.setProjection(NativeExps.projection().addProjection(Lists.newArrayList("alias.table_column","alias2.table_column")));
참고 URL : https://stackoverflow.com/questions/5620985/is-there-any-good-dynamic-sql-builder-library-in-java
'IT' 카테고리의 다른 글
| 단위 테스트를 위해 비공개 메서드를 공개하는 중입니다. 좋은 생각인가요? (0) | 2020.08.18 |
|---|---|
| HTML 날짜 입력 태그에서 날짜 형식을 설정하는 방법은 무엇입니까? (0) | 2020.08.18 |
| R에서`=`와`<-`의 차이점은 무엇입니까? (0) | 2020.08.18 |
| PHP에서 MySQL API를 혼합 할 수 있습니까? (0) | 2020.08.18 |
| R MarkDown과 R NoteBook의 차이점 (0) | 2020.08.18 |