JPAは何ですか
より正式な引数は次のとおりです。
JPA(Javaの永続化API)は、Java日クラウン永続仕様です
人気の用語、JPAは良い規制は、それが何ができるかを指定することを事前の一種であり、どのようにそれを行うというようにします。
何がJPA行うことができます
私自身の理解によると、JPAの主な目的は、オブジェクトにデータベース内のデータをマッピングすることである(ORM -オブジェクトリレーショナルマッピング)、その後、我々は、オブジェクトのメソッドを呼び出すことでチェックするために、データの追加および削除を変更することができます。
なぜJPA
我々は、以下のデータを持っているユーザーテーブル(ユーザテーブル)を、持っていると仮定します。
Users
+----+----------+--------------+
| id | username | email |
+----+--------+----------------+
| 1 | David | [email protected] |
+----+----------+--------------+
| 2 | Kevin | [email protected] |
+----+----------+--------------+
JPAは、我々は要求データにJDBCを使用する必要が前に現れます。我々はJDBCを使用したい場合は、あなたが書かなければならない面倒なコードの多くを、ますます複雑なSQL文。たとえば、唯一のちょうど1のユーザIDを照会するには、次のコードを記述する必要があります。
- 変数SQL文の定義
// 会因为业务逻辑而变得越来越复杂。比如说还需要获得 积分,等级,购物历史记录等等。
String query = "SELECT * FROM Users WHERE id = 1;";
- try catch文を書きます
try {
// 执行JDBC
} catch (SQLException e) {
// SQLException 为 checked exception,需要显式处理异常
}
- JDBCの実装
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
- 抽出結果
while (rs.next()) {
Long userId = rs.getInt("id");
String userName = rs.getString("username");
// 业务逻辑省略
}
プロジェクトのビジネスロジックが非常に複雑であり、言葉の頻繁な変更を必要とする場合したがって、JDBCを維持することは非常に困難になります。
JPAの使い方
ここで私は、春のブート年間で皆のためにJPAを使用する方法を示します。
依存追加
まず、我々はのpom.xmlに依存関係を追加します。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Userエンティティクラスを作成します。
@Entity
@Table(name = "Users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String username;
private String email;
// 此处省略 getters / setters
}
エンティティ・クラスが書かれたセッターとゲッターを与える必要があります覚えておいてください。
JPAリポジトリインタフェースの作成
@Repository
public interface UserJpaRepository extends CrudRepository<User, Integer> {
User findById(int id);
}
ここでは、私たちの相続CrudRepositoryインタフェースリポジトリインタフェースを聞かせて、一般的なエンティティクラスを記入する最初の必要性、および第二は、一般的なエンティティクラスIDデータ型を記入することです。
JPAは、これらの方法を達成するために私たちを助けるため、我々は、これらの方法を達成するために行く必要はありません。我々は唯一の命名規則に従って、これらのメソッドを宣言する必要があります。
基本的な命名規則:
findBy + {COLUMN_NAME} + {logical_operator} + {COLUMN_NAME} +···
パラメータは、ルール:
メソッド名COLUMN_NAMEの順序のためのパラメータの順序
例えば:
私はデビッドにクエリのユーザ名にしたいとしたり、ユーザーのメールボックス[email protected]、我々はメソッドを宣言することができます。
User findByUsernameOrEmail(String username, String email);
JPA詳細な方法は、公式ドキュメントの命名を参照してください。
次に、このメソッドを呼び出し、我々は、Userオブジェクトを取得します。ユーザーオブジェクトフィールド
ID、ユーザー名、電子メールを含みます、。私たちは、ゲッター/セッターを介してデータを取得したり、変更することができます。これはを通じて、ORMの概念であるオブジェクトを変更して再検索データとの相互作用への追加や削除に。
作成UserServiceの
その後、我々はいくつかの一般的なビジネスロジックを実現するためにUserServiceのクラスを作成します。これは、ビジネス・ロジックの2種類のデモです:
- ユーザーのクエリIDによると
- ユーザーのメールボックスを変更します。
@Service
public class UserService {
@Autowired
private UserJpaRepository userJpaRepository;
// 根据 id 查询用户
public User findById(int id) {
return userJpaRepository.findById(id);
}
// 修改用户邮箱
public void changeUserEmailById(int userId, String email) {
User user = this.findById(userId);
user.setEmail(email);
userJpaRepository.save(user);
}
}
私たちは、あなたがJPAを使用した場合、コードの可読性が質的に改善されます、JDBCに比べて、見ることができます。
UserControllerでの作成
次は、私たちはそれに適切なAPIインターフェイスを作成する必要があります。
@RestController
@RequestMapping(value = "/api/v1/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping(value = "/{id}")
public ResponseEntity<User> getUserById(@PathVariable int id) {
User user = userService.findById(id);
return ResponseEntity.ok().body(user);
}
@PostMapping(value = "/email")
public ResponseEntity<User> changeUserEmail(@RequestBody JSONObject payload) {
String userId = Integer.parseInt((String) payload.get("userId"));
String newEmail = (String) payload.get("newEmail");
userService.changeUserEmailById(userId, newEmail);
return ResponseEntity.ok().body(user);
}
}
例URL:
// 查询 id 为 1 的用户
【GET】/api/v1/users/1
// 更改用户邮箱
【POST】/api/v1/users/email
【PAYLOAD】
{
"userId": "1",
"newEmail": "[email protected]"
}
読んでくれてありがとう!感謝祭ああ!
まだ学ん著者は、何かが間違っがある場合は、指摘し、含まれている、あなたに感謝してください!
著者:デビッド・チョウ(バンクーバー、サイモンフレーザー大学のコンピュータの学生)