SpringBoot2.0.3 集成Spring data jpa 完成增删改查的功能实现

SpringBoot框架的搭建就不在说了,文章很多,jpa支持OneToOne,OneToMany,ManyToOne,ManyToMany的配置,在开发上相当效率,另外Jpa在没有实体的情况下执行Sql查询,不需要映射,非常强大。

下面介绍一下jpa结合java1.8的一些函数编程思想。

1.首先编写一个BaseRepository

@NoRepositoryBean
public interface BaseRepository<T, ID extends Serializable> extends Repository<T, ID> {

	Optional<T> findOne(ID id);
	
	<S extends T> S save(S entity);

	Optional<T> findById(ID primaryKey);

	Iterable<T> findAll();

	long count();

	void delete(T entity);

	boolean existsById(ID primaryKey);
}

2,编写实体类

@Entity(name = "Student")   
public class Student implements Serializable{    
	private static final long serialVersionUID = 5537592547914489373L;	
	@Id  
    @GeneratedValue  
    private Integer id;
    private String name; 
    private Integer age;  
    private String sex;  
    private String phone; 
    private String address;

3,编写DAO层

public interface StudentRepository extends BaseRepository<Student, Integer>{

	List<?> findByNameLike(String surname);

	List<?> findAll(Specification<Student> specification);

	Optional<Student> findOne(Integer id);

	Optional<Student> findByName(String name);

	@Query("SELECT id,address,age,classNo,name,phoneNum,sex FROM Student ")
	Stream<?> streamAllStudents();

	@Async
	CompletableFuture<List<?>> readAllBy();
	
}

4,Service层

@Service
public class StudentService {

	@Autowired
	private StudentRepository studentRepository;

	public List<?> findAll() {
		return studentRepository.findAll(null);
	}

	public Student getStudent(int id) {
		Optional<Student> findOne = studentRepository.findOne(id);
		Student student = findOne.get();
		return student;
	}

	@Transactional
	public List<?> streamAllStudents() {
		List<?> studentList;
		try (Stream<?> customers = studentRepository.streamAllStudents()) {
			studentList = customers.collect(Collectors.toList());
		}
		return studentList;
	}

	public List<?> readAllBy() throws InterruptedException, ExecutionException {
		CompletableFuture<List<?>> future = studentRepository.readAllBy();
		CompletableFuture.supplyAsync(this::streamAllStudents);
		return future.get();
	}

}

5,WEB层

@RestController
@RequestMapping("/springboot_jpa")
public class StudentWeb {

	@Autowired
	private StudentService studentService;

	// 找出所有的学生
	@RequestMapping("/student/findAll")
	public List<?> findAll() {
		return studentService.findAll();
	}

	@RequestMapping("/student/jdk8text")
	private Student getOne() {
		Student student = studentService.getStudent(1);
		return student;
	}

	/**
	 * 返回的是集合中的对象
	 * 
	 * @return
	 * @Description:
	 * @author Bern_Liu
	 * @version 创建时间:2018年6月22日 下午2:09:18
	 */
	@RequestMapping("/student/getListStudent")
	private List<?> getListStudent() {
		List<?> totalStudent = studentService.streamAllStudents();
		return totalStudent;
	}

	/**
	 * 返回的是JSON对象 name:xxx
	 * 
	 * @return
	 * @Description:
	 * @author Bern_Liu
	 * @version 创建时间:2018年6月22日 下午2:09:18
	 */
	@RequestMapping("/student/readAllBy")
	private List<?> readAllBy() throws InterruptedException, ExecutionException {
		return studentService.readAllBy();
	}	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值