Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
21
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@n_slender

oracle db、mybatisのtips

拾い集めた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アノテーションでパラメタ名を指定

HogeMapper.java
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の形で使える。

HogeMapper.xml

<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なクラスを生成

スネークケースのカラム名をキャメルケースのプロパティにマッピング

generatorConfig.xml

        <table tableName="*">
         <property name="useActualColumnNames" value="false"/>
    </table>

モデルクラスと対応するxmlファイルだけ生成

generatorConfig.xml

        <table tableName="*">
         <property name="modelOnly" value="true"/>
    </table>

コンストラクタで値をセット

generatorConfig.xml

 <javaModelGenerator targetPackage="hoge.modeles" targetProject="src\main\java">
        <property name="constructorBased" value="true"/>
    </javaModelGenerator>

MyBatisの事例

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
21
Help us understand the problem. What are the problem?