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。
实例代码:
- @Schema("PUBLIC")
- @Table("MEMBER")
- public class QMember extends RelationalPathBase<QMember> {
- private static final long serialVersionUID = 448912875;
- public static final QMember member = new QMember("MEMBER");
- public final StringPath address = createString("ADDRESS");
- public final StringPath city = createString("CITY");
- public final StringPath country = createString("COUNTRY");
- public final StringPath email = createString("EMAIL");
- public final StringPath firstName = createString("FIRST_NAME");
- public final StringPath lastName = createString("LAST_NAME");
- public final StringPath memberId = createString("MEMBER_ID");
- public final StringPath password = createString("PASSWORD");
- public final StringPath phone = createString("PHONE");
- public final PrimaryKey<QMember> memberPk = createPrimaryKey(memberId);
- public QMember(String variable){
- super(QMember.class, forVariable(variable));
- }
- public QMember(BeanPath<? extends QMember> entity){
- super(entity.getType(), entity.getMetadata());
- }
- public QMember(PathMetadata<?> metadata){
- super(QMember.class, metadata);
- }
- }
- private static void queryFromDsl(Connection conn) {
- QMember qm = QMember.member;
- SQLTemplates dialect = new HSQLDBTemplates();
- SQLQuery query = new SQLQueryImpl(conn, dialect);
- List<String> lastNames = query.from(qm).list(qm.lastName);
- // select last_name from member
- System.out.println(lastNames);
- SQLQuery query2 = new SQLQueryImpl(conn, dialect);
- System.out.println(query2.from(qm).count());
- // select count(*) from member
- SQLQuery query3 = new SQLQueryImpl(conn, dialect);
- List<Object[]> results = query3.from(qm).orderBy(qm.lastName.desc()).list(qm.firstName, qm.lastName);
- for (Object[] o : results) {
- System.out.println(ToStringBuilder.reflectionToString(o, ToStringStyle.SIMPLE_STYLE));
- }
- // select first_name, last_name from member order by last_name desc
- SQLQuery query4 = new SQLQueryImpl(conn, dialect);
- List<Object[]> members = query4.from(qm).where(qm.lastName.like("last%")).list(qm.all());
- for (Object[] o : members) {
- System.out.println(ToStringBuilder.reflectionToString(o, ToStringStyle.SIMPLE_STYLE));
- }
- // select * from member where last_name like 'last%'
- }