tech

@Transactional

トランザクション制御

メソッドの上に記述
メソッド内のDBを利用する一連の処理を一括して実行する
@Transactional(readOnly=false) とすることでデータ更新を許可する

@ModelAttribute

@ModelAttributeの利用

エンティティクラスのインスタンスを自動的に用意し、ControllerとView間でのエンティティの受け渡しを行える。

Controller側

View側

Map

Map memo

List

List memo

pom.xml

Spring Boot での POM(Project Object Model)メモ

JpaRepository

Spring Boot での Repository の初期動作

1.アプリケーション起動時に @Repository の付けられたインターフェースを検索し、自動的にその実装クラスが作成され、更にそのインスタンスがアプリケーションにBeanとして登録される。

2.コントローラなどのクラスがロードされる際、@Autowiredが指定されているフィールドがあると、登録済みのBeanから同じクラスのものを検索し、自動的にそのフィールドに割り当たる。

JpaRepository を継承した独自のインターフェース

JpaRepositoryの標準メソッド

リポジトリの拡張:キャメル記法

独自のRepositoryインターフェースにキャメル記法でクエリを追加

リポジトリの拡張:@Query

SQL文をそのままRepositoryインターフェースに登録して使う

Entity

エンティティクラスの定義

***

NamedQueries

***

DAO

AOP

***

DI

Dependency Injection

***

Controller 基本

@RestController の基本

@Controller

@PathVariable

Model.addAttribute

@Controller 2

@RequestParam

RequestMethod

ModelAndView.addObject

Annotation

起動クラス (基本)

変数式

変数式の使い方

基本 th:text
変数の呼び出し
${msg} がセットされている場合は、”please wait….”は表示されない。変数式:${} :OGNL(Object Graph Navigation Language)
 <p th:text=”${msg}”>please wait….</p>
基本 th:text
インスタンスのnew + メソッドの呼び出し
<p th:text=”${new java.util.Date().toString()}”></p>
ユーティリティオブジェクト #strings
クラスの定数。
#strings.○○ のようにフィールドやメソッドを呼び出して利用する
new #strings にようにインスタンスを作るような利用はできない。
<p th:text=”${#strings.toUpperCase(‘Welcome to Spring.’)}”></p>
#number <p th:text=”${#numbers.formatInteger(1234,7)}”></p>
#dates <p th:text=”${#dates.format(new java.util.Date(),’dd/MMM/yyyy HH:mm’)}”></p>
#bools
#objects
#arryas
#lists
#sets
#maps
クエリテキストのパラメータ処理(view) クエリテキストにパラメータを付けて送信されてきたときのviewでの利用

http://localhost:8080/home/?id=ok&id=ng&name=tuyano

<p th:text=”‘from parameter… id=’ + ${param.id[0]
+ ‘, id=’ + param.id[1]
+ ‘ ,name=’ + param.name[0]}”></p>
メッセージ式 プロパティファイルの値をとる <p th:text=”#{content.message}”></p>
リンク式 クエリテキストのパラメータをリンクに組み込む

http://localhost:8080/home/?id=123

 <p><a th:href=”@{‘/home/’ + ${param.id[0]}}”>link</a></p>
オブジェクト利用 オブジェクトのプロパティを変数式で出力する

左記は、 ${object.id} と同義

 <table th:object=”${object}”>  <!– tableタグでオブジェクトを設定 –>
<tr>
<th>ID</th>
<td th:text=”*{id}”></td>   <!– tableタブ内では *{プロパティ} で呼べる –>
</tr>
<tr>
<th>NAME</th>
<td th:text=”*{name}”></td>
</tr>
</table>
リテラル置換 変数式とテキストを文字結合する際の ”+” を省略
| で囲む。
 <div th:object=”${object}”>
<p th:text=”|my name is *{name}. mail address is *{value}.|”>message.</p>
<p th:text=”‘my name is ‘ + *{name} + ‘. mail address is ‘ + *{value} + ‘.'”>message.</p>
</div>
HTMLコード出力 th:utext :アンエスケープテキスト属性

mav.addObject(“msg”, “message 1<hr/>message 2<br/>message 3”);

<p th:utext=”${msg}”>message.</p>
三項演算子 変数式 ? 値1 : 値2

下記のように参考式に他の文字を結合しようとするとなぜか正しくうごかない
<p th:text=”${id1} + ‘ is ‘ + ${check} ? ${trueVal} : ${falseVal}”></p>

<p th:text=”${check} ? ${trueVal} : ${falseVal}”></p>
条件分岐 th:if th:if= trueのときにのみ表示される処理
trueの条件(true、0以外の数値、0、off、noなど以外のテキスト)
th:unless= falseのときにのみ表示される処理
falseの条件(false、0の数値、0、off、noなどのテキスト
<p th:if=”${check}” th:text=”${id} + ‘ is ‘ + ${trueVal}”></p>
<p th:unless=”${check}” th:text=”${id} + ‘ is ‘ + ${falseVal}”></p>
条件分岐 th:switch <div th:switch=”${check}”>
<p th:case=”0″ th:text=”|${month} – Winter|”></p>
<p th:case=”1″ th:text=”|${month} – Spring|”></p>
<p th:case=”2″ th:text=”|${month} – Summer|”></p>
<p th:case=”3″ th:text=”|${month} – Autumn|”></p>
<p th:case=”4″ th:text=”|${month} – Winter|”></p>
<p th:case=”*”>…?</p>
</div>
繰り返し th:each
コレクションや配列を回す
・エンティティでの利用
<ul th:each=”obj : ${list}”>
<li th:text=”${obj}”></li>
</ul>
—————–
・配列のリストの利用
<table>
<tr>
<th>NAME</th>
<th>MAIL</th>
<th>TEL</th>
</tr>
<tr th:each=”obj:${data}”>
<td th:text=”${obj[0]}”></td>
<td th:text=”${obj[1]}”></td>
<td th:text=”${obj[2]}”></td>
</tr>
</table>
プリプロセッシング __${変数式}__ アンダースコア2つずつで挟む
変数式に数式等をテキストでバインドしておき、上記記述で式が評価されるmav.addObject(“check”, “num >= data.size() ? 0 : num”);
<table th:object=”${data.get(__${check}__)}”>
<tr><th>ID</th><td th:text=”*{id}”></td></tr>
<tr><th>NAME</th><td th:text=”*{name}”></td></tr>
<tr><th>MAIL</th><td th:text=”*{value}”></td></tr>
</table>
変数式 インライン 親タグで th:inline=”text” を記述しておき、
インラインで記述したい変数式は  [[${変数式}]] で記載。
記述場所はHTMLでのテキスト記述と同じで、タグで挟む
 <table th:inline=”text”>
<tr>
<th>ID</th>
<th>NAME</th>
<th>MAIL</th>
</tr>
<tr th:each=”obj : ${data}”>
<td th:text=”${obj.id}”></td>
<td>[[${obj.name}]]</td>
<td>[[${obj.value}]]</td>
</tr>
</table>
変数式 インライン(javascript) javascript 内に変数式をインラインで記述する

scriptタグで th:inline=”javascript” を記述しておき、
インラインで記述したい変数式は  /*[[${変数式}]]*/ で記載。

<script th:inline=”javascript”>
function action(){
var val = document.getElementById(“text1”).value;
var res = parseInt(val * ((100 + /*[[${tax}]]*/) / 100));
document.getElementById(“msg”).innerHTML = “include tax: ” + res;
}
</script>
テンプレートフラグメント コンポーネント側のテンプレート
<○○ th:fragment=”fragment-name” >利用側のテンプレート
<●● th:include=”templeate-name :: fragment-name”>