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

文控项目使用了Spring Jpa,初次使用,很多要注意的地方,仅供个人笔记。

1.Dao层

  a. Dao层要写成interface,然后继承 JpaRepository,第一个是这个接口有关的实体,第二个参数是这个实体的主键

  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层,在某个方法中加上查询条件的判断

   代码示例:

   Specificationspecification = new Specification() {

    @Override

    public PredicatetoPredicate(Root root, CriteriaQuery criteriaQuery,CriteriaBuilder criteriaBuilder) {

        Predicate predicate =criteriaBuilder.conjunction();

        SimpleDateFormat sdf=newSimpleDateFormat("yyyy-MM-dd"); if(null !=project){         

        predicate.getExpressions().add(criteriaBuilder.equal(root.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.get("receiveDate"),endDate));

        }

     predicate.getExpressions().add(criteriaBuilder.like(root.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 data使用的基本知识和注意事项)