拾い集めたtipsのまとめ。
シーケンスの一覧取得
SELECT * FROM all_objects WHERE object_type='SEQUENCE'
upsert
MERGE INTO TEST01
USING DUAL
ON (ID=4)
WHEN MATCHED THEN
UPDATE SET TEXT='DDDD'
WHEN NOT MATCHED THEN
INSERT ( ID, TEXT ) VALUES ( 4,'DDDD' )
;
mybatisでoracle db のmerge文
<update id="exceMerge" parameterType="hashmap">
MERGE INTO USERS U USING DUAL ON (U.PROPERTY_NAME=#{prop_name})
WHEN MATCHED THEN
UPDATE SET U.PROPERTYVALUE=#{prop_value}, U.MESSAGE=#{message,javaType=String,jdbcType=CLOB}
WHEN NOT MATCHED THEN
INSERT(PROPERTY_NAME, PROPERTYVALUE, MESSAGE) VALUES (#{prop_name},#{prop_value},#{message,javaType=String,jdbcType=CLOB})
</update>
シーケンス採番によるinsert
INSERT INTO USER_MASTER (
USER_NAME, DEPT_NO, USER_ID
) VALUES (
'xxx'
'1001',
seq01.nextval
) ;
シーケンスから採番
select SEQ_HOGE.nextval from dual;
シーケンスから一度に複数個を採番
SELECT HOGE_SEQ.nextval FROM DUAL CONNECT BY LEVEL <= 10
resultTypeをBigIntegerにする
resultType="java.math.BigInteger"
DECODE関数を使ってbooleanでうけとる
なにかのフラグを、値があるかnullかというデータの持ち方になってるときの対処法
DECODE関数で、値があるときは1、ないときは0を返すようにすれば、javaはbooleanで受け取れる
SELECT DECODE(col1, '1', 1, 0) FROM table
springで、mybatisの設定ファイルを読み込む設定
SqlSessionFactoryBeanのconfigLocationで指定
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
snake_caseのカラム名をcamelCaseのプロパティ名にマッピング
mybatisの設定ファイルに下記を記述。
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
mybatisでマッパーのメソッドの引数を複数にする
メソッドの引数に@Paramアノテーションでパラメタ名を指定
import org.apache.ibatis.annotations.Param;
public interface HogeMapper {
public List<ParkingKarte> find(
@Param("name") String name, //パラメタ名を指定して、XMLでこの名前がつかえる
@Param("bean") Bean bean);
}
XMLではparameterTypeをmapにすれば、上で決めたパラメタ名を使ってかける。Beanのプロパティもxx.yyの形で使える。
<select id="find" parameterType="map">
SELECT * FROM Hoge where name = #{name} AND status = #{bean.status}
</select>
MyBatisのコードを自動生成(MyBatis Generator)
DBからコード生成するためのツール。
http://www.mybatis.org/generator/
使い方
Mybatis Generatorでimmutableなクラスを生成
スネークケースのカラム名をキャメルケースのプロパティにマッピング
<table tableName="*">
<property name="useActualColumnNames" value="false"/>
</table>
モデルクラスと対応するxmlファイルだけ生成
<table tableName="*">
<property name="modelOnly" value="true"/>
</table>
コンストラクタで値をセット
<javaModelGenerator targetPackage="hoge.modeles" targetProject="src\main\java">
<property name="constructorBased" value="true"/>
</javaModelGenerator>
MyBatisの事例