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();
}
};
}
使用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
- JPA的基本操作
- EJB+JPA演示实体类基本操作CRUD的实现
- EJB+JPA演示实体类基本操作CRUD的实现
- Spring Data Jpa 查询操作的基本实现(Spring Data Jpa 2)
- jpa的基本映射
- JPA的基本运用
- JPA的基本理解
- JPA的基本注解
- JPA的EntityManager操作
- JPA的修改操作
- springBoot+Jpa(hibernate)数据库基本操作
- jpa数据库增删改查基本操作
- JPA的几个常用操作
- JPA的注解的基本使用
- spring+jpa的applicationContext.xml基本配置
- jpa入门之环境搭建和CRUD基本操作
- JPA开发总结<二>--基本操作+JPQL查询
- jpa入门之环境搭建和CRUD基本操作
- TP问题汇总
- IT人生 需要指引
- java.lang.ArithmeticException
- spring定时器一些时间配置例子参考
- 如何实现界面布局根据阿拉伯语、波斯语等RTL语言而反转
- JPA的基本操作
- android开发教程(一)——目录
- Callable
- 我只是想要截个屏
- gluLookAt 函数详解
- make clean与make distclean的区别
- Android 日期和时间选择器
- vpc资料
- docker image 与 container