TinyQuery是一个简单易用的JPQL Query Builder。灵感来自于使用spring data JPA和JPA自带的criteria query时遇到的诸多不便。
主要特点:
- 简单、易用
- 零学习成本
- 可读性接近SQL语句
- 灵活的方法链式的书写
Github: https://github.com/sebastian1118/tinyspring
假设我们有一个Entity叫 User
,我们需要一个对应的DAO来操作这个Entity。
只需要简单的创建一个UserDao
,继承AbstractDao<User>
,实现其中的方法getEntityClass()
并返回DAO要管理的Entity即可。
@Repository
@Transactional
public class UserDao extends AbstractDao<User> {
@Override
protected Class<User> 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<User> 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();