推荐一篇比较好的介绍JPA的文章:使用 Spring Data JPA 简化 JPA 开发


JPA坑1:不支持Limit查询

JPA是不支持Limit分页查询,而我们有时又因为某些原因不想用JPA提供的分页功能,或者他提供的分页功能还不能满足我们特定的需求,那么就需要自定义我们的查询,方法如下:


  1. /**
  2. *
  3. * ClassName: ADTemplateDaoSpecific <br/>
  4. * Reason: TODO 该接口为模板的CRUD操作的自定义特制接口. <br/>
  5. * date: 2015年7月6日 上午10:12:43 <br/>
  6. *
  7. * @author whc
  8. * @version 1.0
  9. * @since JDK 1.8
  10. */
  11. interface ADTemplateDaoSpecific{
  12. /**
  13. *
  14. * findAllByPageNum:根据分页查询模板资料. <br/>
  15. *
  16. * @author whc
  17. * @param start
  18. * @param end
  19. * @return
  20. * @since JDK 1.8
  21. */
  22. public List<ADTemplate> findAllThroughPageNum(int start,int end) ;
  23. }
  24. /**
  25. *
  26. * ClassName: ADTemplateDaoSpecificImpl <br/>
  27. * Reason: TODO 模板的CRUD操作的自定义特制接口的实现类. <br/>
  28. * date: 2015年7月9日 下午3:53:43 <br/>
  29. *
  30. * @author whc
  31. * @version 1.0
  32. * @since JDK 1.8
  33. */
  34. @Repository
  35. class ADTemplateDaoImpl implements ADTemplateDaoSpecific{
  36. @PersistenceContext
  37. private EntityManager entityManager;
  38. /**
  39. * TODO 分页查询.
  40. * Ps:JPA不支持limit关键字
  41. * @see com.iot.fileDownLoad.dao.ADTemplateDaoSpecific#findAllByPageNum(int, int)
  42. */
  43. public List<ADTemplate> findAllThroughPageNum(int start, int end) {
  44. StringBuffer sql = new StringBuffer("from ADTemplate where isDelete = '0'");
  45. javax.persistence.Query query = entityManager.createQuery(sql.toString());
  46. query.setFirstResult(start);
  47. query.setMaxResults(end);
  48. return query.getResultList();
  49. }
  50. }

注意,此时需要使用@PersistentContext注解注入EntityManager。然后在实现类中我们就可以利用它来实现分页。

JPA坑2:函数的命名必须规范

可以知道,JPA的原理主要是靠函数的命名。所以就要求我们的DAO层函数名字十分的规范,注意点有2:

一是:命名的驼峰法则,如 userInfo , myCar 这样等。
二是:命名的时候注意有Byxxx,其中这个xxx最好是该实体的属性,比如说
public List<TemplatePath> getTemplatePathByTemplateId(@Param("id")int id);

这样的名字就可以知道是根据id来查询。

JPA的一些坑的更多相关文章

  1. spring data jpa碰到的坑

    1.不能从别的类的repository那里 执行另一个类的sql,这样映射会失败. 2.有entity,就要有repository,并且还要有id注解 3.还要多表联查未测试,估计要用map去映射出来 ...

  2. 工具篇-Spring boot JPA多数据源

    写这篇博文是因为这个东西坑太多,首先说明下边实现的多数据源不是动态切换的,应该算是静态的. 坑一.pom文件 pom中spring boot以及mysql connector的版本一定要注意. < ...

  3. SpringBoot系列——Spring-Data-JPA

    前言 jpa是ORM映射框架,更多详情,请戳:apring-data-jpa官网:http://spring.io/projects/spring-data-jpa,以及一篇优秀的博客:https:/ ...

  4. Rest风格中关于JPA使用懒加载的坑

    公司最近使用的ORM框架是JPA实现产品使用的是hibernate,曾经看过一篇博客上面说的是如果团队里面没有一个精通hibernate的人,那么最好不要使用它,我现在是深刻的体会到了.但是使用什么框 ...

  5. Spring MVC+Hibernate JPA搭建的博客系统项目中所遇到的坑

    标签: springmvc hibernate 2016年12月21日 21:48:035133人阅读 评论(0) 收藏 举报  分类: Spring/Spring MVC(6)  Hibernate ...

  6. Java Data JPA +hibernate 保存或者是查询遇到的坑

    由于项目需求,接触了Java Data JPA +hibernate,它的调用方式是controller调用service,service有实现的接口serviceimpl,serviceimpl调用 ...

  7. Spring Data JPA使用findAllOrderBy时踩的坑

    Spring Data JPA使用findAllOrderBy时踩的坑 按照以往的编程经验,我的写法是这样的: List<ActivityEntity> findAllOrderByWis ...

  8. 最近项目中使用Spring data jpa 踩过的坑

    最近在做一个有关OA项目中使用spring data JPA 操作数据库,结果遇到了补个不可思议的麻烦.困惑了好久. 首先看一下问题吧,这就是当时测试“设置角色时,需要首先删除该用户已经拥有的角色时” ...

  9. jpa的@Query中"?"占位符的使用小坑

    今天使用@Query自定义查询语句,出现了一个错误: java.lang.IllegalArgumentException: Parameter with that position [1] did ...

随机推荐

  1. 464 Can I Win 我能赢吗

    详见:https://leetcode.com/problems/can-i-win/description/ C++: class Solution { public: bool canIWin(i ...

  2. ambari集群里如何正确删除历史修改记录(图文详解)

    不多说,直接上干货! 答:这些你想删除的话得得去数据库里删除,最好别删除 .  现在默认就是使用好的配置               欢迎大家,加入我的微信公众号:大数据躺过的坑        人工智 ...

  3. [转]为革命保护视力 --- 给 Visual Studio 换颜色

    本文转自:http://www.cnblogs.com/stg609/p/3723968.html “为革命,保护视力,预防近视,眼保健操开始......” 这个应该是最老版本的眼保健操了,你听过? ...

  4. Android开发学习——高德地图的实现

    1.首先做好下边的准备: 1.1  http://lbs.amap.com/   注册账号 1.2  下载 定位sdk 和 地图sdk 下载后是这样的 1.3  对下载的进行解压 将他们加入 中,对每 ...

  5. h5学习-webstorm工具的激活

    这里有个快速激活webstorm的方法:http://jingyan.baidu.com/article/9f63fb919674f2c8400f0e9a.html h5的轮廓工具:https://g ...

  6. NGUI利用深度测试实现新手引导遮罩

    实现原理:实际上就是先利用渲染队列渲染,然后再利用ZTest,改变渲染的遮挡关系. PS:Depth Testing:深度测试,也叫深度缓冲.只有最靠近观察者的物体会被绘制.深度即Z,该值越小表示离观 ...

  7. Visual SVN自动给文件加锁

    在使用SVN作为版本控制器的时候,在VS里安装VISUALSVN插件,当修改文件公共文件的时候需要先Get Lock,如果对于多次操作这个鼠标操作显得是一些复杂,自动给文件加锁的操作实际是给文件加一个 ...

  8. ZooKeeper系列(三)

    前面虽然配置了集群模式的Zookeeper,但是为了方面学建议在伪分布式模式的Zookeeper学习Zookeeper的shell命令. 一.Zookeeper的四字命令 Zookeeper支持某些特 ...

  9. CAD使用SetxDataString写数据(com接口)

    主要用到函数说明: MxDrawEntity::SetxDataString 写一个字符串扩展数据,详细说明如下: 参数 说明 [in] BSTR val 字符串值 szAppName 扩展数据名称 ...

  10. JavaSE-09 继承

    学习要点 继承的优点和实现 子类重写父类方法 继承下构造方法的执行过程 抽象类和抽象方法的使用 final修饰属性.方法和类 继承的优点和实现 宠物管理系统优化设计 宠物管理系统中的类有什么问题? 使 ...