您的位置:首页 > 编程语言 > Java开发

spring jpa data使用的基本知识和注意事项

2016-07-14 10:50 477 查看
文控项目使用了Spring Jpa,初次使用,很多要注意的地方,仅供个人笔记。
1.Dao层
  a. Dao层要写成interface,然后继承 JpaRepository<Receiver,Long>,第一个是这个接口有关的实体,第二个参数是这个实体的主键
  b.Dao层接口的返回值可以是单个对象,List<对象>,Page<对象>,其中Page是分页的结果,在所有参数列表的后面要增加分页参数Pageable
     在service层分页参数:
  if (sortOrder.equals("ASC")) {
direction = Sort.Direction.ASC;
}

  Pageable pageable = new PageRequest(pageIndex, pageSize, direction, sortField)


  c.可以自己写sql语句进行数据库操作
   用@Query("sql语句")注意这个sql是HQL(Hibernate Query Language)
   例如:(注意:“:”应该紧跟在变量的前面,而不是等号后面,代表占位符)
    SElECT r FROMReceiveFile r WHERE r.alive = 1 AND r.project.id = :project_id ANDr.engNoInfo.id= :engNoInfo_id  order by r.DCNCode DESC
  d.方法名的设置:findByProjectAndProjectRole,然后从findBy开始解析,后面跟属性名,把属性名的首字母变大写,因此在entity中属性的命名要用驼峰法,即首字母小写,
     否则框架无法解析
  e.当遇到需要根据条件来判断是否有某个条件判断时,可以写原生的sql
   步骤1:dao层的接口还要继承  JpaSpecificationExecutor<对象>,
   步骤2:service层,在某个方法中加上查询条件的判断
   代码示例:

   Specification<ReceiveFile>specification = new Specification<ReceiveFile>() {
    @Override
    public PredicatetoPredicate(Root<ReceiveFile> root, CriteriaQuery<?> criteriaQuery,CriteriaBuilder criteriaBuilder) {
        Predicate predicate =criteriaBuilder.conjunction();
        SimpleDateFormat sdf=newSimpleDateFormat("yyyy-MM-dd"); if(null !=project){         
        predicate.getExpressions().add(criteriaBuilder.equal(root.<Project>get("project"),project));
   }
    if(null!=endDateStr1&& !endDateStr1.equals("")&&(null==startDateStr1 ||startDateStr1.equals(""))){
            Date endDate=null;
            try {
                endDate =sdf.parse(endDateStr1);
            } catch (ParseException e) {
                e.printStackTrace();
            }        predicate.getExpressions().add(criteriaBuilder.lessThan(root.<Date>get("receiveDate"),endDate));
        }
     predicate.getExpressions().add(criteriaBuilder.like(root.<String>get("name"),"%"+nameStr+"%"));
              return criteriaBuilder.and(predicate);
    }
}; 
      return  receiveFileDao.findAll(Specifications.where(specification), newPageRequest(pageIndex, pageSize, sort));
2.Service层
  a.类的上面要加上注解@Component,需要使用的dao层也要加注解@Autowired

  b.其它地方跟普通的service一样

3.Controller层

  a.类的上面要加注解@Controller需要用到的service层加注解@Autowired

  b.调用的接口上面加注解

     @RequestMapping(value=”/project/engno/fileAuth/new”,method=”post”)指明路径和方法类型

     @ResponseBody

   c.方法参数

      如果是方法体中传过来的参数前面加注解@RequestBody参数类型 参数名字

      如果是直接跟在url后面传过来的就加注解@RequestParam

4.Entity层

   a.类上面加注解

      @JsonIgnoreProperties(ignoreUnknown=true)

      @Entity

      @Table(name=”FILEAUTH”)  指明映射到数据库中的哪个表

   b.对于自增的主键加注解

      @Id

      @GeneratedValue(Strategy =GenerationType.AUTO)

          public Long id;

   c.对于外键加注解

      @ManyToOne  两个实体直接的关系,一般是多对一

      @JoinColumn(name=”project_id”) 指明与哪张表的哪个属性关联

   d.对于普通的属性加注解

      @Column

  遇到的常见错误的原因:

   1.    属性配置文件中数据的参数错误,例如数据源的url和密码等

   2.    controller层中参数的注解忘记写

   3.    entity中类上面的映射到某个表的注解没写

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring jpa