TinyQuery 简单易用的JPQL Query Builder

TinyQuery是一个简单易用的JPQL Query Builder。灵感来自于使用spring data JPA和JPA自带的criteria query时遇到的诸多不便。

主要特点:

  • 简单、易用
  • 零学习成本
  • 可读性接近SQL语句
  • 灵活的方法链式的书写

Github: https://github.com/sebastian1118/tinyspring

假设我们有一个Entity叫 User,我们需要一个对应的DAO来操作这个Entity。
只需要简单的创建一个UserDao,继承AbstractDao,实现其中的方法getEntityClass() 并返回DAO要管理的Entity即可。

@Repository
@Transactional
public class UserDao extends AbstractDao {

    @Override
    protected Class getEntityClass() {   
        return User.class;
    }
}

一个简单的DAO写好了。这个DAO已经从父类里继承了许多开箱即用的方法,包括 persist() merge() remove() findById() findAll() totalCount() 等等。

如果你想构造新的查询,调用 beginQuery() 开始构造查询。

例如:

如果你想查找一个叫’bob’的用户:

import static org.triiskelion.tinyspring.dao.TinyPredicate.equal;

User result = userDao.beginQuery()
                   .select()
                   .where(equal("username", "bob"))
                   .getFirstResult();

如果你想根据用户名密码鉴权:

boolean authSucess = userDao.beginQuery()
                          .select()
                          .where(equal("username","bob"))
                          .and(equal("password","123456"))
                          .hasResult();

  boolean authSucess = userDao.beginQuery().select()
                          .where(and(equal("username", "bob"), equal("password", "123456")))
                          .hasResult();

    boolean authSucess = userDao.beginQuery().select()
                          .where(equal("username", "bob").and(equal("password", "123456")))
                          .hasResult();

三种写法都是正确的。

如果要写非常复杂的查询或者只是更喜欢JPQL,可以这样写:

List resultList = userDao.begeinQuery()
                               .query("SELECT m FROM User m WHERE m.signInTime BETWEEN :a AND :b")
                               .param("a", new Date("2014-07-01"))
                               .param("b", new Date("2014-07-31"))
                               .getResultList();

你可能感兴趣的:(java)