基于JPA ORM标准规范的数据服务框架
SchemaParser parser = new SchemaParser(connection);
Schema schema = parser.parse("PUBLIC");
List<Table> tables = schema.getTables();
Table table = tables.get(0);
List<Column> columns = table.getColumns();
Column column = columns.get(0);
PrimaryKey primaryKey = column.getPrimaryKey();
String columnName = column.getColumnName();
String type = column.getTypeName();
int size = column.getColumnSize();
boolean isKey = column.isPrimaryKey();
handler:
dao:
class: net.tiny.dao.EntityService
path: /dao/v1
auth: ${auth.base}
pattern: .*/classes/, .*/test-classes/, .*/your-entity.*[.]jar
entities: your.package.entity.*
level: INFO
auth:
base:
class: net.tiny.ws.auth.SimpleAuthenticator
encode: false
username: user
password: password
GET /dao/v1/{entity}/{id}
GET /dao/v1/{entity}/list?size=99
GET /dao/v1/{entity}/count
POST /dao/v1/{entity}
PUT /dao/v1/{entity}/{id}
DELETE /dao/v1/{entity}/{id}
Run a command line:
curl -u user:password -v http://localhost:8080//dao/v1/table_name/1234
CsvImporter.Options options = new CsvImporter.Options("XX_LOG.csv", "xx_log")
.verbose(true)
.truncated(true)
.skip(1);
CsvImporter.load(connection, options);
CsvImporter.load(conn, "imports/csv");
table_name_1
table_name_2
@Entity
@Table(name = "xx_log")
public class Log extends BaseEntity {
/** ID */
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "logSequenceGenerator")
@SequenceGenerator(name = "logSequenceGenerator", sequenceName = "xx_log_sequence", allocationSize=1)
@Id
@Column(name = "id")
private Long id;
//...
}
<?xml version="1.0" encoding="UTF-8"?>
<persistence
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
<mapping-file>META-INF/orm.xml</mapping-file>
<!-- Basic Entities -->
<class>net.tiny.dao.converter.LocalDateAttributeConverter</class>
<class>net.tiny.dao.converter.LocalDateTimeAttributeConverter</class>
<class>net.tiny.dao.entity.BaseEntity</class>
<class>net.tiny.dao.entity.OrderEntity</class>
<class>net.tiny.dao.entity.LockableEntity</class>
<!-- Application Entities -->
<class>your.package.entity.Log</class>
</persistence-unit>
</persistence>
public class LogDao extends BaseDao<Log, Long> {
// Append your code here
}
public class LogService extends BaseService<Log> {
public LogService(ServiceContext c) {
super(c, Account.class);
}
public LogService(BaseService<?> base) {
super(base, Account.class);
}
// Append your code here
public Optional<Log> findByDate(Date date) {
if (date == null) {
return Optional.empty();
}
try {
Log log = super.dao()
.getNamedQuery("Log.findByDate")
.setParameter("date", date)
.getSingleResult();
return Optional.of(log);
} catch (NoResultException e) {
return Optional.empty();
}
}
}
logging:
handler:
output: none
level:
all: INFO
main:
- ${launcher.http}
daemon: true
executor: ${pool}
callback: ${service.context}
pool:
class: net.tiny.service.PausableThreadPoolExecutor
size: 5
max: 10
timeout: 3
service:
context:
class: net.tiny.service.ServiceLocator
# HTTP Server launcher
launcher:
http:
class: net.tiny.ws.Launcher
builder:
port: 8092
backlog: 10
stopTimeout: 1
executor: ${pool}
handlers:
- ${handler.sys}
- ${handler.health}
- ${handler.dao}
handler:
sys:
class: net.tiny.ws.ControllableHandler
path: /sys
auth: ${auth.base}
filters: ${filter.logger}
dao:
class: net.tiny.dao.EntityService
path: /dao/v1
auth: ${auth.base}
filters: ${filter.jpa}, ${filter.logger}
entities: your.entity.*
pattern: .*/classes/, .*/your-entity.*[.]jar
filter:
logger:
class: net.tiny.ws.AccessLogger
out: stdout
jpa:
class: net.tiny.dao.HttpTransactionFilter
producer: ${jpa.producer}
auth:
base:
class: net.tiny.ws.auth.SimpleAuthenticator
encode: false
username: user
password: password
# JPA
jpa:
producer:
class: net.tiny.dao.EntityManagerProducer
properties: ${jpa.properties}
# JPA2 Properties
properties:
javax:
persistence:
jdbc:
driver: org.h2.Driver
url: jdbc:h2:tcp://127.0.0.1:9092/h2
user: sa
password: sa
# user: ${${vcap.alias}.cf.username}
# password: ${${vcap.alias}.cf.password}
show_sql: true
provider: org.eclipse.persistence.jpa.PersistenceProvider
validation:
mode: auto
lock:
timeout: 1000
query:
timeout: 1000
schema-generation:
database:
action: create
create-source: metadata
#Supported platforms : JavaDB Derby Oracle MySQL4 PostgreSQL SQLServer DB2 DB2Mainframe Sybase H2 HSQL
#Others available : Informix TimesTen Attunity SQLAnyWhere DBase Cloudscape PointBase
eclipselink:
target-database: HSQL
logging:
level: INFO
level:
sql: FINE
parameters: true
jdbc:
connection_pool:
default:
initial: 2
min: 2
max: 5
weaving:
changetracking: false
Email : wuweibg@gmail.com