Spring(MVC) + HibernateでOracle DBに接続

## ojdbcのインストール

mavenリポジトリにOracle用JDBCドライバ最新版がないのでojdbcをダウンロードして手動でmavenのローカルリポジトリにインストールする。

![image](https://qiita-image-store.s3.amazonaws.com/0/133525/c5f36bc4-151d-3f08-fba5-f40137b54fe1.png)

Oracleのサイトからojdbc6.jarをダウンロード
(今回はOracle XE 11gと接続するのでこれを使用)

ojdbc6.jarがあるところまでcdして以下を実行

```
> mvn install:install-file -Dfile=ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.1.0.7.0 -Dpackaging=jar
```

無事インストール完了すると
C:\Users\\(ユーザ名)\\.m2\repository\com\oracle\ojdbc6\11.1.0.7.0
ができてその中にojdbc6関連のファイルが出来上がる
※M2_REPO環境変数を設定しているとそっちのパスにできる

![image](https://qiita-image-store.s3.amazonaws.com/0/133525/95590a7b-2ec0-938b-cd8b-506197941a2d.png)

## Eclipseの設定

まずは、上記でインストールしたojdbcをpom.xmlに追加

![image](https://qiita-image-store.s3.amazonaws.com/0/133525/adfba5d5-258c-de50-698d-ae9d325bf686.png)

今回はHibernateでOracleに接続する。
以下のライブラリをpom.xmlに追加。
・hibernate-entitymanager
・hibernate-core
~~・spring-core~~
~~・spring-jdbc~~
~~・spring-orm~~
~~※JdbcTemplateで接続とかも試していたので不要なのもあるかも。。~~

![image](https://qiita-image-store.s3.amazonaws.com/0/133525/d37d5df6-8e62-3386-e320-ad81d3aa0e38.png)

src/main/resources にMETA_INFフォルダを作成しそこにpersistence.xmlを作成
※今回はJPA2.1を使用するように設定

``` persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
  version="2.1">

	<persistence-unit name="jpa.sample">
		<description>test</description>
		<class>jp.test.spring.entity.*</class>
		<properties>
			<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver" />
			<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521/xe" />
			<property name="javax.persistence.jdbc.user" value="scott" />
			<property name="javax.persistence.jdbc.password" value="tigger" />
			<property name="hibernate.show_sql" value="true" />
		</properties>
	</persistence-unit>
</persistence>
```

※\<class\>タグにはEntityクラスを置くパッケージを指定する。

## Entityクラスの作成

``` NameT.java
package jp.test.spring.entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

@NamedQueries(
	@NamedQuery(name="NameT.findAll", query="select n from NameT n")
)
@Entity
@Table(name = "NAMET")
public class NameT implements Serializable {

	@Id
	@Column(nullable = false)
	private int id;

	@Column()
	private String name;

	// getter,setter省略
}
```

## EntityManagerでDBアクセス

``` xxx.java
public List<NameT> getJpa() {
	EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa.sample");
	EntityManager em = emf.createEntityManager();

	List<NameT> nameTList = em.createNamedQuery("NameT.findAll", NameT.class).getResultList();
	for (NameT nameT : nameTList) {
		logger.info("id: " + nameT.getId() + " / name: " + nameT.getName());
	}

	em.close();
	emf.close();

	return nameTList;
}
```

でアクセス可能