java spring jpa_Spring Data JPA 使用感受

public interface CrudRepository

extends Repository {

T save(T entity);

T findOne(ID primaryKey);

Iterable findAll();

Long count();

void delete(T entity);

boolean exists(ID primaryKey);

// … more functionality omitted.

}

2、遵循JPA规范,同时也提供了灵活的数据访问方式;

Spring Data JPA能够很好的兼容目前JPA2.0规范,在定义Entity类的时候,可以在类中定义标准的@NamedQuery查询,也可以在Spring Data JPA的Repository类的方法中定义@Query查询。

标准的JPA对@NamedQuery定义如下:

@Entity

@NamedQuery(name="Country.findAll", query="SELECT c FROM Country c")

public class Country {

...

}

Spring Data JPA对@Query定义如下:

public interface CountryRepository extends JpaRepository {

@Query("SELECT c FROM Country c")

Country findAll();

}

通过以上定义,在Entity中即可省略掉@NamedQuery定义,让Entity类看起来更清爽。

3、通过方法名即可自动生成HQL语句;

如果你使用过Spring Data JPA,那么一定会对其提供的方法名自动转换为HQL感到十分有意思,这也是Spring Data JPA让人觉得很方便的地方,下面给两个转换规则的例子:

Keyword|          Sample               |                JPQL snippet

And     |  findByLastnameAndFirstname|… where x.lastname = ?1 and x.firstname = ?2

Or      |  findByLastnameOrFirstname    |… where x.lastname = ?1 or x.firstname = ?2

具体转换规则可参考官方文档。

4、通过接口自动注入实现类,实现非常简单。

我们只需要定义一个类似DAO的接口类,并继承Spring Data JPA提供的Repository接口类,一切就大功告成了,不需要编写任何一行代码,你的DAO接口类就具备了增删查改、分页、记录数统计等功能,对的,一切就那么简单!

以上是本人对Spring Data JPA使用上的一些感受,如果读者对其很感兴趣,可进一步阅读:

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-07-19 09:05

浏览 31578

评论

public List findAll(String username) {

List pageProducts = ulproductDao

.findAll(queryAllByMutiCondition(username));

return pageProducts;

}

private  Specification queryAllByMutiCondition(

final String username) {

return new Specification() {

@Override

public Predicate toPredicate(Root p,

CriteriaQuery> q, CriteriaBuilder cb) {

//q = cb.createQuery(Ulproduct.class);

//p = q.from(Ulproduct.class);

q.multiselect(p.get("productsname"),

cb.sum(p. get("stocksnum")),

cb.sum(p. get("price")),

cb.sum(p. get("cost")));

q.where(cb.equal(p.get("username"),

StringUtils.trim(username)));

q.groupBy(p.get("productsname"));

q.getGroupRestriction();

return null;

}

};

}

红色部分根本没起作用,很诡异

我的代码是这样的,但是又问题

public List findAll(String username) {

List pageProducts = ulproductDao

.findAll(queryAllByMutiCondition(username));

return pageProducts;

}

private  Specification queryAllByMutiCondition(

final String username) {

return new Specification() {

@Override

public Predicate toPredicate(Root p,

CriteriaQuery> q, CriteriaBuilder cb) {

//q = cb.createQuery(Ulproduct.class);

//p = q.from(Ulproduct.class);

q.multiselect(p.get("productsname"),

cb.sum(p. get("stocksnum")),

cb.sum(p. get("price")),

cb.sum(p. get("cost")));

q.where(cb.equal(p.get("username"),

StringUtils.trim(username)));

q.groupBy(p.get("productsname"));

q.getGroupRestriction();

return null;

}

};

}

动态的分组统计查询怎么实现呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值