SpringData JPA入门

spring data jpa

springboot配上spring data jpa就是一条龙服务到家,快速开发,专注业务,完美契合。还有lombok

  • pom
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
        </dependency>

三件套:mysql连接、jpa、jpa高级querydsl

  • 数据库表

  • 实体类

实体类和数据库表保持字段一致,数据库中使用user_name,实体类使用userName。

package com.speed.fast.dal.dataobject;

import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;

import javax.persistence.*;
import java.util.Date;

@Entity
@Table(name = "s_exam")
@DynamicInsert
@DynamicUpdate
@Data
public class Exam{
    private String examName;
    private Integer isOpened;
    private Integer sustainTime;
    private String examDesc;
    @Id
    @GeneratedValue
    private Long id;
    private Integer isDeleted;
    @Version
    private Integer version;
    private Date addTime;
    private Date updateTime;
}

  • 写方法
package com.speed.fast.dal.repository;
/**
 * @author :QiuShi
 * @Date :2020/11/23 下午5:47
 * @Version 1.0
 */
import com.speed.fast.dal.dataobject.Exam;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
public interface ExamRepository extends JpaRepository<Exam,Long> {

    Exam findById(Long id);
    Exam findFirstById(Long id);
}

  • 调用方法
package com.speed;
/**
 * @author :QiuShi
 * @Date :2020/11/23 下午6:20
 * @Version 1.0
 */

import com.speed.fast.Application;
import com.speed.fast.dal.dataobject.Exam;
import com.speed.fast.dal.repository.ExamRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {Application.class})
public class test {
    @Resource
    ExamRepository examRepository;
    @Test
    public void getTest(){
        Exam byId = examRepository.findById(Long.valueOf(1));
        System.out.println(byId);
        Exam v = examRepository.findFirstById(Long.valueOf(1));

        System.out.println(v);
    }
}

没了,就是这么简单。

只要原因吗?因为jpa会根据方法的名字来自动生成sql语句,我们只需要按照方法定义的规则即可,方法都以findBy开头为查询条件,多个参数通过And或者Or,那么标准是啥呢?
1、只有首字母小写
你可以findByUserNameAndPassWordAndMail…,只有首字母小写。

2、By后面的是条件,比如用户名,findByUserName,可能会问?那如何知道查谁(哪个表)呢?当然是实现的时候传递进去的。继承的时候指定了对应的实体(实体上就注解了表名),以及id的类型(jpa必须有id)

public interface ExamRepository extends JpaRepository<Exam,Long> {

3、返回值就是你期待的值,有一个你就返回对象,有多个,你就返回list,当然一个你返回list没问题,那么多个你返回一个呢?会报错,所以为了避免出现这样的情况,可以使用集合来接收单个返回值的,再判断结果集。

基础的CRUD

添加:save
自带的save,你都不需要在接口上写这个方法。
查询:findBy
直接使用方法名构造就好了,简单不简单,强大的查询功能。
删除:delete
同样默认的,需要传入id值,或者实体对象
修改:save
修改是先查询再修改,把查询和添加组合起来就好了。
这样设计是非常合理的,毕竟不能乱改,确认一下比较好。

上一篇:SpringData入门


下一篇:SpringData JPA接口简单总结