相关推荐recommended
【Springboot系列】SpringBoot整合Jpa
作者:mmseoamin日期:2023-12-11

文章目录

      • 前言:
      • 什么是JPA?
      • JPA优缺点
        • 优点
          • 1.简化开发:
          • 2.高度抽象:
          • 3.跨数据库支持:
          • 4.自动化的事务管理:
          • 缺点
            • 1.学习成本较高:
            • 2.性能问题:
            • 3.灵活性受限:
            • 示例
              • 版本依赖
              • 代码
                • UserDO
                • UserRepository
                • JpaController
                • 测试
                • 总结
                • 源码获取
                • 写在最后

                  【Springboot系列】SpringBoot整合Jpa,579a429daf314744b995f37351b46548,第1张

                  前言:

                  Spring Boot是一种快速开发框架,它简化了Java应用程序的开发过程。而Jpa(Java Persistence API)是Java持久化规范的一种实现,它提供了一种方便的方式来访问和操作数据库。将Spring Boot与Jpa整合可以更加方便地进行数据库操作,提高开发效率。本文将介绍如何使用Spring Boot整合Jpa,帮助读者快速上手并应用于实际项目中。


                  什么是JPA?

                  Jpa(Java Persistence API)是Java持久化规范的一种实现,它提供了一种方便的方式来访问和操作数据库。下面将介绍Jpa的优点和缺点。


                  JPA优缺点

                  优点

                  【Springboot系列】SpringBoot整合Jpa,image-20231130012950622,第2张

                  1.简化开发:

                  Jpa提供了一种面向对象的方式来进行数据库操作,开发人员可以使用Java对象来表示数据库表和记录,而不需要编写复杂的SQL语句。这样可以大大简化开发过程,提高开发效率。

                  2.高度抽象:

                  Jpa提供了一套高度抽象的API,隐藏了底层数据库的细节,开发人员可以更加专注于业务逻辑的实现,而不需要关注数据库的具体实现细节。这样可以降低开发的复杂性,提高代码的可维护性。

                  3.跨数据库支持:

                  Jpa支持多种数据库,开发人员可以在不同的数据库之间切换,而不需要修改大量的代码。这样可以提高系统的灵活性和可扩展性。

                  4.自动化的事务管理:

                  Jpa提供了自动化的事务管理机制,开发人员可以使用注解来标识事务的边界,Jpa会自动处理事务的提交和回滚。这样可以简化事务管理的代码,提高系统的稳定性和可靠性。

                  缺点

                  【Springboot系列】SpringBoot整合Jpa,image-20231130013118663,第3张

                  1.学习成本较高:

                  Jpa是一种复杂的技术,需要开发人员具备一定的数据库和ORM(对象关系映射)的知识。对于初学者来说,学习和掌握Jpa可能需要一定的时间和精力。

                  2.性能问题:

                  由于Jpa是一种高度抽象的技术,它会对数据库的访问和操作进行一定的封装和转换,这可能会导致一定的性能损失。在对性能要求较高的场景下,可能需要使用原生的SQL语句来进行数据库操作。

                  3.灵活性受限:

                  Jpa提供了一套标准的API,开发人员需要按照这套API来进行开发,这可能会限制一些特定的需求和场景。在一些复杂的业务场景下,可能需要使用原生的SQL语句或其他ORM框架来实现。


                  示例

                  版本依赖
                  模块版本
                  SpringBoot3.1.0
                  JDK17
                  代码
                  UserDO
                  @Entity
                  @Data
                  @Table(name = "user")
                  public class UserDO  {
                      private static final long serialVersionUID = -2952735933715107252L;
                      @Id
                      @GeneratedValue(strategy = GenerationType.IDENTITY)
                      private Long id;
                      private String name;
                      private Integer age;
                      private String email;
                  }
                  
                  UserRepository
                  /**
                   * 查询方法:
                   * findBy/getBy/queryBy/readBy 后面跟要查询的字段名,用于精确匹配。
                   * find/get/query/read 后面跟要查询的字段名,使用条件表达式进行模糊匹配。
                   * findAll/getAll 后面不跟字段名,表示查询所有记录。
                   *
                   * 支持的关键字:
                   * And:连接多个查询条件,相当于 SQL 中的 AND。
                   * Or:连接多个查询条件,相当于 SQL 中的 OR。
                   * Between:用于查询字段在某个范围内的记录。
                   * LessThan/LessThanEqual:用于查询字段小于某个值的记录。
                   * GreaterThan/GreaterThanEqual:用于查询字段大于某个值的记录。
                   * IsNull/IsNotNull:用于查询字段为空或不为空的记录。
                   * Like/NotLike:用于模糊查询字段值。
                   * OrderBy:用于指定查询结果的排序方式。
                   *
                   * 删除方法:
                   * deleteBy/removeBy 后面跟要查询的字段名,用于精确匹配。
                   * delete/remove 后面跟要查询的字段名,使用条件表达式进行模糊匹配。
                   *
                   * 统计方法:
                   * countBy 后面跟要查询的字段名,用于精确匹配。
                   * count 后面不跟字段名,表示统计所有记录数。
                   *
                   * 更新方法:
                   * updateBy 后面跟要查询的字段名,用于精确匹配。
                   * update 后面跟要查询的字段名,使用条件表达式进行模糊匹配。
                   *
                   * 支持的关键字:
                   * Set:用于设置要更新的字段的值。
                   * Where:用于指定更新操作的条件。
                   *
                   * 部分查询关键字映射示例
                   * 关键字                使用示例
                   * And	                findByLastnameAndFirstname
                   * Or	                findByLastnameOrFirstname
                   * Is,Equals	        findByFirstnameIs,findByFirstnameEquals
                   * Between	            findByStartDateBetween
                   * LessThan	            findByAgeLessThan
                   * LessThanEqual	    findByAgeLessThanEqual
                   * GreaterThan	        findByAgeGreaterThan
                   * GreaterThanEqual	    findByAgeGreaterThanEqual
                   * After	            findByStartDateAfter
                   * Before	            findByStartDateBefore
                   * IsNull	            findByAgeIsNull
                   * IsNotNull,NotNull	findByAge(Is)NotNull
                   * Like	                findByFirstnameLike
                   * NotLike	            findByFirstnameNotLike
                   * StartingWith	        findByFirstnameStartingWith
                   * EndingWith	        findByFirstnameEndingWith
                   * Containing	        findByFirstnameContaining
                   * OrderBy	            findByAgeOrderByLastnameDesc
                   * Not	                findByLastnameNot
                   * In	                findByAgeIn(Collection ages)
                   * NotIn	            findByAgeNotIn(Collection age)
                   * TRUE	                findByActiveTrue()
                   * FALSE	            findByActiveFalse()
                   * IgnoreCase	        findByFirstnameIgnoreCase
                   */
                  public interface UserRepository extends JpaRepository {
                      UserDO findByName(String name);
                      UserDO findByNameOrEmail(String name, String email);
                      Long countByName(String name);
                      List findByNameLike(String name);
                      UserDO findByNameIgnoreCase(String name);
                      List findByNameContainingOrderByAgeDesc(String name);
                      Page findByName(String name,Pageable pageable);
                  }
                  
                  JpaController
                  /**
                   * jpa测试
                   */
                  @RestController
                  public class JpaController {
                      @Autowired
                      private UserRepository userRepository;
                      @GetMapping("/findByName")
                      public UserDO findByName(String name) {
                          return userRepository.findByName(name);
                      }
                  }
                  
                  测试

                  【Springboot系列】SpringBoot整合Jpa,image-20231130013434422,第4张

                  至此示例发送完成


                  总结

                  通过本文的介绍,我们了解了如何使用Spring Boot整合Jpa来进行数据库操作。

                  Spring Boot提供了简洁的配置和便捷的开发方式,而Jpa则提供了方便的数据库访问和操作方式。

                  将二者结合起来,可以更加高效地进行数据库开发。

                  希望本文对读者有所帮助,让大家能够快速上手并应用于实际项目中。


                  源码获取

                  如果需要完整源码请关注公众号"架构殿堂" ,回复 "SpringBoot+Jpa"即可获得


                  写在最后

                  感谢您的支持和鼓励! 😊🙏

                  如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot, spring cloud等系列文章,一系列干货随时送达!

                  【Springboot系列】SpringBoot整合Jpa,csdn-end,第5张