一、SpringDataJPA
- SpringDataJpa概念:
它是JPA规范的再次封装抽象,底层还是使用了Hibernate的JPA技术实现,引用JPQL的查询语句 ,是属于Spring的生成体系中的一部分。
- 在applicationcontext.xml中配置springDataJpa的信息
- 实现JpaRepository接口后的基本功能
(1)普通的CRUD
(2)分页排序功能
(3)根据条件进行查询:规范创建查询方法,一般按照java驼峰式书写规范加一些特定关键字
(4)@Query注解查询:在Respository方法中一定要按照查询方法的命名规则,其实是比较麻烦的如果我们想不遵循 查询方法的命名规则,还可以使用@Query的方法进行查询。使用时将@Query定义在Respository的方法之上。
- 接口JpaSpecificationExecutor的认识
JPA规则执行者,用于动态生成Query来满足我们业务中的各种复杂场景。所有查询都要求传入一个Specification对象。
- 接口JpaSpecificationExecutor的方法
public interface JpaSpecificationExecutor<T> {
T findOne(Specification<T> spec);
List<T> findAll(Specification<T> spec);
Page<T> findAll(Specification<T> spec, Pageable pageable);
List<T> findAll(Specification<T> spec, Sort sort);
long count(Specification<T> spec);
}
- 要使用这个接口中的方法,首先让我们的接口也去继承这个接口
public interface EmployeeRepository extends JpaRepository<Employee,Long>,JpaSpecificationExecutor<Employee> {
}
- 可以进行单条件、多条件和条件查询+分页排序功能,注意都要传入一个Specification对象。
- jpa-spec插件
动态生成Query功能的一个封装版,完成查询与分页会很简便。
- 功能
兼容Spring Data Jpa 和JPA2.1接口。
Equal/NotEqual/Like/NotLike/In/NotIn支持可变参数,Equal/NotEqual 支持空(Null)值。
每个条件支持关联查询。
支持自定义条件查询。
条件构建器。
支持分页和排序。
- 在pom.xml中引入相应的jar包
- 多条件查询
@Test
public void testSpecFind02() {
Specification<Employee> spec = Specifications.<Employee>and().like("username", "%1%")
.like("email","%2%").lt("age", 20).build();
List<Employee> emps = employeeRepository.findAll(spec);
for (Employee emp : emps) {
System.out.println(emp);
}
}
- Query查询条件
就是接收前台传过来的值
- 用户传的数据有0-n个(我们需要去判断)
- 咱们必需要准备一个对象接收用户传过来的数据(使用Query对象)
- 分页的条件对我们来说也是封装到Query对象中的
二、五福商城项目中主要使用到的技术。
- 三大框架集成。
spring+springvc+springdatajpa
- 主要使用到的技术点:
jquery、easyui,highcharts、shiro安全权限框架、velocity、poi(easypoi)、easycoder 等等还有一些小的知识。
- 项目开发设计到的人数。
整个项目是一共6个人开发。其中1个美工,2个前端,2个后台,1个测试,总共花了将近4个月的时间。
- 我主要负责的是后台的核心业务模块,基础模块方面也有一点涉及。其中最主要的是库存这一模块。
采购入库单(数据增加),销售出库单(数据减少),退货单,换货单、调货单、报损报溢、盘点单
退货单:我们退给供应商(减少),用户退给我们(增加)
换货单:即会增加也会减少
调货单(调拨单):从一个仓库到另一个仓库(增加减少)
报损单:货品出问题
报溢单:库存中商品变多了
盘点单:清货(周期性)->全盘、抽盘功能。添加盘点单(抽盘还要选择条件)->(确定)生成盘盈盘亏单,->审核:抽盘根据条件进行判断,修改系统中仓库的有错误的产品数,并生成一张excel表做留底。
- 在做的时候还是遇到不少的麻烦,最主要的是在盘点方面。可能当时对这方面的业务不是很了解。
- 主要遇到的困难有:
(1) 数据丢失问题:
修改保存的时候,密码和头像数据会丢失。
主要是利用springMVC框架帮我们解决。通过id拿到数据库中员工的值,然后将前台传过来的值进行设置覆盖。字段改变了的就设置后覆盖原来的数据,没有改变的就不管。
注解@ModelAttribute(“名字随便”)
作用:在执行任何一个路径(方法)之前,都会先来执行这个方法
(2)点击修改部门时,报n-To-n的错误
原因:我们修改了一个持久化对象的id。
凡是要传过来的关联对象,都把它清空.解决N-TO-N问题