気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

意外と知らないEclipseコード補完で使えるテンプレート

テンプレートを使った補完って便利ですよね。
あまり使っていなかったけど、便利なテンプレートを紹介してみます。

また、よく書く記述はテンプレート化して、入力量と記述ミスを減らしていくと無用なデバッグが減って 仕様確認、設計など大事なことに時間を使えます。

既存テンプレート

「toarray」なら、toaなどと入力して、コード補完のコマンドを叩くと、toarrayが候補に現れ、選択できます。 入力すると、$内にカーソルがあたり、入力できるようになります。

ちなみにソースはテンプレート内のコードです。

toarray

(${type:elemType(collection)}[]) ${collection}.toArray(new ${type}[${collection}.size()])

sysout

System.out.println(${word_selection}${});${cursor}

switch

switch (${key}) {
    case ${value}:
        ${cursor}
        break;

    default:
        break;
}

try_catch

try {
    ${line_selection}${cursor}
} catch (${Exception} ${exception_variable_name}) {
    // ${todo}: handle exception
}

Eclipse開発環境を便利にする4つの設定

開発作業の効率化のために、Eclipseでやっておくと便利な設定を以下に記載しておきます。

※以前はてな記法で記載したものが見辛かったのでMark down形式で書き直しておきます。

Eclipseのテンプレート機能

sublime textで便利だと思っていたコードスニペットに似た機能がeclipseにもあり、自分好みにカスタマイズしたくなりました。

http://www.atmarkit.co.jp/fjava/javatips/056eclipse020.html
→forと入力時にCtrl + Spaceと入力すると表示されるテンプレートを自作する方法
→作成したものはエクスポートしておき共有するとチームに喜ばれるます。

自動補完トリガー設定

[Java]-[エディター]-[コンテンツ・アシスト]のメニューを開きます。

自動有効化の欄のJavaJavadocに以下の文字を設定します。
Java:「.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
Javadoc:「@#<.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

上記設定で、設定文字列入力タイミングで補完候補が表示され、入力負担を軽減できます。

static インポートを展開しない

・import static org.junit.Assert. を展開しないようにする設定
[Java]-[コードスタイル]-[インポートの編成] の .
に必要な静的インポート数 を 1 にする

入力文字が最大幅で折り返されるように設定

1.[Java]-[コードスタイル]-[フォーマッター]-[編集]
2.プロファイル名を変更
3.行の折り返しタブ→代入の設定→行の折り返しポリシーにおいて

「必要な場合は折り返す」

に設定する。

達人に学ぶSQL徹底指南書の振り返るための要点

以下を読了しました。定期的に振り返る際のインデックスになる情報を纏めます。 詳細なSQLや内容は本を読んで確認してみて下さい。

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS) https://amzn.to/2IwwYWj

1 CASE式

記述時の注意点

  • 各分岐が返すデータ型を統一する
  • ELSE、ENDは必ず書く。ELSEなしは、暗黙でELSE NULL

機能

  • CASE式の結果は値。SELECT、WHERE、GROUP BY句などどこでも記述できる
  • 値の張替え。条件に応じて値を変更し、振り分けられる。
  • SUMと組み合わせると特定条件レコードのカウントアップができる

※ 随時追記

Mavenで取得したJarのソースコードをEclipseにを添付する

Mavenで取得したJarのソースコードが参照できなかったので、 ソースコードのダウンロードを行う設定をMavenEclipseプラグインで設定しました。

pom.xmlへの設定

buildタグ内に「maven-eclipse-plugin」の設定を追記。

<build>
    ・
    ・
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-eclipse-plugin</artifactId>
      <configuration>
        <downloadSources>true</downloadSources>
        <downloadJavadocs>true</downloadJavadocs>
      </configuration>
    </plugin>
  </plugins>
</build>

プロジェクト右クリックで表示されるメニューの実行で「7 Maven ビルド]
を選択し、Mavenビルドの実行構成を開く。

ゴールに以下の設定を追加。eclipseプロジェクトに変更するコマンドですが、
この際にpomにおける「downloadSources」の設定を適用し、ソースコードをダウンロードします。

eclipse:eclipse

f:id:tamata78:20190623111423p:plain

ただ、これだけでは、ソースコードをダウンロードしただけなので、以下を行います。

jarのソースを開く、ソース添付でsourceのjarを添付。
jar内のソースも参照できるようになる。

見たかったopen csvのソースがやっと見れるようになりました。

f:id:tamata78:20190623111507p:plain

TomcatのCatalinaってなんだろう

Tomcatインストールディレクトリ内にCatalinaという用語はいくつか出てくるが
その意味について少し整理しておく。

Catalinaとは

サーブレットコンテナ。
Tomcat自体も広義ではサーブレットコンテナらしいが、
紛らわしいので、Webコンテナと呼ばれているらしい。

CATALINA_HOME

Tomcatのインストールディレクトリ。
昔は、TOMCAT_HOMEだったよう。同じサーブレットコンテナだったから?

CATALINA_HOMEとCATALINA_BASE

CATALINA_BASEは、基本CATALINA_HOMEと同じパスが設定される。
別パスを設定するとこでエンジン部分(CATALINA_HOME)とデータ部分(CATALINA_BASE)を分けられるらしい。

CATALINA_HOME/conf/Catalina/localhost

CATALINA_HOME/conf/Catalina/localhostは、
context.xml(アプリケーション登録情報)が配置されるディレクトリです。
eclipseでサーバー追加(アプリデプロイ設定)をするとcontext.xmlが生成されます。

ここでのCatalinaのディレクトリは、サーブレットコンテナの設定ファイルを格納しているとの意味で命名されていると思われる。

context.xml

<Context path="/hello"
docBase="c:/sampleApp/helloworld"/>

Tomcatについて理解を深めたい方は、以下の記事もあります。Tomcatディレクトリ構成とその意味など書いています。
tamata78.hatenablog.com

Tomcatに関連して、WebサーバーのApacheについて
tamata78.hatenablog.com

MySQL Supser権限を付与する

Supser権限を付与

テーブル定義+データインポートの際に、Super権限が必要との事だったので、付与

Super権限が付与されていないことを確認

SELECT host, user, Super_priv FROM mysql.user WHERE user='hoge';
+-----------+---------------+------------+
| host      | user          | Super_priv |
+-----------+---------------+------------+
| localhost | root          | Y          |
| localhost | mysql.session | Y          |
| localhost | mysql.sys     | N          |
| localhost | hoge          | N          |
+-----------+---------------+------------+

Super権限を付与する

UPDATE mysql.user SET Super_priv='Y' WHERE user='hoge';
SELECT host, user, Super_priv FROM mysql.user WHERE user='hoge';
+-----------+---------------+------------+
| host      | user          | Super_priv |
+-----------+---------------+------------+
| localhost | root          | Y          |
| localhost | mysql.session | Y          |
| localhost | mysql.sys     | N          |
| localhost | hoge          | Y          |
+-----------+---------------+------------+

DBアクセス MyBatisの各種ファイルを自動生成するための設定

公式の下記ページをGoogle翻訳した手順を貼っておく。

MyBatis各種ファイル自動設定 http://www.mybatis.org/generator/index.html

MyBatis各種ファイル自動生成する

以下、翻訳したものを引用

eclipseマーケットプレイスで、プラグイン「MyBatis Generator」を検索して、インストール

②構成ファイルを作成します。 ファイル>新規>その他 [MyBatis]カテゴリから[MyBatis Generator構成ファイル]を選択し、[次へ]をクリックします。 ファイルの場所とファイルの名前を指定します(デフォルトはgeneratorConfig.xml)。 ウィザードを終了する

③設定ファイルを書く 少なくとも、以下を指定する必要があります。 ・ターゲットデータベースへの接続方法を指定するjdbcConnection情報 ・javaModelGeneratorのターゲットパッケージとターゲットプロジェクト ・sqlMapGeneratorのターゲットパッケージとターゲットプロジェクト ・ターゲットパッケージ、ターゲットプロジェクト、およびjavaClientGeneratorのタイプ(またはJavaクライアントを生成したくない場合は、javaClientGenerator要素を削除できます) ・少なくとも1つのデータベーステーブル

ファイルを保存する

Eclipseのナビゲーター、またはパッケージ・エクスプローラーの構成ファイルを右クリックして、メニュー・オプション「Run As> Run MyBatis Generator」を表示してください。

自動生成コマンド実行時に発生したエラー

C:\work\workspace\.metadata\.plugins\org.mybatis.generator.eclipse.ui\.generatedAntScripts\sample-generationConfig.xml.xml:4:
The server time zone value ' (W)' is unrecognized or represents more than one time zone. 
You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
    <!-- スキーマ情報を取得する DB への接続設定 -->
    <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
        connectionURL="jdbc:mysql://localhost:3306/db_name"

接続先URLに「?serverTimezone=JST」とパラメータを付与して回避。

  javax.net.ssl.SSLException

  MESSAGE: closing inbound before receiving peer's close_notify

自動生成時のコンソールに上記エラー発生。「useSSL=false」もURLに付与してみたりしたが、今度は自動生成できなくなったので。一旦、放置。。

DBコネクションクローズ時のエラーのため、ファイル自体は生成できていた。