栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

初步认识Jpa+SpringBoot

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

初步认识Jpa+SpringBoot

一、什么是JPA

JPA就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

二、SpringBoot整合JPA

maven依赖:


    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,不需要写方法就能实现基本的增删改查,原因是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);
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489273.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号