QueryDSL介绍

1,QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查询。

2,Querydsl可以通过一组通用的查询API为用户构建出适合不同类型ORM框架或者是SQL的查询语句,也就是说QueryDSL是基于各种ORM框架以及SQL之上的一个通用的查询框架。

3,借助QueryDSL可以在任何支持的ORM框架或者SQL平台上以一种通用的API方式来构建查询。目前QueryDSL支持的平台包括JPA,JDO,SQL,Java Collections,RDF,Lucene,Hibernate Search。


实例代码:

  1. @Schema("PUBLIC")  
  2. @Table("MEMBER")  
  3. public class QMember extends RelationalPathBase {  
  4.   
  5.     private static final long        serialVersionUID = 448912875;  
  6.   
  7.     public static final QMember      member           = new QMember("MEMBER");  
  8.   
  9.     public final StringPath          address          = createString("ADDRESS");  
  10.   
  11.     public final StringPath          city             = createString("CITY");  
  12.   
  13.     public final StringPath          country          = createString("COUNTRY");  
  14.   
  15.     public final StringPath          email            = createString("EMAIL");  
  16.   
  17.     public final StringPath          firstName        = createString("FIRST_NAME");  
  18.   
  19.     public final StringPath          lastName         = createString("LAST_NAME");  
  20.   
  21.     public final StringPath          memberId         = createString("MEMBER_ID");  
  22.   
  23.     public final StringPath          password         = createString("PASSWORD");  
  24.   
  25.     public final StringPath          phone            = createString("PHONE");  
  26.   
  27.     public final PrimaryKey memberPk         = createPrimaryKey(memberId);  
  28.   
  29.     public QMember(String variable){  
  30.         super(QMember.class, forVariable(variable));  
  31.     }  
  32.   
  33.     public QMember(BeanPathextends QMember> entity){  
  34.         super(entity.getType(), entity.getMetadata());  
  35.     }  
  36.   
  37.     public QMember(PathMetadata metadata){  
  38.         super(QMember.class, metadata);  
  39.     }  
  40.   
  41. }  
构建查询

  1. private static void queryFromDsl(Connection conn) {  
  2.     QMember qm = QMember.member;  
  3.   
  4.     SQLTemplates dialect = new HSQLDBTemplates();  
  5.     SQLQuery query = new SQLQueryImpl(conn, dialect);  
  6.     List lastNames = query.from(qm).list(qm.lastName);  
  7.     // select last_name from member  
  8.     System.out.println(lastNames);  
  9.   
  10.     SQLQuery query2 = new SQLQueryImpl(conn, dialect);  
  11.     System.out.println(query2.from(qm).count());  
  12.     // select count(*) from member  
  13.   
  14.     SQLQuery query3 = new SQLQueryImpl(conn, dialect);  
  15.     List results = query3.from(qm).orderBy(qm.lastName.desc()).list(qm.firstName, qm.lastName);  
  16.     for (Object[] o : results) {  
  17.         System.out.println(ToStringBuilder.reflectionToString(o, ToStringStyle.SIMPLE_STYLE));  
  18.     }  
  19.     // select first_name, last_name from member order by last_name desc  
  20.   
  21.     SQLQuery query4 = new SQLQueryImpl(conn, dialect);  
  22.     List members = query4.from(qm).where(qm.lastName.like("last%")).list(qm.all());  
  23.     for (Object[] o : members) {  
  24.         System.out.println(ToStringBuilder.reflectionToString(o, ToStringStyle.SIMPLE_STYLE));  
  25.     }  
  26.     // select * from member where last_name like 'last%'  
  27. }  

你可能感兴趣的:(spring)