文控项目使用了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层,在某个方法中加上查询条件的判断
代码示例:
Specification
@Override
public PredicatetoPredicate(Root
Predicate predicate =criteriaBuilder.conjunction();
SimpleDateFormat sdf=newSimpleDateFormat("yyyy-MM-dd"); if(null !=project){
predicate.getExpressions().add(criteriaBuilder.equal(root.
}
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.
}
predicate.getExpressions().add(criteriaBuilder.like(root.
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中类上面的映射到某个表的注解没写