Flex Gateway新着情報
Governance新着情報
Monitoring API Managerデータベース用 Anypoint Connector (Database Connector) では、データベースのデータを管理できるようにする Insert、Update、Delete 操作がサポートされています。
次の例では、electronic
という名前のテーブルが含まれる Products
という名前のデータベーススキーマのデータを挿入、更新、削除します。このテーブルには、id
、name
、description
、price
、discount
という列が含まれます。
次の SQL ステートメントでは、このテーブルを作成します。
CREATE TABLE electronic(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
description VARCHAR(255),
price SMALLINT,
discount TINYINT
)
テーブル electronic
がすでに作成されていて、dbConfig
という名前の Database Connector 接続設定がある場合、テーブルに新しいレコードを挿入する Insert 操作を設定できます。
Studio のフローで、[Insert] 操作を選択します。
コネクタ設定画面で、実行する SQL クエリを [SQL Query Text (SQL クエリテキスト)] 項目に設定します。例:
INSERT INTO electronic(name, description, price, discount)
VALUES ('Coffee Machine', 'Model: XYZ99. Uses small size capsules.', 120, 5)
id
パラメーターは、データベースによって自動的に生成される自動増分キーであるため、クエリに渡されません。
設定 XML エディターでは、<db:insert>
設定は次のように記述されます。
<db:insert config-ref="dbConfig">
<db:sql>
INSERT INTO electronic(name, description, price, discount)
VALUES ('Coffee Machine', 'Model: XYZ99. Uses small size capsules.', 120, 5)
</db:sql>
</db:insert>
入力パラメーターの利点を得るには、次のように同等の SQL クエリを構築します。
Studio のフローで、[Insert] 操作を選択します。
コネクタ設定画面で、実行する SQL クエリを [SQL Query Text (SQL クエリテキスト)] 項目に設定します。例:
INSERT INTO electronic(name, description, price, discount)
VALUES (:name, :description, :price, :discount)
[Input Parameters (入力パラメーター)] 項目で、次のパラメーターを設定します。
{
name: 'Coffee Machine',
description: 'Model:XYZ99. Uses small size capsules.',
price: 120,
discount: 5
}
設定 XML エディターでは、<db:input-parameters>
設定は次のように記述されます。
<db:insert config-ref="dbConfig">
<db:sql>
INSERT INTO electronic(name, description, price, discount)
VALUES (:name, :description, :price, :discount)
</db:sql>
<db:input-parameters>#[{
name: 'Coffee Machine',
description: 'Model:XYZ99. Uses small size capsules.',
price: 120,
discount: 5}]
</db:input-parameters>
</db:insert>
Insert 操作は、2 つの項目 (クエリの影響を受けた行数を示す整数 affectedRows
と、自動生成されたキーが含まれるマップ generatedKeys
) が含まれる Statement Result
オブジェクトを出力します。
次の例の出力では、行は正常にテーブルに追加されているが、マップ generatedKeys
が空であることが示されています。マップが空になるのは、オーバーヘッドを回避するためにこの情報がデフォルトで無効になっているためです。
{
"affectedRows": 1,
"generatedKeys": {
}
}
情報をアクティブ化してキーを生成する手順は、次のとおりです。
Studio のフローで、[Insert] 操作を選択します。
[Advanced (詳細)] タブで [Auto generate keys (自動生成キー)] 項目を [True] に設定します。
設定 XML エディターでは、<autoGenerateKeys>
設定は次のように記述されます。
<db:insert config-ref="dbConfig" autoGenerateKeys="true">
...
</db:insert>
ステートメントで影響を受けた行ごとに複数のキーが生成される場合、目的の列名が含まれるリストを設定して、返される列を指定できます。例:
Studio のフローで、[Insert] 操作を選択します。
[Advanced (詳細)] タブで、[Auto generate column names (列名を自動生成)] 項目を [Expression or Bean reference
(式または bean 参照)] に設定して、項目を 1 つの文字列要素が含まれる DataWeave リストに設定します。
[expression (式)] 項目を ['id']
に設定して、id
列のみが返されるようにします。
設定 XML エディターでは、<autoGeneratedKeysColumnNames>
設定は次のように記述されます。
<db:insert config-ref="dbConfig" autoGenerateKeys="true" autoGeneratedKeysColumnNames="#[['id']]">
...
</db:insert>
electronic
テーブルが事前に定義されている場合、テーブルのデータを更新する (たとえば、価格値が 100 を越えているすべての項目の割引を 10 % に設定する) には、次のように Update 操作を設定します。
Studio のフローで、[Update] 操作を選択します。
コネクタ設定画面で、"UPDATE electronic SET discount = :discount WHERE price > :price"
のように、実行する SQL クエリを [SQL Query Text (SQL クエリテキスト)] 項目に設定します。
[Input parameters (入力パラメーター)] 項目を次のパラメーターに設定します。
{
discount: 10,
price: 100
}
設定 XML エディターでは、<db:update>
設定は次のように記述されます。
<db:update doc:name="Update">
<db:sql ><![CDATA["UPDATE electronic SET discount = :discount WHERE price > :price"]]></db:sql>
<db:input-parameters ><![CDATA[#[{
discount: 10,
price: 100
}]]]></db:input-parameters>
</db:update>
<![CDATA[…]]>
ラッパーにより、クエリで >
や "
などの特殊文字を使用できます。
ラッパーがない場合、これらの文字の XML でエスケープされたバージョン (>
や "
など) を使用する必要があります。
electronic
テーブルが事前に定義されている場合、id: 1
のレコードを削除するには、次のように Delete 操作を設定します。
Studio のフローで、[Update] 操作を選択します。
コネクタ設定画面で、DELETE FROM electronic WHERE id = :id
のように、実行する SQL クエリを [SQL Query Text (SQL クエリテキスト)] 項目に設定します。
[Input parameters (入力パラメーター)] 項目を {id: 1}
に設定します。
設定 XML エディターでは、<db:delete>
設定は次のように記述されます。
<db:delete config-ref="dbConfig">
<db:sql>DELETE FROM electronic WHERE id = :id</db:sql>
<db:input-parameters>#[{
id: 1
}]</db:input-parameters>
</db:delete>
次の例は、データベースに個人のレコードを作成するように Insert 操作を設定する方法を示しています。
Studio で、HTTP Listener ソースを Studio キャンバスにドラッグします。
[Path (パス)] を /person
に設定します。
[Insert] 操作を [Listener] ソースの横にドラッグします。
[Connector configuration (コネクタ設定)] 項目の横にあるプラス記号 (+) をクリックし、グローバル要素設定項目にアクセスします。
[SQL Query Text (SQL クエリテキスト)] ボックスで、次の SQL テキストを宣言します。
insert into person (id, name, photo, dob)
values (:ID,:NAME,:PHOTO,:DOB);
[Input Parameters (入力パラメーター)] 項目で、作成する個人レコードのマップのリストを指定します。これには、パラメーター名がキーとして、値がパラメーターとして含まれます。また、すべてのリスト項目は挿入する行を表します。
{'ID' : message.payload.parts['id'].content ,
'NAME': message.payload.parts['name'].content,
'PHOTO' : message.payload.parts['photo'].content,
'DOB' : message.payload.parts['dob'].content}
[Set Payload] コンポーネントを [Insert] 操作の横にドラッグ横にます。
[Value (値)] を Person Created
(個人作成済み) に設定します。
Mule アプリケーションを保存して実行します。
設定 XML エディターでは、設定は次のように記述されます。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd">
<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" >
<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<db:config name="Database_Config" doc:name="Database Config" >
<db:my-sql-connection host="localhost" port="3306" user="root" password="root" database="dev" />
</db:config>
<flow name="db-connector-testFlow">
<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/person" allowedMethods="POST"/>
<db:insert doc:name="Insert" config-ref="Database_Config">
<db:sql ><![CDATA[insert into person (id, name, photo, dob)
values (:ID,:NAME,:PHOTO,:DOB);]]></db:sql>
<db:input-parameters ><![CDATA[#[{'ID' : message.payload.parts['id'].content ,
'NAME': message.payload.parts['name'].content,
'PHOTO' : message.payload.parts['photo'].content,
'DOB' : message.payload.parts['dob'].content}]]]></db:input-parameters>
</db:insert>
<set-payload value="Person Created" doc:name="Set Payload" />
</flow>
</mule>