MetaModel元数据模型-初识
一、前言
1.简介
MetaModel 是用来重建 SQL 99 兼容的数据库元模型。
MetaModel 提供了一个数据为中心的 API 用于探索、查询和更新数据,数据格式支持关系数据库(JDBC)、CSV 文件、Excel 表格、MongoDB 和 CouchDB 等等。你可以编写真正跨存储系统的应用程序。
此外 MetaModel 的 API 非常易学易用,类似于 SQL 语法,但是类型安全的,你可以把它想象成 LinQ for Java。
2.文档
| Datastore type | DataContext class name | Properties “type” value | Variants supported/available |
|---|---|---|---|
| JDBC / Relational Databases | JdbcDataContext | jdbc | PostgreSQL, MySQL, Microsoft SQL Server, Oracle DB, IBM DB2 Apache Hive, Apache Derby, SQLite, Ingres, H2, HSQLDB (… and many more) |
| CSV files | CsvDataContext | csv | Comma-separated Tab-separated Anything-separated files |
| Fixed width value files | FixedWidthDataContext | fixed-width | Fixed width EBCDIC |
| Microsoft Excel spreadsheets | ExcelDataContext | excel | .xls .xlsx |
| Microsoft Access database files | AccessDataContext | - | .mdb .accdb |
| OpenOffice.org database files | OpenOfficeDataContext | - | .odb |
| XML files | XmlDomDataContext XmlSaxDataContext | xml | DOM-based parsing (all in-memory) SAX-based parsing (streaming) |
| JSON files | JsonDataContext | json | |
| ElasticSearch | ElasticSearchDataContext ElasticSearchRestDataContext | elasticsearch | Native Java API RESTful JSON API |
| MongoDB | MongoDbDataContext | - | MongoDB 2.x MongoDB 3.x |
| Apache CouchDB | CouchDbDataContext | couchdb | |
| Apache Cassandra | CassandraDataContext | cassandra | |
| Apache HBase | HBaseDataContext | hbase | |
| Apache Kafka | KafkaDataContext | ||
| Neo4j | Neo4jDataContext | - | |
| Salesforce.com | SalesforceDataContext | salesforce | |
| SugarCRM | SugarCrmDataContext | - | |
| Java collections | PojoDataContext | pojo | Collection<Object[]> Collection<Map<String, Object>> Collection<JavaBean> |
| Collections of other datastores | CompositeDataContext |
二、集成
<dependency>
<groupId>org.apache.metamodel</groupId>
<artifactId>MetaModel-full</artifactId>
<version>5.3.3</version>
</dependency>
三、使用示例
gitee源码:https://gitee.com/ryou5416/meta-model.git
1.CsvTest
package com.example.metamodel;
import org.apache.metamodel.DataContext;
import org.apache.metamodel.UpdateableDataContext;
import org.apache.metamodel.csv.CsvConfiguration;
import org.apache.metamodel.csv.CsvDataContext;
import org.apache.metamodel.data.DataSet;
import org.apache.metamodel.factory.DataContextFactoryRegistryImpl;
import org.apache.metamodel.factory.DataContextPropertiesImpl;
import org.apache.metamodel.factory.ResourceFactory;
import org.apache.metamodel.insert.InsertInto;
import org.apache.metamodel.query.CompiledQuery;
import org.apache.metamodel.query.Query;
import org.apache.metamodel.query.QueryParameter;
import org.apache.metamodel.schema.Schema;
import org.apache.metamodel.schema.Table;
import org.apache.metamodel.schema.TableType;
import org.apache.metamodel.util.AbstractResource;
import org.apache.metamodel.util.ClasspathResource;
import org.apache.metamodel.util.FileResource;
import org.apache.metamodel.util.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.util.Assert;
import org.springframework.util.ResourceUtils;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.List;
import static org.apache.metamodel.factory.DataContextPropertiesImpl.*;
/**
* @author :ouruyi
* @version 1.0
* @date :Created in 2021/7/5 14:56
* 功能描述:
*/
public class CsvTest {
@Test
void test1() {
/**
* 可设置表定义 {@link DataContextPropertiesImpl#PROPERTY_TABLE_DEFS}
*/
final DataContextPropertiesImpl properties = new DataContextPropertiesImpl();
properties.put(PROPERTY_DATA_CONTEXT_TYPE, "csv");
properties.put(PROPERTY_COLUMN_NAME_LINE_NUMBER, 1);
/**
* 可用前缀 file classpath mem http https hdfs
* @see ResourceFactory
*/
properties.put(PROPERTY_RESOURCE_PROPERTIES, "classpath:/data/csv/data.csv");
DataContext dataContext = DataContextFactoryRegistryImpl.getDefaultInstance().createDataContext(properties);
final Schema schema = dataContext.getDefaultSchema();
final List<Table> tables = schema.getTables(TableType.TABLE);
final Table table = tables.get(0);
DataSet result = dataContext.query().from(table).select(table.getColumns()).orderBy(table.getColumnByName("name")).execute();
try {
while (result.next()) {
System.out.println("Row: " + Arrays.toString(result.getRow().getValues()));
}
} finally {
result.close();
}
}
@Test
void test2() {
/**
* @see AbstractResource
*/
Resource resource =

本文介绍了MetaModel,一个用于重构SQL99兼容数据库元模型的工具,支持多种数据源如JDBC、CSV、JSON等。它提供了易用的API,类似SQL但类型安全,适用于编写跨存储系统的应用。
最低0.47元/天 解锁文章
2372

被折叠的 条评论
为什么被折叠?



