JPA的基本操作

来源:互联网 发布:php.ini参数设置 编辑:程序博客网 时间:2024/05/21 10:34
Jpa是一种规范,而Hibernate是它的一种实现

使用Jpa的一个好处是,可以更换实现而不必改动太多代码。

定义Model时,使用的是jpa的annotations,比如javax.persistence.Entity, Table, Column, OneToMany等等。但它们提供的功能基础,有时候想定义的更细一些,
难免会用到Hibernate本身的annotation。


JPA实现基本的CRUD,以及分页:
继承CRUD和PagingAndSorting基类
总结:
 如果需要分页,继承  
PagingAndSortingRepository

 如果需要条件查询,继承
JpaSpecificationExecutor

package com.lgy.dao;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;

import com.lgy.model.User;

public interface UserRepository extends JpaRepository<User, Integer>,PagingAndSortingRepository<User, Integer> {
    @Query("from User u where u.name=:name")
    public List<User> findByUserName(@Param("name")String userName);
}



分页DEMO:
Pageable pageable = new PageRequest(1,2);  //第二页 每页2条记录
        
Page<User> page = userRepository.findAll(pageable);
Iterator<User> iterator = page.iterator();
while(iterator.hasNext()) {
    User user = iterator.next();
    
    System.out.println(user.getId() + "---------" + user.getName());
}

int totalPages = page.getTotalPages(); //总的页数
int number = page.getNumber();  //当前也是
long totalElements = page.getTotalElements(); //总共的个数

System.out.println(totalPages + "---------" + number + "--------" + totalElements);


排序DEMO:
Sort sort = new Sort("age");
//Pageable pageable = new PageRequest(1, 2,sort); // 第二页 每页2条记录


List<User> findAll = userRepository.findAll(sort);

Iterator<User> iterator = findAll.iterator();
while (iterator.hasNext()) {
    User user = iterator.next();
    System.out.println(user.toString());
}

多条件查询:
@Test
public void userFindByConditor() {
    Map<String, String> map = new HashMap<String, String>();
    
    map.put("name", "%a%");
    List<User> list = userRepository.findAll(buildSpecification(map));
    for (User user : list) {
        System.out.println(user.toString());
    }
}

/*
 * 创建动态查询条件组合.
 */
private Specification<User> buildSpecification(Map<String, String> searchParams) {
    return new Specification<User>() {
        @Override
        public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
            Path<String> namePath = root.get("name");
            query.where(cb.like(namePath, searchParams.get("name")));
            return query.getRestriction();
        }
    };
}

0 0