<config>
<data-source class="oracle.jdbc.pool.OracleDataSource"
url="jdbc:oracle:thin:@127.0.0.1:1521:db102"
user="bookstore" password="bookstore">
</data-source>
<mappings>
<file name="./bin/resources/test-mappings.xml"/>
<annotated-type class="ru.pan.magpie.mocks.Review" />
<annotated-object class="ru.pan.magpie.proxies.PKG_TEST_MAPPINGS" />
</mappings>
</config>
data-source
: data-source используемый для получения соединений при всех обращениях к БД;
class:
полноем имя класса, класс должен реализовывать javax.sql.DataSource интерфейс;
url:
url БД;
user:
схема-пользователь БД;
password:
пароль.
mappings
: ссылки на другие конфигурационные файлы, список классов, снабженных аннотациями;
file:
файл маппингов, должен удовлетворять DTD
http://oracle-magpie.sourceforge.net/magpie-mappings-1.0.dtd
;
annotated-type:
имя класса, имеющего маппинг класса-сущности на объектный тип оракл, заданный аннотациями;
annotated-object:
имя класса, имеющего маппинг java интерфейса к объекту оракл (пакету или типу), заданный аннотациями;
<class-mapping class="tutor.model.Customer" db-type="TCUSTOMER" owner="BOOKSTORE">
<field name="customerId" db-name="customerId" />
<field name="orders" db-name="orders"
element-class="tutor.model.Order" collection-merging="update"/>
<field name="registrationDate" db-name="registrationDate" />
<property-group name="cuttedCustomer" behavior="skip" default="false">
<property name="orders" group="cuttedOrder"/>
<property name="customerId"/>
</property-group>
</class-mapping>
class-mapping
: маппинг класса-сущности к объектному типу оракл;
class:
полное имя класса, обязательный атрибут;
db-type:
имя объектного типа, обязательный атрибут;
owner:
имя схемы, содержащей объектный тип, необязательный атрибут,
значение по умолчанию - data-source схема;
field
: маппинг поля java класса к полю объектного типа оракл,
поле должно иметь правильно определенные getter и setter методы;
name:
имя поля в java классе, обязательный атрибут;
db-name:
имя поля в объектном типе oracle, обязательный атрибут;
element-class:
имя класса элемента коллекции,
атрибут обязателен для коллекций и массивов, игнорируется в ином случае;
collection-merging:
тип обновления коллекции при возвращении экземпляра из oracle в java, возможные значения:
"reload"
: исходная коллекция очищается и заполняется значениями коллекции возвращаемого поля;
"append"
: значения поля возвращаемой коллекции добавляются к исходной коллекции;
"update"
: значения в исходной коллекции обновляются подходящими значения из возвращаемой коллекции (если найдутся).
property-group
: группа полей класса, которая используется в вызовах хранимых процедур
с целью облегчения "веса" экземпляра объекта;
name:
имя группы, обязательный атрибут;
behavior:
("skip"|"pass") группа полей будет передана/пропущена соответственно, значение по умолчанию - "pass";
default:
("true"|"false") "true" - группа полей является группой по умолчанию,
которая будет использоваться во всех вызовах, если специально не указана другая группа; значение по умолчанию - "false";
property
: поле - элемент группы;
name:
имя поля, обязательный атрибут;
property-group:
ссылка на группу полей маппинга
класса данного поля, которая будет рекурсивно использована.
<value-mapping class="java.lang.Boolean">
<sql-type name="NUMBER"
to-oracle-method="ru.pan.magpie.convert.standards.NumberConversions.booleanToBigDecimal"
from-oracle-method="ru.pan.magpie.convert.standards.NumberConversions.bigDecimalToBoolean" />
</value-mapping>
value-mapping
: маппинг java класса к oracle sql типу;
class:
полное имя класса, обязательный атрибут;
sql-type, name:
имя sql типа, обязательный атрибут;
to-oracle-method:
пользовательский статический метод,
конвертирующий экземпляр указанного класса в подходящий для данного sql-типа
экземпляр класса,сигнатура метода:public static Object methodName(Object, Connection);
from-oracle-method:
пользовательский статический метод,
конвертирующий в экземпляр указанного класса из экземпляра класса
по умолчанию используемого jdbc для данного sql типа, сигнатура метода: public static Object methodName(Object);
default-mappings.xml
Java class | SQL Data Type | Notes |
---|---|---|
java.lang.String |
CHAR, VARCHAR2, CHARACTER, STRING, VARCHAR, LONG, CLOB, ROWID |
|
java.util.Date |
DATE,TIMESTAMP |
|
byte[] |
BLOB |
|
java.math.BigDecimal |
PLS_INTEGER, BINARY_INTEGER, NATURAL, NATURALN, POSITIVE, POSITIVEN, NUMBER, DEC, DECIMAL, NUMERIC, FLOAT, INT, SMALLINT, INTEGER, REAL |
|
java.math.BigInteger, byte, java.lang.Byte, java.lang.Short, short, int, java.lang.Integer, long, java.lang.Long, float, java.lang.Float, double, java.lang.Double |
NUMBER |
|
boolean, java.lang.Boolean |
NUMBER |
0-false, 1-true |
int, java.lang.Integer |
INTEGER, BINARY_INTEGER |
|
long, java.lang.Long |
INTEGER, LONG |
|
float, java.lang.Float |
BINARY_FLOAT |
|
double, java.lang.Double |
BINARY_DOUBLE |
<db-object object-is="package" class="tutor.proxies.PKG_BOOKS_API"
name="PKG_BOOKS_API" owner="BOOKSTORE" base-class="">
<procedure java-name="formatBookIsbns" db-name="formatBookIsbns"
in-group="" out-group="">
<return class="java.util.List" element-class="tutor.model.Customer" out-group=""/>
<argument position="0" class="java.util.List" db-name="books"
element-class="tutor.model.Book" collection-merging="reload"
in-group="" out-group=""/>
</procedure>
</db-object>
db-object
: прокси-маппинг java интерфейса к объекту оракл (пакету хранимых процедур или объектному типу);
class:
полное имя интерфейса, обязательный атрибут;
name:
имя oracle пакета/типа, обязательный атрибут;
object-is:
("package" | "type") тип маппинга, значение по умолчанию - "package";
owner:
имя схемы, содержащей оракл объект, необязательный атрибут,
значение по умолчанию - data-source пользователь;
base-class:
имя класса-сущности замапленного на данный объектный тип оракл,
атрибут обязателен в случае object-is="type"
, игнорируется иначе.
procedure
: маппинг хранимой процедуры к java методу;
java-name:
имя java-метода, обязательный атрибут;
db-name:
имя хранимой процедуры, обязательный атрибут;
in-group:
в случае маппинга объектного типа,
группа передаваемых полей базового экземпляра класса (см
property-group
в маппинге класса-сущности);
out-group:
группа возвращаемых полей.
return
: для функций, маппинг результата функции;
class:
имя класса, обязательный атрибут;
element-class:
если результат коллекция или массив, имя класса элемента коллекции;
out-group:
группа полей класса возвращаемого результата.
argument
: маппинг аргумента;
position:
порядковый номер аргумента в java методе, начинается с 0, обязательный атрибут;
class:
имя класса аргумента, обязательный атрибут;
db-name:
имя аргумента хранимой процедуры, обязательный атрибут;
in-group:
группа передаваемых полей класса аргумента;
out-group:
группа возвращаемых полей класса аргумента;
element-class:
если аргумент коллекция или массив, имя класса элемента коллекции;
collection-merging:
для "OUT" аргументов-коллекций или массивов,
тип обновления коллекции при возвращении экземпляра из oracle в java, возможные значения:
"reload"
: исходная коллекция очищается и заполняется
значениями коллекции возвращаемого аргумента;
"append"
: значения возвращаемой
коллекции добавляются к исходной коллекции;
"update"
: значения в исходной коллекции обновляются
подходящими значения из возвращаемой коллекции (если найдутся).
XML element | Annotation |
---|---|
class-mapping |
DBType |
class-mapping.class |
- |
class-mapping.db-type |
DBType.name() |
class-mapping.owner |
DBType.owner() |
field |
DBTypeField |
field.name |
- |
field.db-name |
DBTypeField.name() |
field.element-class |
DBTypeField.elementClass() |
field.collection-merging |
DBTypeField.collectionMerging() |
property-group |
- |
value-mapping |
- |
db-object |
DBObject |
db-object.class |
- |
db-object.name |
DBObject.name() |
db-object.object-is |
DBObject.type() |
db-object.owner |
DBObject.owner() |
db-object.base-class |
DBObject.baseClass() |
procedure |
DBProcedure |
procedure.java-name |
- |
procedure.db-name |
DBProcedure.name() |
procedure.in-group |
DBProcedure.inPropertyGroup() |
procedure.out-group |
DBProcedure.outPropertyGroup() |
return |
- |
return.class |
- |
return.element-class |
DBProcedure.returnElementClass() |
return.out-group |
DBProcedure.returnOutPropertyGroup() |
argument |
DBArgument |
argument.position |
- |
argument.class |
- |
argument |
DBArgument |
argument.db-name |
DBArgument.name() |
argument.in-group |
DBArgument.inPropertyGroup() |
argument.out-group |
DBArgument.outPropertyGroup() |
argument.element-class |
DBArgument.elementClass() |
argument.collection-merging |
DBArgument.collectionMerging() |