SpringBoot特別研究Part22:SpringBoot統合JPA - 春データJPA

まず、概念

1.春データとは何ですか

春データは目的がすることですアクセスデータへのSpringフレームワークに基づいてアプリケーションを構築する簡素化
、クラウド・データ・サービスなどのためのフレームワークを地図-削減非リレーショナルデータベースが含まれるリレーショナルデータベースへのアクセスのサポートがあるにも含まれています

春データは、以下の多くのサブプロジェクトがあります。

– Spring Data Commons
– Spring Data JPA
– Spring Data KeyValue
– Spring Data LDAP
– Spring Data MongoDB
– Spring Data Gemfire
– Spring Data REST
– Spring Data Redis
– Spring Data for Apache Cassandra
– Spring Data for Apache Solr
– Spring Data Couchbase (community module)
– Spring Data Elasticsearch (community module)
– Spring Data Neo4j (community module)

SpringDataはの使用を提供統一APIデータアクセス層の上に動作するように
達成するために主に春データ・コモンズのプロジェクトで構成されている
使用してリレーショナルまたは非リレーショナルデータアクセス技術がされたときに春データ・コモンズの春が提供する統一規格に基づいて
、それは標準が含まれてCRUD(更新が削除取得するために作成します)クエリの並べ替えページング関連の操作を

スプリングデータは、いくつか提供統一リポジトリインターフェースを
これらのインタフェース機能が機能し、楽観的ロック機構をページングCRUD機能を有します

CrudRepository<T, ID extends Serializable> :基本CRUD操作
PagingAndSortingRepository<T, ID extends Serializable> :基本CRUD及分页
RevisionRepository<T, ID extends Serializable, N extends Number & Comparable<N>> :乐观锁机制

その具体的な実現のために気にすることなく、対応する機能を持っているこれらの組み込みインターフェイスを継承するために、独自のインタフェースを書くことだけを使用

春データは、データアクセスクラステンプレートを提供テンプレートの
例RedisTemplate MongoTemplateなど

だから、春のデータを使用した「と同等である指向プログラミングSpringDataは

2. JPAは何ですか

JPAは、フレームしかし、J2EEないノルムJ AVA P ersistence A PI
も仕様JSR呼ばれる仕様の
JSRがあるJ AVA S pecificationのR&LT意味equests頭字語Java仕様の提案
仕様を多くの既知の実装は、例えば、あります休止状態
もToplinkのOpenJPAのなど

これらのフレームワークの合計に相当し、スプリングのデータ再パッケージ化され
、デフォルトのHibernateの基礎となる春データ


二、SpringBoot統合JPA

まず、プロジェクトを作成
ここに画像を挿入説明
SpringBoot初期化子を作成するためのウィザードが春データJPAを追加する必要がある場合

手動での導入に依存して作成する必要がある場合:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
    </exclusions>
</dependency>

そして、データソース設定ファイルを記述します。

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/springboot_jpa?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
    username: root
    password: 123456

JPA仕様は、ORM(オブジェクトリレーショナルマッピング)思想基づいているので、
このようにして書き込まれると、データ・エンティティのクラステーブル豆マッピングマッピングANを

エンティティクラスの調製:
該当するテーブルスプリングデータJPAは、自動テーブル作成機能を提供しない場合、データベースは、(もちろん、前提が構成されています

// 使用JPA注解来配置映射关系
// @Entity注解:告诉JPA该类是一个实体类 是和数据表进行映射的类
@Entity
// @Table注解:主动指定和数据库中的哪个数据表进行映射 若省略 则默认表名为该类的类名小写
@Table(name = "tb_user")
public class User {

    // @Id注解:表明该属性是一个主键
    @Id
    // @GeneratedValue注解:指定该属性的主键生成策略 IDENTITY代表自增主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    // @Column注解:表明该属性是和数据表对应的一个列 还可指定列名和最大长度
    @Column(name = "last_name",length = 20)
    private String lastName;
    // 若不指定列名 则默认列名为该属性的属性名
    @Column
    private String email;

   getter()setter()方法省略...
}

最後に、設定ファイル内のいくつかの簡単な基本設定:

jpa:
  hibernate:
    # 数据表的生成策略:update代表更新或创建数据表 若无该数据表 则创建 若有该数据表 则更新
    ddl-auto: update
  # 显示每次执行的sql语句
  show-sql: true

でJPAのプロパティJpaProperties私はクラスを参照して設定するために利用できる属性がわからない場合は、このクラスの
これまでのすべての設定が完了しています

簡単なテスト:

@RestController
public class UserController {

    @Autowired
    UserRepository userRepository;

    @GetMapping("/user/{id}")
    public User getUser(@PathVariable("id") Integer id)
    {
        // 在2.x的新版本的Spring Data JPA中 findById()返回值有可能是空值 须用orElse()进行判断
        return (User) userRepository.findById(id).orElse(null);
    }

    @GetMapping("/addUser")
    public User insertUser(User user)
    {
        // 返回该储存的对象
        return userRepository.save(user);
    }
}

結果:
ここに画像を挿入説明
テストは、任意のSQL文を記述せずに成功します


公開された174元の記事 ウォンの賞賛5 ビュー24万+

おすすめ

転載: blog.csdn.net/Piconjo/article/details/105100031