最后还是用了Mybatis,感觉更加灵活些
初步入门
可以参考:程序猿DD的这篇文章
Spring Boot中使用Spring-data-jpa让数据访问更简单、更优雅
利用自动生成jpa实体类
http://blog.csdn.net/liu_yulo...
https://stackoverflow.com/que...
entity代码中的字段与数据库物理字段保持一致
字段命名默认策略:
org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
entity中userAge,spring在访问的时候会变成user_age
要做到与数据库字段命名一致,需要加上以下配置
spring:
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
repository 中 获取某一行,某个字段的值
@Query(value = "select title FROM rule WHERE appId=?1 AND level=?2", nativeQuery = true)
String getTitleByAppIdAndLevel(int appId, int level);
动态多条件分页查询
首先,Repository需要集成JpaSpecificationExecutor<T>,例子:
public interface OrderRepo extends JpaRepository<OrderEntity, Integer>,JpaSpecificationExecutor<OrderEntity> {
}
Service中查询实例,这里要强调一个事情pageNo是从0开始的
public Kv pageForUser(int userId,int pageNo,int pageSize,Byte status){
PageRequest pageable = new PageRequest(pageNo-1, pageSize);
//通常使用 Specification 的匿名内部类
Specification<OrderEntity> specification = new Specification<OrderEntity>() {
/**
* @param root: 代表查询的实体类.
* @param criteriaQuery: 可以从中可到 Root 对象, 即告知 JPA Criteria 查询要查询哪一个实体类. 还可以
* 来添加查询条件, 还可以结合 EntityManager 对象得到最终查询的 TypedQuery 对象.
* @param criteriaBuilder CriteriaBuilder 对象. 用于创建 Criteria 相关对象的工厂. 当然可以从中获取到 Predicate 对象
* @return Predicate 类型, 代表一个查询条件.
*/
@Override
public Predicate toPredicate(Root<OrderEntity> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicates = new ArrayList<>();
Path<Integer> userIdPath = root.get("userId");
predicates.add(criteriaBuilder.equal(userIdPath,userId));
if (status != null) {
Path<Byte> statusPath = root.get("status");
predicates.add(criteriaBuilder.equal(statusPath,status));
}
return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
}
};
Page<OrderEntity> page = orderRepo.findAll(specification,pageable);
List<OrderEntity> list = orderRepo.findAll(specification);
Kv pageData = new Kv();
//总记录数
pageData.set("total",page.getTotalElements());
//总页数
pageData.set("pageCount",page.getTotalPages());
//当前第几页
pageData.set("pageNo",page.getNumber()+1);
//每页记录数
pageData.set("pageSize",page.getSize());
//当前页面的List
pageData.set("pageList",page.getContent());
//当前页面的List
pageData.set("pageRowCount",page.getNumberOfElements());
return pageData;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。