SpringData JPA的介绍及快速入门

138 阅读2分钟

这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

SpringData的介绍

Spring Data 是为了简化构建基于Spring框架应用的数据访问技术,包括对关系数据库、非关系数据库、Map-Reduce框架、云数据服务等访问支持。它为我们提供使用统一的API标准来对数据访问层进行操作,这套标准包含了CRUD(创建、获取、更新、删除)、查询、排序和分页的相关操作。

特点

  • 支持对象关系映射

       具备ORM框架的对象关系映射功能

  • 统一的Repository接口

       Repository<T,ID extends Serializable>: 统一接口

       CrudRepository<T,ID extends Serializable>: 基本CRUD操作

       PagingAndSortingRepository<T,ID extends Serializable>:  基本CRUD及分页

  • 统一的数据访问模板类xxxtemplate

       如MongoTemplate、RedisTemplate等

JPA的介绍

  • JPA(Java Persistence API) 是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate、Toplink、JDO等ORM框架各自为营的局面。
  • 值得注意的是,JPA是在充分吸收了现有的Hibernate、Toplink、JDO等ORM框架的基础上发展而来的,具有易于使用、伸缩性强等优点。
  • JPA是一套规范,不是一套产品,那么像Hibernate、Toplink、JDO它们是一套产品,如果说这些产品实现了这个JPA规范,那么我们就可以称他们为JPA的实现产品

SpringData和JPA的关系

SpringData 和JPA的快速入门

pom

  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

application.properties

#mysql数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/nicole?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=nicole
spring.datasource.password=Nicole
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

##自动生成开启,让表数据都会自动跟随entity的变化而变化
spring.jpa.properties.hibernate.hbm2ddl.auto=update
#方言选择mysql
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
#开启sql打印
spring.jpa.show-sql=true
#开启sql格式化
spring.jpa.properties.hibernat.format_sql=true

entity

@Data
@Entity
@Table(name = "t_user")
public class TUser {
    @Id //证明该字段是主键
    @GeneratedValue(strategy= GenerationType.IDENTITY) //自增
    //@GenericGenerator(name="myuuid",strategy="uuid")
    //使用uuid策略这个时候主键的类型不能用Integer了
    private  Integer id ;
    @Column(name = "t_username",nullable = false ,unique = true,length=20)
    private String username;
    @Column
    private String  password;
}

repository

public interface UserRepository extends JpaRepository<TUser, Integer> {
    TUser findTuserByUsernameLike(String username);
}

controller

@RestController
public class UserConntroller {
    @Resource
    private  UserRepository userRepository ;

    @GetMapping("/user/id/{id}")
    public Object findById(@PathVariable Integer id){
        return userRepository.findById(id);
    }

    @GetMapping("/user")
    public TUser saveUser(TUser user){
        return userRepository.save(user);
    }
    @GetMapping("/user/username/{username}")
    public TUser findByUsername(@PathVariable String username){
        return userRepository.findTuserByUsernameLike("%"+username+"%");
    }
}

实现效果,在mysql数据库中自动创建了 t_user 表,主键自增,查询和新增成功。

接口调用