mybatis

PostgreSQL mybatis JSONB型があるテーブルへの insert

例)jbooks というテーブルの列名=jdata が JSONB型だとする。ObjectMapper の writeValueAsString に頼る方法 SQLMap XML で bindタグで、writeValueAsString が働くようにする。 <insert id="insertJbook"> <bind name="jdata" value="objectMapper.writeValueAsString(object)" /> INSERT INTO jbooks (id, title, jdata) VALUES(#{id}, #{title}, '${jda</bind></insert>…

SQLMapper interface を追加する

プログラムの管理の側面から、mybatis の SQLMapper をプログラムの動作中に追加することは 禁止されるべきであろう。 でも、SQLMap の XML を用意せずに Mappper インターフェースを追加することは可能なのです。SqlSession session という生成済みの SqlSe…

Jacksonを使う代わりに PostgreSQL の JSON関数を使う

Java で JSON を編集するときによく使われるのが Jackson ライブラリであろう。 巨大で階層が深い中の値を変更するのは、Jackson の JsonNode としてJSONを読み込んで、コードを書くのも 面倒くさいばかりでなく、あまり汎用的なものは期待できない。 Postgr…

UUID のタイプハンドラ

UUID型のタイプハンドラの必要性をあまり感じなかったので、今まで書いてなかった。 PostgreSQL なら、gen_random_uuid() 関数で生成してくれるし SELECT クエリ結果も、mybatis は、String に自動マッピングで抽出できるとなると、 あまり、java.util.UUID …

mybatis の if 文

良く記述するパターン、 パラメータ変数 String type; に対して、、 WHERE 1=1 <if test="type == null"> AND id = #{id} </if> <if test="type != null"> 文字列比較:空文字 <if test="type == ''"> 文字列比較:任意 <if test="type == 'A012'"> 以外にもあまり書かないパターンで、 パラメータ変数の型が boolean なら、 boolean flg であれば、 <if test="flg"> で、flg = true</if></if></if></if>…

MyBatis の SqlSessionFactory

SqlSession session = new SqlSessionFactoryBuilder() .build(Resources.getResourceAsReader("mybatis-config.xml")) .openSession(); SqlSession openSession(boolean autoCommit); SqlSession openSession(Connection connection); SqlSession openSessi…

mybatis で固定値をSQL Mapで指定するにはOGNL式を使う

開発プロジェクトの方針にSQL文に固定値を記述するのを絶対に禁止とか 融通の効かない、賛同できないことが時々ある。 プロジェクトによってそういうのもあって苦労するのだが、mybatis には OGNL書式が使える OGNL(Object Graph Navigation Language) の…

mybatis 可変長引数メソッドをSQLアノテーションで。。。

Javaメソッド可変長引数(variable length arguments)使用での SQLアノテーションリストを引数にした場合のサンプル @Select("<script>SELECT * FROM tb_items WHERE 1=1" + " AND item_id IN <foreach collection='list' item='id'" + " separator=',' open='(' cl</script>…

mybatis の foreach は、ネスト(入れ子)を書けるか?

Yes. 書けます。mybatis の foreach で、1つの foreach で良く使うのは、バルクインサートを書く時、、 INSERT INTO items ( id, name. length ) VALUES <foreach collection="list" item="e" separator=","> ( #{e.id}, #{e.name}, #{e.length} ) </foreach> バルクインサートでなお且つ、インサート文で指定するカラム…

PostgreSQL で mySQL の last_insert_id() 相当をmybatis で実装したい

PostgreSQL の CURVAL() や、LASTVAL() で、シーケンスから求められるものではなく、 UUID のような型で Primary Key を構成するテーブル挿入直後のキーを取得したい。RETURNING を使う。insert文の次の書式 INSERT INTO テーブル VALUES (...) RETURNING PK…

XMLMapperBuilder でSQLMapper XML を parse

去年、以下を書いたけれど、、 XMLMapperBuilder を使ってみる。 - Oboe吹きプログラマの黙示録 Java インターフェースクラスで書く Mapper の指定になってしまっている。 クラスローダーが読み込める全ての classpath から、XMLを見つけて parse する方法と…

config XMLを記述しない mybatis を目指して。。。

過去、、いろいろ試行錯誤を書いていた。。 mybatis XML設定を使わない場合 - Oboe吹きプログラマの黙示録mybatis xml設定ファイル使わない場合の補足 - Oboe吹きプログラマの黙示録【再興】mybatis XML設定を使わない場合 - Oboe吹きプログラマの黙示録myba…

XMLMapperBuilder を使ってみる。

mybatis の一般的なSQL Mapper の指定は、Mapper インターフェースクラスのパッケージと 同じ階層に、SQLMap XML を配置するか、Configuration のXMLで、 <mappers> <mapper resource="sql/sqlmap.xml"/> </mappers> で書くであろう。 Configuration のXMLを書かずに、さらに、SQLMap XML の PATH をMapper イ…

mybatis config のXMLを書かない

1年以上前、mybatis config 設定 = 接続情報等のXMLを使わないケースで 以下を書いた。 【再興】mybatis XML設定を使わない場合 - Oboe吹きプログラマの黙示録1つの Mapper に限らず、複数 Mapper を使用することもあるのだから、以下が良い。 public sta…

mybatis で、後からマッパーを追加する。

既に生成済の SqlSession に対して後から SQL mapper を追加する方法 (設計として悪いので勧められない)セッションが持っている マッパーレジストリにマッパークラスを追加する。 import org.apache.ibatis.binding.MapperRegistry; import org.apache.iba…

mybatis の短い SqlSession の生成方法

設定コンフィグXML がある前提で、、 org.apache.ibatis.io.Resources を使用して、 import java.io.IOException; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFacto…

MySQL JSON型をmybatis で読み書きするサンプル

MySQL バージョン 5.7.8 以降で使える JSON型に対する mybatis のハンドラ実装のサンプルです。 JSON型のデータが、単純な key-value だけでなくネストしたオブジェクトが入ったJSONでも、 Java のクラスのネストと対応できることを示すためのサンプルです。…

コード値を抱える enum のタイプハンドラ

yipuran-mybatis GitHub - yipuran/yipuran-mybatis: mybatis used application をリリースやり直した。 enum のタイプハンドラを書いたのだが、 コード値を抱え持ち、コード値を参照するインターフェースに static メソッドを書いていたのだが、enum 実装と…

mybatis の enum TypeHandler を汎用的にする。

mybatis が enum に対するハンドラは、列挙名だけのマッピングなら、 org.apache.ibatis.type.EnumTypeHandler 列挙の並び、enum の int ordinal() メソッド、(0始まり、序数=0)で満足なら org.apache.ibatis.type.EnumOrdinalTypeHandler をで良いのだ…

SpringBoot mybatis の コンフィグレーション

今更、ではあるがメモ。 SpringBoot Ver 2.3.1 mybatis-spring-boot-starter は、Ver 2.1.3コードの読みやすさの為に、lombok を使うことにして、 build.gradle の設定は、、 dependencies { implementation 'org.springframework.boot:spring-boot-starter-…

mybatis + HikariCP

コネクションPOOL に HikariCP を使用した mybatis の接続 【再興】mybatis XML設定を使わない場合 - Oboe吹きプログラマの黙示録 のパターンで書いてみる。HikariCP 3.4.5 <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.5</version> </dependency> mysql-connector-java 8.0.21 <dependency> <groupId>mysql</groupId> </dependency>

【再興】mybatis XML設定を使わない場合

過去に、 mybatis XML設定を使わない場合 - Oboe吹きプログラマの黙示録mybatis xml設定ファイル使わない場合の補足 - Oboe吹きプログラマの黙示録と書いたが、SQLMap の XML も書かないで、SQL文もアノテーションで済ませたい。mybatis 3.5.2 mysql-connect…

mybatis xml設定ファイル使わない場合の補足

mybatis xml設定ファイル使わない場合の方法として まとめたが、、 mybatis XML設定を使わない場合 - Oboe吹きプログラマの黙示録接続設定をXMLに記述しないとしても、 やはり複雑なSQLをアノテーションに記述しては読みにくいので、 SQL文は、SQL Map…

mybatis snake case to camel case

mybatis テーブル列名が、snake case の場合、Java Object の属性名 camel case に マッピングさせる場合、configuration XMLファイルに記述する設定は、、、 mapUnderscoreToCamelCase を True で設定する。 <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> デフォルトは、False である。 これは、ty…

mybatis XML設定を使わない場合

mybatis のスタートガイド https://mybatis.org/mybatis-3/ja/getting-started.html に書いてあるのは、どういうDatasource を用意すれば良いのか明記されてなくて ちょっと不親切と思っていた。 org.apache.ibatis.datasource.unpooled.UnpooledDataSource …

配列型に対するmybatis の TypeHandler よく使いそうなものを作った

先日書いた int[] → ArrayTypeHandler - Oboe吹きプログラマの黙示録 に刺激されて、String[ ] , LocalDate[ ] , LocalDateTime[ ] , double[ ] とのマッピング もあるべきと思い、 GitHub - yipuran/yipuran-mybatis: mybatis used application の方で公開…

int[] → ArrayTypeHandler

SQLクエリの結果から、int [ ]で受け取るための mybatis ArrayTypeHandler先日、PostgreSQL 再帰クエリの結果から、INTEGER型 配列を Integer[] で取得するものを 書きました。 oboe2uran.hatenablog.comInteger [ ] ではなくて、やはり、int [ ] で取得した…

PostgreSQL の再帰SQL→Array → mybatis で取得

先日の例、 PostgreSQL の再帰SQL で要素の連結結果を求める。 - Oboe吹きプログラマの黙示録 テーブル名:division id parent_id name 1 null A 2 1 B 3 2 C 4 2 D ここから、連結文字列の結果、id と name "1" "1,2" "1,2,3" "1,2,4""A" "A,B" "A,B,C" "A,…

mybatis logbackが出なくなった場合の対処

mybatis 、logback を使っていて、logback のバージョン上げたのか何かのきっかけ、 依存関係かなにか?指定しているアペンダ悪い?で mybatis のデバッグレベルのログが出なくなってしまった。 実行するSQL文が見れてデバッグに便利だったlogaback.xml …

mybatis foreach の index を使う

MyBatis の foreach の index を使えば、Multiple INSERT を実行するとき foreach のカウンタを挿入する行の 列の値にすることができる。 <insert id="insertEmployee" parameterType="map"> INSERT INTO employees ( employee_name , employee_no ) VALUES <foreach collection="e_list" item="e" separator="," index="index"> ( #{e.dummy}, #{index} ) </foreach></insert>