Mavenでmybatis、postgresql開発環境を構築

pom.xmlに依存関係設定

mavenプロジェクトを作成、pom.xmlを編集。

pom.xmlに依存関係を追加、jarを自動ダウンロードしてくれる。

<dependencies>
  <!-- https://mvnrepository.com/artifact/postgresql/postgresql -->
  <dependency>
      <groupId>postgresql</groupId>
      <artifactId>postgresql</artifactId>
     ><version>9.1-901-1.jdbc4</version>
  </dependency>
  <!-- http://mvnrepository.com/artifact/org.mybatis/mybatis -->
  <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.0</version>
  </dependency>
</dependencies>

postgresql接続設定

postgresqlデータベースにアクセスするため、下記の設定をする。

src\main\resources\にmybatis-config.xmlファイルを新規作成する。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

<!--     JDBCの設定、デフォルト環境を指定-->
    <environments default="pdm">
<!--     接続先、ユーザーパスワードを記入するパターン-->
        <environment id="pdm">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="org.postgresql.Driver" />
                <property name="url" value="jdbc:postgresql://127.0.0.1:5432/pdm" />
                <property name="username" value="xxxx" />
                <property name="password" value="yyyy" />
            </dataSource>
        </environment>
<!--     サーバー上のDB接続情報を使用するパターン-->
        <environment id="test">
          <transactionManager type="MANAGED"/>

          <dataSource type="JNDI"> <!-- ★JNDI にする -->
            <!-- JNDI からlookupする名-->
            <property name="data_source" value="java:/comp/env/jdbc/pdm"/>
          </dataSource>
        </environment>
    </environments>

<!--     エンティティのパッケージを指定します-->
    <mappers>
        <package name="smartz.pdm.db" />
    </mappers>

</configuration>

DB処理の実装

ここで実装する処理はjava1.7以上が必要になる。ビルドエラー「-source 1.5でサポートされていません」が出るなら、pom.xml に下記を追記

pom.xml追記

<properties>
  <maven.compiler.source>1.7</maven.compiler.source>
  <maven.compiler.target>1.7</maven.compiler.target>
</properties>

DB接続

// resources直下のmybatis-config.xmlを読み込み
try (Reader r = Resources.getResourceAsReader("mybatis-config.xml");) {

    // 設定ファイルからSqlSessionFactoryを生成
    factory = new SqlSessionFactoryBuilder().build(r); // [environment id]指定可能

    r.close();
} catch (Exception e) {
    e.printStackTrace();
}

検索処理

// SQLセッションを取得
SqlSession session = factory.openSession();
try {

    // MstUserinfoテーブルのMapperを取得
    MstUserinfoMapper map = session.getMapper(MstUserinfoMapper.class);
    // MstUserinfoテーブルの主キーで検索
    MstUserinfo userinfo = map.selectByPrimaryKey(userid);

    // 取得した内容を確認
    System.out.println("userinfo.getUsername    = " + userinfo.getUsername());

    // Mapped SQL Statements使用方法①
    userinfo = session.selectOne("smartz.pdm.db.MstUserinfoMapper.selectMstUserinfo", userid);
    // Mapped SQL Statements使用方法②
    userinfo = map.selectMstUserinfo(userid);

    // 取得した内容を確認
    System.out.println("userinfo.getUsername    = " + userinfo.getUsername());

    return userinfo;
} finally {
    session.close();
}

Mapped SQL Statementsについて

方法①:MstUserinfoMapper.xml(このファイルの自動生成は下に記述あり)に下記のXMLを追加

MstUserinfoMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="smartz.pdm.db">

<!--ここは自動生成以外の追加分-->
  <select id="selectMstUserinfo" resultType="MstUserinfo">
    select * from mst_userinfo where userid = #{id}
  </select>

方法②:Java アノテーションを使用して、インターフェイスに下記の記述を追加

MstUserinfoMapper.java

public interface MstUserinfoMapper {

    @Select("select * from mst_userinfo where userid = #{id}")
    MstUserinfo selectMstUserinfo(String id);

}

ソースの自動生成、mybatis-generatorについて


mybatis-generatorはDBから各テーブルの検索処理、テーブルクラスなどを自動生成するpluginです。

src\resources\にgeneratorConfig.xmlを作成する。

generatorConfig.xmlの定義

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration >
<!--generatorConfig.xmlをデフォルトパス(src\resources\generatorConfig.xml)に配置-->
  <classPathEntry location="C:/Users/Sa/.m2/repository/postgresql/postgresql/9.1-901-1.jdbc4/postgresql-9.1-901-1.jdbc4.jar"/>
  <context id="PostgresTables" targetRuntime="MyBatis3">
    <jdbcConnection driverClass="org.postgresql.Driver" connectionURL="jdbc:postgresql://127.0.0.1:5432/pdm" userId="XXXX" password="YYYY" />
    <javaModelGenerator targetPackage="smartz.pdm.db" targetProject="C:\workspace\smartz-db\src\main\java\" />
    <sqlMapGenerator targetPackage="smartz.pdm.db" targetProject="C:\workspace\smartz-db\src\main\java\" />
    <javaClientGenerator targetPackage="smartz.pdm.db" targetProject="C:\workspace\smartz-db\src\main\java\" type="XMLMAPPER" />
    <table schema="pdmdb" tableName="%" >
    </table>
  </context>
</generatorConfiguration>

pom.xml追加分

pom.xml にpluginを追加

<build>
  <plugins>
      <plugin>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3.0</version>
      </plugin>
  </plugins>
</build>

ファイル生成を実行

xmlファイルを右クリック、実行⇒実行の構成⇒Mavenビルドのゴール に 「mybatis-generator:generate」を記入して、実行。

generatorConfig.xmlに記入したフォルダに各ファイルは自動生成される。

MstUserinfo.java
MstUserinfoExample.java
MstUserinfoMapper.java
MstUserinfoMapper.xml

データベースアクセス用各オブジェクトのライフサイクル

SqlSessionFactoryBuilder

SqlSessionFactory生成用、一度だけ使います。◆メソッド内にローカル変数で定義

SqlSessionFactory

アプリケーション実行中に使いまわします。◆スタティック変数で定義

SqlSession

リクエスト毎にインスタンスを生成したほうが最適でしょう。◆メソッド内にローカル変数で定義、closeを忘れずに

Mapper インスタンス

SqlSessionと同じ位置扱い。◆メソッド内にローカル変数で定義、closeを忘れずに

>> HOME

top



mail to me:mailaddress
Copyright(c) 2019 zcm.