ASi

Eclipse で MySQL & JPA servlet を作成

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サーバのアドレス類の設定
MySQLhttp://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 ができる。
  • mysql-connector-java-5.1.40-bin.jar を local PC の /lib 下に コピーする。


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)" にソースディレクトリを設定する。