http://d.hatena.ne.jp/ashura156/20170202/1486020592 の続き
JPA とは Java Persistence API のことで、JSR で標準化された OR mapper。
Dynamic Web Project に JPA Project 機能を付加する。
- Project Explorer の Dynamic Web Project を選択して右クリック。
- Configure - Convert to JPA Project...
- Configuration のドロップダウンは
、下の Facet は Dynamic Web Module, Java, JavaScript, JPA が選択されている。Next > - Platform に EclipseLink 2.5.x を選択
JPA implementation を設定する。
- Type: User Library となっているはず
- フロッピーディスクに↓矢印のアイコンを押し、EclipseLink2.5.2 を選ぶ (Eclipse Public License)。ダウンロードを待つ。
- Finish
- Include libraries with this application にチェックがついているのを確認する。無ければ付ける。
Connector の設定。
- Connection の Add connection... をクリックし、MySQL を選択、Name: に EC2_MySQL などと設定。Next>
- Drivers: のドラップダウンの右の○の中に※のアイコンをクリック
- My SQL JDBC Driver を選ぶ。System Version 5.1 を選択。
- https://dev.mysql.com/downloads/connector/j/ から mysql-connector-java-5.1.40.zip をダウンロード。適当に解凍。
- JAR List のタブに移り Add JAR/Zip... ボタンを押し mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar を設定する。
- Add driver library to build path のチェックをつける。
- Finish
MySQLサーバのアドレス類の設定
MySQL は http://d.hatena.ne.jp/ashura156/20170201/1485938855 で作ったものに、ssh トンネルを繋いである前提。まずは local PC で動かす設定。
- Database: DB1
- URL: jdbc:mysql://localhost:6501/DB1
- User name: root
- Password: (blank)
- Test connection ボタンを押し、Ping succeeded!
- Finish
persistence.xml
- 開き、Connection タブを開く。
- Transaction type: Resource Local にする。まずは local PC で動かす設定。
- Native SQL をクリックしチェックをつける。"(False)" が付いている場合もう一度クリックして消す。
- 下の EclipseLink connection pool にあるリンク Populate from connection... をクリックすると、先に Connector の設定をした内容が反映される。
下記の内容になっている。
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="dynamic_web" transaction-type="RESOURCE_LOCAL"> <class>model.Tb1</class> <properties> <property name="eclipselink.jdbc.native-sql" value="true"/> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:6501/DB1"/> <property name="javax.persistence.jdbc.user" value="root"/> </properties> </persistence-unit> </persistence>
Entity class を作る
- New - Other - JPA - JPA Entities from Tables
- Tables: 内の table名 にチェックをつけて、finish
- Java Resources に model/table名.java ができる。
Servlet から DB に JPA を使用してアクセスする。
servlet のクラスを下記のように編集。
private static final EntityManagerFactory factory_ = Persistence.createEntityManagerFactory("dynamic_web"); private static final EntityManager manager_ = factory_.createEntityManager(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter rWriter = response.getWriter(); Query query = manager_.createNativeQuery("select * from DB1.TB1;", Tb1.class); @SuppressWarnings("unchecked") List<Tb1> entities = query.getResultList(); for(Tb1 e : entities){ rWriter.print("" + e.getField1() + ","); rWriter.print(e.getField2() + ","); rWriter.println(e.getField3()); } manager_.clear(); }
Eclipseで実行すると、DBの内容がブラウザ上に表示される。
Metamodel
JPA の Canonical Metamodel を生成するには、project設定の "Canonical metamodel (JPA 2.0)" にソースディレクトリを設定する。