Java高级---Spring Boot---7数据访问

2024-06-01 1235阅读

7数据访问

说明

常用MybatisPlus

Java高级---Spring Boot---7数据访问
(图片来源网络,侵删)

7.1 使用JPA/Hibernate详解

Java Persistence API (JPA) 是Java EE规范的一部分,提供了一种方式来管理Java应用中的数据持久化。

  • 实体(Entity):

    • 实体是JPA中的一个核心概念,它代表了一个数据库表。
    • 用@Entity注解标记的类表示一个实体。
    • 持久化上下文(Persistence Context):

      • 持久化上下文是一个特殊的容器,它包含实体的实例以及这些实例的持久化状态。
      • 它负责实体的生命周期和缓存。
      • EntityManager:

        • EntityManager是JPA用于与数据库交互的API。
        • 它提供了一系列的操作,用于创建、读取、更新和删除实体。
        • 实体管理器工厂(EntityManagerFactory):

          • 用于创建EntityManager的实例。
          • 通常通过persistence.xml配置或Java Persistence API的Persistence类来访问。
          • 事务(Transaction):

            • JPA的事务管理保证了数据库操作的ACID属性。
            • 可以通过@Transactional注解来声明方法的事务边界。

              案例: 创建一个简单的JPA实体

              import javax.persistence.Entity;
              import javax.persistence.GeneratedValue;
              import javax.persistence.GenerationType;
              import javax.persistence.Id;
              @Entity
              public class User {
                  @Id
                  @GeneratedValue(strategy = GenerationType.IDENTITY)
                  private Long id;
                  private String name;
                  private String email;
                  // Getters and Setters
              }
              

              在这个例子中,@Entity注解标记了User类为一个JPA实体,@Id标记了实体的主键,@GeneratedValue指定了主键的生成策略。

              7.2 使用Spring Data JPA详解

              Spring Data JPA 简化了JPA的使用,提供了一套便捷的数据访问抽象层。

              • Repository:

                • 通过继承JpaRepository接口,可以获取标准的CRUD操作。
                • 还可以添加自定义的方法。
                • 方法名查询:

                  • Spring Data JPA可以根据方法名自动生成查询。
                  • 例如,findAllByUserName方法名会生成一个查询,该查询查找所有用户名匹配的实体。
                  • 查询派生:

                    • 除了方法名查询,还可以使用@Query注解来执行更复杂的JPQL或SQL查询。
                    • 事务管理:

                      • 与Spring的声明式事务管理集成,可以使用@Transactional注解来管理事务。

                        案例: 创建一个Spring Data JPA仓库

                        import org.springframework.data.jpa.repository.JpaRepository;
                        import org.springframework.stereotype.Repository;
                        @Repository
                        public interface UserRepository extends JpaRepository {
                            List findByUserName(String userName);
                        }
                        

                        在这个例子中,UserRepository接口继承自JpaRepository,提供了基本的CRUD操作,并且定义了一个自定义查询方法findByUserName。

                        7.3 集成其他ORM框架(如MyBatis)详解

                        MyBatis 是一个流行的Java ORM框架,它提供了SQL映射和对象关系映射的功能。

                        • 集成MyBatis:

                          • Spring Boot通过spring-boot-starter-mybatisStarter来集成MyBatis。
                          • 配置MyBatis:

                            • 在application.properties或application.yml中配置MyBatis的SQL映射文件和相关设置。
                            • Mapper接口:

                              • 定义数据访问接口,MyBatis会根据这些接口生成动态代理实现。
                              • MyBatis配置类:

                                • 使用@MapperScan注解来指定MyBatis的Mapper接口所在的包路径。

                                  案例: 集成MyBatis并配置Mapper接口

                                  import org.apache.ibatis.annotations.Mapper;
                                  import org.springframework.stereotype.Repository;
                                  @Mapper
                                  @Repository
                                  public interface UserMapper {
                                      User selectUserById(Long id);
                                  }
                                  

                                  在这个例子中,@Mapper注解标记了UserMapper接口为MyBatis的映射接口,@Repository注解将其标记为Spring的组件。

                                  7.4 集成MyBatis-Plus详解

                                  MyBatis-Plus (简称 MP) 是在 MyBatis 的基础上进行的扩展,它简化了 CRUD 操作,提供了一些额外的功能,使得数据库操作更加简单和高效。

                                  核心功能

                                  • 自动填充:

                                    • MyBatis-Plus 支持自动填充字段,例如创建时间、更新时间等。
                                    • 可以使用 @TableField 注解的 fill 属性来指定字段的自动填充策略。
                                    • 性能分析:

                                      • 提供了 SQL 执行的性能分析,通过 @SqlParser 注解可以查看执行的 SQL 语句及其执行时间。
                                      • 逻辑删除:

                                        • 支持逻辑删除,通过特定的字段(如 deleted)来标识记录是否被删除,而不是从数据库中真正删除记录。
                                        • 乐观锁:

                                          • 支持乐观锁,可以通过 @Version 注解来指定版本号字段,实现乐观锁机制。

                                            配置 MyBatis-Plus

                                            在 pom.xml 文件中添加 MyBatis-Plus 的依赖:

                                                
                                                
                                                    com.baomidou
                                                    mybatis-plus-boot-starter
                                                    最新版本号
                                                
                                                
                                            
                                            

                                            使用 MyBatis-Plus

                                            • Mapper 接口:
                                              • 通过继承 BaseMapper 接口,可以快速获得对实体的 CRUD 操作支持。
                                              • 可以添加自定义方法,MyBatis-Plus 会根据方法名动态生成 SQL。

                                                案例: 集成 MyBatis-Plus 并使用

                                                import com.baomidou.mybatisplus.core.mapper.BaseMapper;
                                                import org.apache.ibatis.annotations.Mapper;
                                                import your.package.User;
                                                @Mapper
                                                public interface UserMapper extends BaseMapper {
                                                    // 自定义查询方法,例如根据用户名查询用户
                                                    User selectByUsername(String username);
                                                }
                                                

                                                在这个例子中,UserMapper 接口继承自 BaseMapper,提供了对 User 实体的 CRUD 操作支持,并且可以添加自定义查询方法。

                                                自动填充

                                                使用 @TableField 注解的 fill 属性来指定自动填充策略:

                                                import com.baomidou.mybatisplus.annotation.FieldFill;
                                                import com.baomidou.mybatisplus.annotation.TableField;
                                                import java.time.LocalDateTime;
                                                public class User {
                                                    // ... 其他字段 ...
                                                    @TableField(fill = FieldFill.INSERT)
                                                    private LocalDateTime createTime;
                                                    @TableField(fill = FieldFill.INSERT_UPDATE)
                                                    private LocalDateTime updateTime;
                                                    // Getters and Setters
                                                }
                                                

                                                在这个例子中,createTime 字段会在插入时自动填充,而 updateTime 字段会在插入和更新时自动填充。

                                                逻辑删除

                                                通过添加一个字段来实现逻辑删除,例如 @TableLogic 注解:

                                                import com.baomidou.mybatisplus.annotation.TableLogic;
                                                import com.baomidou.mybatisplus.annotation.Version;
                                                public class User {
                                                    // ... 其他字段 ...
                                                    @TableLogic
                                                    private Integer deleted;
                                                    @Version
                                                    private Integer version;
                                                    // Getters and Setters
                                                }
                                                

                                                在这个例子中,deleted 字段用于标识记录是否被逻辑删除,version 字段用于乐观锁。

                                                性能分析

                                                通过 @SqlParser 注解查看 SQL 执行的详细信息:

                                                @SqlParser
                                                public interface UserMapper extends BaseMapper {
                                                    // 接口方法
                                                }
                                                

                                                配置类

                                                创建一个配置类来配置 MyBatis-Plus 的相关属性:

                                                import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
                                                import org.apache.ibatis.session.SqlSessionFactory;
                                                import org.mybatis.spring.annotation.MapperScan;
                                                import org.springframework.context.annotation.Bean;
                                                import org.springframework.context.annotation.Configuration;
                                                @Configuration
                                                @MapperScan("your.package.mapper")
                                                public class MyBatisPlusConfig {
                                                    @Bean
                                                    public SqlSessionFactory sqlSessionFactory() {
                                                        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
                                                        // 配置 MyBatis-Plus 相关属性
                                                        return sqlSessionFactory.getObject();
                                                    }
                                                }
                                                

                                                在这个例子中,MyBatisPlusConfig 类用于配置 MyBatis-Plus,@MapperScan 注解用于指定 Mapper 接口所在的包路径。

                                                通过上述详细步骤和案例,MyBatis-Plus 提供了一个强大而灵活的方式来增强 MyBatis 的功能,使得开发者可以更加专注于业务逻辑,而不是底层的数据访问代码。

                                                通过这些详细的解释和案例,我们可以看到Spring Boot提供了对JPA/Hibernate和MyBatis等ORM框架的全面支持,同时也支持了MyBatis-Plus这样的增强工具,使得数据访问层的开发更加高效和简单。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]