mybatis
良く記述するパターン、 パラメータ変数 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>…
SqlSession session = new SqlSessionFactoryBuilder() .build(Resources.getResourceAsReader("mybatis-config.xml")) .openSession(); SqlSession openSession(boolean autoCommit); SqlSession openSession(Connection connection); SqlSession openSessi…
開発プロジェクトの方針にSQL文に固定値を記述するのを絶対に禁止とか 融通の効かない、賛同できないことが時々ある。 プロジェクトによってそういうのもあって苦労するのだが、mybatis には OGNL書式が使える OGNL(Object Graph Navigation Language) の…
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>…
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 の CURVAL() や、LASTVAL() で、シーケンスから求められるものではなく、 UUID のような型で Primary Key を構成するテーブル挿入直後のキーを取得したい。RETURNING を使う。insert文の次の書式 INSERT INTO テーブル VALUES (...) RETURNING PK…
去年、以下を書いたけれど、、 XMLMapperBuilder を使ってみる。 - Oboe吹きプログラマの黙示録 Java インターフェースクラスで書く Mapper の指定になってしまっている。 クラスローダーが読み込める全ての classpath から、XMLを見つけて parse する方法と…
過去、、いろいろ試行錯誤を書いていた。。 mybatis XML設定を使わない場合 - Oboe吹きプログラマの黙示録mybatis xml設定ファイル使わない場合の補足 - Oboe吹きプログラマの黙示録【再興】mybatis XML設定を使わない場合 - Oboe吹きプログラマの黙示録myba…
mybatis の一般的なSQL Mapper の指定は、Mapper インターフェースクラスのパッケージと 同じ階層に、SQLMap XML を配置するか、Configuration のXMLで、 <mappers> <mapper resource="sql/sqlmap.xml"/> </mappers> で書くであろう。 Configuration のXMLを書かずに、さらに、SQLMap XML の PATH をMapper イ…
1年以上前、mybatis config 設定 = 接続情報等のXMLを使わないケースで 以下を書いた。 【再興】mybatis XML設定を使わない場合 - Oboe吹きプログラマの黙示録1つの Mapper に限らず、複数 Mapper を使用することもあるのだから、以下が良い。 public sta…
既に生成済の SqlSession に対して後から SQL mapper を追加する方法 (設計として悪いので勧められない)セッションが持っている マッパーレジストリにマッパークラスを追加する。 import org.apache.ibatis.binding.MapperRegistry; import org.apache.iba…
設定コンフィグ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 バージョン 5.7.8 以降で使える JSON型に対する mybatis のハンドラ実装のサンプルです。 JSON型のデータが、単純な key-value だけでなくネストしたオブジェクトが入ったJSONでも、 Java のクラスのネストと対応できることを示すためのサンプルです。…
yipuran-mybatis GitHub - yipuran/yipuran-mybatis: mybatis used application をリリースやり直した。 enum のタイプハンドラを書いたのだが、 コード値を抱え持ち、コード値を参照するインターフェースに static メソッドを書いていたのだが、enum 実装と…
mybatis が enum に対するハンドラは、列挙名だけのマッピングなら、 org.apache.ibatis.type.EnumTypeHandler 列挙の並び、enum の int ordinal() メソッド、(0始まり、序数=0)で満足なら org.apache.ibatis.type.EnumOrdinalTypeHandler をで良いのだ…
今更、ではあるがメモ。 SpringBoot Ver 2.3.1 mybatis-spring-boot-starter は、Ver 2.1.3コードの読みやすさの為に、lombok を使うことにして、 build.gradle の設定は、、 dependencies { implementation 'org.springframework.boot:spring-boot-starter-…
コネクション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設定を使わない場合 - Oboe吹きプログラマの黙示録mybatis xml設定ファイル使わない場合の補足 - Oboe吹きプログラマの黙示録と書いたが、SQLMap の XML も書かないで、SQL文もアノテーションで済ませたい。mybatis 3.5.2 mysql-connect…
mybatis xml設定ファイル使わない場合の方法として まとめたが、、 mybatis XML設定を使わない場合 - Oboe吹きプログラマの黙示録接続設定をXMLに記述しないとしても、 やはり複雑なSQLをアノテーションに記述しては読みにくいので、 SQL文は、SQL Map…
mybatis テーブル列名が、snake case の場合、Java Object の属性名 camel case に マッピングさせる場合、configuration XMLファイルに記述する設定は、、、 mapUnderscoreToCamelCase を True で設定する。 <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> デフォルトは、False である。 これは、ty…
mybatis のスタートガイド https://mybatis.org/mybatis-3/ja/getting-started.html に書いてあるのは、どういうDatasource を用意すれば良いのか明記されてなくて ちょっと不親切と思っていた。 org.apache.ibatis.datasource.unpooled.UnpooledDataSource …
先日書いた int[] → ArrayTypeHandler - Oboe吹きプログラマの黙示録 に刺激されて、String[ ] , LocalDate[ ] , LocalDateTime[ ] , double[ ] とのマッピング もあるべきと思い、 GitHub - yipuran/yipuran-mybatis: mybatis used application の方で公開…
SQLクエリの結果から、int [ ]で受け取るための mybatis ArrayTypeHandler先日、PostgreSQL 再帰クエリの結果から、INTEGER型 配列を Integer[] で取得するものを 書きました。 oboe2uran.hatenablog.comInteger [ ] ではなくて、やはり、int [ ] で取得した…
先日の例、 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 を使っていて、logback のバージョン上げたのか何かのきっかけ、 依存関係かなにか?指定しているアペンダ悪い?で mybatis のデバッグレベルのログが出なくなってしまった。 実行するSQL文が見れてデバッグに便利だったlogaback.xml …
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>
mybatis のSQLアノテーションで動的SQLを書くには、SQLMap XMLで書いていた <if> 等を <script> で囲んで書く。 (例) @Select("<script>SELECT * FROM shops WHERE delete_flg = 0 " + "<if test=\"branch_id != null\"> AND branch_id = #{branch_id}</if>" + " </script></if>…
Java7→Java8 移行で、mybatis を使うプロジェクトで注意しなければならないのは、 java.util.Date の代わりに java.time.LocalDate / LocalDateTime に置き換わった時です。 mybatis でタイプハンドラを指定やらないとなりません。MITライセンスで、このハ…
MySQL をJavaで使用してTIMESTAMP や DATETIME をJavaのオブジェクトに変換する時、データに0が入ってたりすると、 Value '0000-00-00' can not be represented as java.sql.Timestamp JDBC SQLException を発生してしまう。Java用のMySQLコネクタ…
MyBatis 動的SQL の <if> を書く場合によく使うのが、null か null でないかであろう。 <if test="billno != null"> </if> test文を不等号で書くときは、、、 < → < > → > 論理和の演算子は、Java と同じ ’ || ’ が書けるが、 論理積の演算子は、’&& ’ で書くことはできない! 論理積の演</if>…