これでクラスUserができました。array
またはjsp
からhtml
のリクエストデータを取得します。
これをリストInteger[] arr=[5,6,9,10,62,52,21]
次に、2つの方法を使用して、削除アクションの一括処理を完了します。
@Transactional
@Override
public void deleteUser(Integer id) {
oneRepository.delete(id);
}
@Transactional
@Override
public void deleteSomeUser(Integer[] ids) {
for (Integer id : ids) {
deleteUser(id);
}
}
このアクションを完了するためのより効率的な方法であるかどうかを知りたいです。
あなたは私のログを見ることができます:それはそれほど良くないようです!
[94, 95, 91, 92, 93]
Hibernate:
delete
from
sshh_user
where
ID=?
Hibernate:
delete
from
sshh_user
where
ID=?
Hibernate:
delete
from
sshh_user
where
ID=?
Hibernate:
delete
from
sshh_user
where
ID=?
Hibernate:
delete
from
sshh_user
where
ID=?
Hibernate:
select
count(practice0_.ID) as col_0_0_
from
sshh_user practice0_
次のようなUserRepository
があるとします。
public interface UserRepository extends JpaRepository<User, Integer> {}
次に、次のような変更クエリメソッドをUserRepository
に追加できます。
/**
* Delete all user with ids specified in {@code ids} parameter
*
* @param ids List of user ids
*/
@Modifying
@Query("delete from User u where u.id in ?1")
void deleteUsersWithIds(List<Integer> ids);
最後に、次のように一括削除サービスを変更できます。
@Transactional
@Override
public void deleteSomeUser(Integer[] ids) {
oneRepository.deleteUsersWithIds(Arrays.asList(ids));
}
これにより、次のような削除クエリが生成されます。
Hibernate: delete from users where id in (? , ? , ?)
また、1つのpublic
推奨メソッドを別のメソッドから呼び出すときは、 Self Invocation の問題に注意してください。
以下をユーザーリポジトリインターフェースに追加するだけです
_void deleteByIdIn(List<Integer> ids);
_
Springはメソッド名の派生を介して適切なクエリを自動的に生成します。
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods
編集:これについて少し詳細
CrudRepository
、JpaRespository
のようなSpringsリポジトリインターフェイスを使用すると、作成、読み取り、更新、削除、ページング、ソートなどのデータベース操作の基本セットがもたらされます。
ユーザー名やメールアドレスの検索など、いくつかの単純なクエリを手動で追加すると、Springは文字列ベースのHQLクエリなどに注釈を付けることなく、細かいメカニズムを提供します。
Springはメソッド名を分析し、キーワードを検索します。上記のキーワードが提供されているドキュメントのリンクを読みます。
_CrudRepository<User>
_のメソッドの例:
Iterable<User> findByNameLike(String search)
は_select * from user where name like '<search>'
_に解決されます
void deleteByIdIn(List<Integer> ids)
はdelete from user where id in ([ids])
に解決されます
リポジトリインターフェースがCrudRepositoryを拡張する場合は、単にdeleteAll(List <User> entity)を使用できます。そのようなクエリは必要ありません。
findAllById(ids)を使用してList <User>を取得します
deleteAll(List <ユーザー>エンティティ)
このタイプの削除を実行するためにHQLを使用する場合、ここで確認できます http://www.Java2s.com/Tutorial/Java/0350__Hibernate/HSQLDeleteWithParameter.htm で、クエリで使用できます。