Spring Data JPA 学习笔记

Spring Data JPA 学习笔记

Spring Data JPA:
Spring Data JPA 是 spring data 项目下的一个模块。提供了一套基于 JPA标准操作数据库的简化方案。底层默认的是依赖 Hibernate JPA 来实现的。
Spring Data JPA 的技术特点:
我们只需要定义接口并集成 Spring Data JPA 中所提供的接口就可以了。不需要编写接口实现类。

一、 创建SpringDataJPA项目

第一步:pom.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!--springboot启动-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.9</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>***.sunsky</groupId>
    <artifactId>mybatis5_plus</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mybatis5_plus</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>8</java.version>
    </properties>

    <dependencies>

        <!--mysql连接依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>

        <!--实体类的注解-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--测试类的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--进行SpringDataJPA依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>2.4.2</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

第二步:pojo包下,写User实体类

@Entity 标注是一个实体类,实体类中的每一个属性都对应表中的一列。

@Table(name = “User”) 这个注解用于指定实体类对应的数据库表名。(但首字母会小写)

@Data:这个注解是Lombok库提供的,用于自动生成实体类的getter和setter方法、构造函数、equals、canEqual、hashCode、toString方法。使用@Data注解可以简化实体类的代码,使实体类更加简洁。

package ***.sunsky.jpa_project.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * @className: ${大数据学习}.
 * @description: 用户实体类
 * @Theme:
 * @author:xgh
 * @create-day: 2024-03-05 10:12
 */

@Entity
@Table(name = "User")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

    @Id
    private Integer id;

    private String name;

    private Integer age;

    private String email;

    private String phone;
}

第三步:dao包下的UserDao接口,进行业务的接口规范

UserDaoj接口继承了CrudRepository JpaRepository所有的方法 增删查改就不用自己

package ***.sunsky.jpa_project.dao;


import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import ***.sunsky.jpa_project.pojo.User;

import java.util.List;

/**
 * @className: ${大数据学习}.
 * @description: dao层继承了CrudRepository  JpaRepository所有的方法 增删查改就不用自己写
 * @Theme:
 * @author:xgh
 * @create-day: 2024-03-05 10:40
 */
@Repository
public interface UserDao extends CrudRepository<User,Integer>, JpaRepository<User,Integer> {

    @Query("from User") //使用对象查询
    List<User> getAlls();

    //使用sql查询
    @Query(value = "select * from user where name=? and age=?",nativeQuery = true)
    List<User> getAlls(String name,Integer age);

    @Query
    List<User> findByNameAndAge(String name,Integer age);
}

第四步:测试类JpaProjectApplicationTests

基于@Query 注解的查询

该注解是Spring Data JPA 库中的一个功能,它允许开发者自定义 JPA 查询语句。通过在 Repository 接口中使用 @Query 注解,你可以直接在接口的方法上编写 JPA 查询语句,而不需要写实际的 SQL 语句。

package ***.sunsky.jpa_project;

import ***.sunsky.jpa_project.dao.UserDao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import ***.sunsky.jpa_project.pojo.User;

import java.util.ArrayList;
import java.util.List;

@SpringBootTest
class JpaProjectApplicationTests {

    @Autowired
    UserDao userDao;

    @Test
    void contextLoads() {
        List<User> users = userDao.findAll();
        System.out.println(users);

        for (User user : users) {
            System.out.println(user);
        }

    }

    @Test
    void save(){

        User user = new User(8,"斗破苍穹",159,"wer@123","120");
        User user1 = new User(7,"斗破苍穹",159,"wer@123","120");
        User save = userDao.save(user);
        userDao.save(user1);
        System.out.println("存储成功");
    }



    @Test
    void delete() {
       List<Integer> ids = new ArrayList<>();
       ids.add(7);
       ids.add(8);
       userDao.deleteAllById(ids);
        System.out.println("删除成功");
    }

    // 通过id存值的时候,相当于更新操作
    @Test
    void update(){
        User user = new User(1,"李四",20,"234@234","11069");
        userDao.save(user);
    }

    // 使用对象查询
    @Test
    void zdy() {
        List<User> alls = userDao.getAlls();
        for (User all : alls) {
            System.out.println(all);
        }
    }

    //使用sql查询
    @Test
    void zdy2() {
        List<User> alls = userDao.getAlls();
        for (User all : alls) {
            System.out.println(all);
        }
    }

    // 使用关键字
    @Test
    void zdy3(){
        List<User> alls = userDao.findByNameAndAge("李四",20);
        for (User all:alls
             ) {
            System.out.println(all);

        }
    }
}
转载请说明出处内容投诉
CSS教程_站长资源网 » Spring Data JPA 学习笔记

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买