zoukankan      html  css  js  c++  java
  • JPA的一些坑

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



  • 相关阅读:
    【软件工程】个人项目作业
    【软件工程】个人博客作业
    【软件工程】第一次作业-热身!
    OO第四单元总结
    OO第三单元总结
    OO第二单元总结
    OO第一单元总结
    提问回顾与个人总结
    [技术博客] Django中文件的保存与访问
    OO第三单元博客作业
  • 原文地址:https://www.cnblogs.com/jpfss/p/10881881.html
Copyright © 2011-2022 走看看