推荐一篇比较好的介绍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来查询。

最新文章

  1. C#/JS 获取二维数组组合
  2. plsql客户端显示菜单等
  3. 字符串反转(StringBuffer)
  4. Java集合的小抄
  5. 读书笔记_Effective_C++_条款二十三:宁以non-member、non-friend替换member函数
  6. java Socket使用注意
  7. JQ 事件
  8. JavaScript学习笔记2-数组对象
  9. 【百度地图API】关于如何进行城市切换的三种方式
  10. Sublime text3 设置的中文翻译
  11. IOS微信点击input弹出输入法,关闭后页面留白解决方案
  12. ORACLE存储过程定时器例子(存储过程变量赋值)
  13. 报错:The import android.support cannot be resolved
  14. SpringBoot系列之三_一个完整的MVC案例
  15. LeetCode(123):买卖股票的最佳时机 III
  16. pgm终
  17. 死锁与递归锁 信号量 event 线程queue
  18. css一般性
  19. 关于android SDK安装Failed to fetch URL 一点思考
  20. c++ 算法 栅格中两点之间连线

热门文章

  1. java数组实现买彩票(通过标识符进行判断的思想)
  2. TC609 DIV1 (500)
  3. nvm安装nodejs
  4. EditText自动弹出软键盘
  5. 关于Android软键盘把布局顶上去的问题(一)
  6. 6 Specialzed layers 特殊层 第一部分 读书笔记
  7. vim设置默认显示行号
  8. 建设一个能承受500万PV/每天的网站如果计算?
  9. element ui 在vue中使用可能遇到的问题
  10. win7 快捷键 收集