• Spring Data JPA 学习笔记


    Spring Data JPA 学习笔记

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

    一、 创建SpringDataJPA项目

    第一步:pom.xml配置文件

    
    
        4.0.0
    
        
        
            org.springframework.boot
            spring-boot-starter-parent
            2.6.9
             
        
    
        com.sunsky
        mybatis5_plus
        0.0.1-SNAPSHOT
        mybatis5_plus
        Demo project for Spring Boot
    
        
            8
        
    
        
    
            
            
                mysql
                mysql-connector-java
                8.0.22
            
    
            
            
                org.projectlombok
                lombok
                true
            
    
            
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
    
            
            
                org.springframework.boot
                spring-boot-starter-data-jpa
                2.4.2
            
    
        
    
        
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                    
                        
                            
                                org.projectlombok
                                lombok
                            
                        
                    
                
            
        
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74

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

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

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

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

    package com.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;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

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

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

    package com.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 com.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, JpaRepository {
    
        @Query("from User") //使用对象查询
        List getAlls();
    
        //使用sql查询
        @Query(value = "select * from user where name=? and age=?",nativeQuery = true)
        List getAlls(String name,Integer age);
    
        @Query
        List findByNameAndAge(String name,Integer age);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    第四步:测试类JpaProjectApplicationTests

    基于@Query 注解的查询

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

    package com.sunsky.jpa_project;
    
    import com.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 com.sunsky.jpa_project.pojo.User;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @SpringBootTest
    class JpaProjectApplicationTests {
    
        @Autowired
        UserDao userDao;
    
        @Test
        void contextLoads() {
            List 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 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 alls = userDao.getAlls();
            for (User all : alls) {
                System.out.println(all);
            }
        }
    
        //使用sql查询
        @Test
        void zdy2() {
            List alls = userDao.getAlls();
            for (User all : alls) {
                System.out.println(all);
            }
        }
    
        // 使用关键字
        @Test
        void zdy3(){
            List alls = userDao.findByNameAndAge("李四",20);
            for (User all:alls
                 ) {
                System.out.println(all);
    
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
  • 相关阅读:
    听完我的建议,Linux将不再困难
    C语言-【指针二】-【指针运算/指针和数组】
    你真的会使用 《断点》 吗
    springboot项目的打包发布部署,jar和war的区别
    【EI会议征稿】第三届能源动力与控制工程国际学术会议(EPECE 2024)
    ——二叉树
    eBPF会成为服务网格的未来吗?
    数据服务:冗灾容错,质量保障
    设计模式汇总
    C#运算符和流程控制语句
  • 原文地址:https://blog.csdn.net/Bruce_xgh/article/details/136487281