Spring BootでEntityManager.createQueryやcreateNativeQueryでデータベースアクセスする方法
Spring Bootで@Repositoryアノテーションを付与したインタフェースで@Queryアノテーションを付与したメソッドはEntityManagerを意識する必要がありません。
EntityManagerを使用する場合は@PersistenceContextアノテーション(javax.persistence.PersistenceContext)を付与してEntityManagerをDIします。
unitName属性はデフォルトはdefaultですが、こちらは省略可能です。複数データベース接続する場合は、unitNameを指定する必要があります。
アクセスするデータベースが1つの場合は以下のようにDIしてあげればEntityManagerクラスを使用することが出来ます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@PersistenceContext(unitName = "default") // @PersistenceContext() と同じ | |
private EntityManager entityManager; | |
@RequestMapping(path = "/test", method = RequestMethod.GET) | |
public ResponseEntity<?> test() { | |
var ret = | |
entityManager.createNativeQuery("select * from t_employee", Employee.class).getResultList(); | |
return ResponseEntity.ok(Map.of("result", ret)); | |
} | |
// windows | |
// curl -X GET http://localhost:8080/test |
createNativeQuery
EntityManagerクラスのcreateNativeQueryを使えば引数にSQL文を記述することが出来ます。
createQuery
EntityManagerクラスのcreateQueryを使えば引数にJPQL文を記述することが出来ます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@PersistenceContext() | |
private EntityManager entityManager; | |
@RequestMapping(path = "/test", method = RequestMethod.GET) | |
public ResponseEntity<?> test() { | |
var ret = entityManager.createQuery("from Employee", Employee.class).getResultList(); | |
return ResponseEntity.ok(Map.of("result", ret)); | |
} | |
// windows | |
// curl -X GET http://localhost:8080/test |
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント