JPA就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
二、SpringBoot整合JPAmaven依赖:
org.springframework.boot spring-boot-starter-data-jpa
配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mytest
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver //驱动
jpa:
hibernate:
ddl-auto: update //自动更新
show-sql: true //日志中显示sql语句
三、Jpa操作
创建一个实体类Pet
@Entity(name = "t_pet")
public class Pet {
@Id //表示主键
@GeneratedValue(strategy = GenerationType.IDENTITY) //表示自增
private Integer id;
@Column //对应数据库中的列
private String name;
@Column
private String color;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Pet{" +
"id=" + id +
", name='" + name + ''' +
", color='" + color + ''' +
'}';
}
}
接下来只要写一个PetDao继承JpaRepository
public interface PetDao extends JpaRepository{}
此外,当JpaRepository接口当中提供的方法不能正常满足业务需求时,我们需要自定义查询
PetDao接口中自定义方法
自定义方法规则:方法的返回值根据业务实际需求定义:List Pet
方法的名称必须满足规范: findByXxx 如:findByName()
@Repository public interface PetDao extends JpaRepository{ List findByName(String name); List findByColor(String color); List findByNameAndColor(String name,String color); }
测试类
@Autowired
PetDao petDao; //springboot在启动的时候,底层使用了动态代理方式获得了一个接口的实现类,完成了注入
@Test
void addPet(){
System.out.println("add pet");
Pet pet = new Pet();
pet.setName("PP3");
pet.setColor("yellow");
petDao.save(pet); // 可以添加和更新
}
查询
获得了一个Optional对象,
Optional.get()获得当前对象,如果查询不到,返回NoSuchElementException
//查询
@Test
void findPet(){
Optional optionalPet = petDao.findById(1);
Pet pet = optionalPet.get();
System.out.println(pet.getId()+","+pet.getName()+" "+pet.getColor());
}
列表查询,返回List
@Test
void findAllPet(){
List all = petDao.findAll();
for (Pet pet : all) {
System.out.println(pet.getId()+","+pet.getName()+" "+pet.getColor());
}
}
分页查询
Pageable:接口类型
PageRequest:接口的实现类:不能直接new 构造器protect
PageRequest类中提供了方法of(),返回本类对象:
of();方法,static,静态方法
参数一:
page:查询页数,从0开始
size:当前页显示的条目数
Direction.ASC 指定升序排序。Direction.DESC 降序
properties:指定具体按哪个属性进行排序
@Test
void findAllPetWithPage(){
Pageable pageable = PageRequest.of(0,2);
Page pets = petDao.findAll(pageable);
for (Pet pet : pets) {
System.out.println(pet.getId()+""+pet.getName()+""+pet.getColor());
}
long totalElements = pets.getTotalElements();
System.out.println(totalElements);
int totalPages = pets.getTotalPages();
System.out.println(totalPages);
}



