Skip to content

Commit

Permalink
整理测试用例,SQL脚本放到SqlScript类中,生成的代码放到generated子目录
Browse files Browse the repository at this point in the history
  • Loading branch information
codefollower committed May 14, 2018
1 parent 7129c41 commit 542f4f9
Show file tree
Hide file tree
Showing 29 changed files with 236 additions and 579 deletions.
2 changes: 2 additions & 0 deletions lealone-orm/src/main/java/org/lealone/orm/Query.java
Expand Up @@ -275,6 +275,7 @@ private void reset() {
*/
@SafeVarargs
public final T select(TQProperty<T>... properties) {
getTable();
org.lealone.db.table.Table dbTable = table.getDbTable();
for (TQProperty<T> p : properties) {
ExpressionColumn c = new ExpressionColumn(dbTable.getDatabase(), dbTable.getSchema().getName(),
Expand Down Expand Up @@ -317,6 +318,7 @@ public T orderBy() {

@SafeVarargs
public final T groupBy(TQProperty<T>... properties) {
getTable();
groupExpressions = new ArrayList<>();
org.lealone.db.table.Table dbTable = table.getDbTable();
for (TQProperty<T> p : properties) {
Expand Down
144 changes: 144 additions & 0 deletions lealone-test/src/test/java/org/lealone/test/SqlScript.java
@@ -0,0 +1,144 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.lealone.test;

import org.lealone.test.service.impl.HelloWorldServiceImpl;
import org.lealone.test.service.impl.UserServiceImpl;

public class SqlScript {

public static void main(String[] args) {
new SqlScriptTest().runTest();
}

public static interface SqlExecuter {
void execute(String sql);
}

private static class SqlScriptTest extends UnitTestBase {
@Override
public void test() {
createCustomerTable(this);
createUserTable(this);
createAllTypeTable(this);
createUserService(this);
createHelloWorldService(this);
}
}

private static final String MODEL_PACKAGE_NAME = "org.lealone.test.generated.model";
private static final String SERVICE_PACKAGE_NAME = "org.lealone.test.generated.service";
private static final String GENERATED_CODE_PATH = "./src/test/java";

public static void createCustomerTable(SqlExecuter executer) {
System.out.println("create table: customer");

executer.execute("create table customer(id long, name char(10), notes varchar, phone int)" //
+ " package '" + MODEL_PACKAGE_NAME + "'" //
+ " generate code '" + GENERATED_CODE_PATH + "'" // 生成领域模型类和查询器类的代码
);
}

public static void createUserTable(SqlExecuter executer) {
System.out.println("create table: user");

// 创建表: user
executer.execute("create table user(name char(10) primary key, notes varchar, phone int, id long)" //
+ " package '" + MODEL_PACKAGE_NAME + "'" //
+ " generate code '" + GENERATED_CODE_PATH + "'");
}

public static void createAllTypeTable(SqlExecuter executer) {
// 21种类型,目前不支持GEOMETRY类型
// INT
// BOOLEAN
// TINYINT
// SMALLINT
// BIGINT
// IDENTITY
// DECIMAL
// DOUBLE
// REAL
// TIME
// DATE
// TIMESTAMP
// BINARY
// OTHER
// VARCHAR
// VARCHAR_IGNORECASE
// CHAR
// BLOB
// CLOB
// UUID
// ARRAY
executer.execute("CREATE TABLE all_type (" //
+ " f1 INT," //
+ " f2 BOOLEAN," //
+ " f3 TINYINT," //
+ " f4 SMALLINT," //
+ " f5 BIGINT," //
+ " f6 IDENTITY," //
+ " f7 DECIMAL," //
+ " f8 DOUBLE," //
+ " f9 REAL," //
+ " f10 TIME," //
+ " f11 DATE," //
+ " f12 TIMESTAMP," //
+ " f13 BINARY," //
+ " f14 OTHER," //
+ " f15 VARCHAR," //
+ " f16 VARCHAR_IGNORECASE," //
+ " f17 CHAR," //
+ " f18 BLOB," //
+ " f19 CLOB," //
+ " f20 UUID," //
+ " f21 ARRAY" //
+ ")" //
+ " PACKAGE '" + MODEL_PACKAGE_NAME + "'" //
+ " GENERATE CODE '" + GENERATED_CODE_PATH + "'");

System.out.println("create table: all_type");
}

public static void createUserService(SqlExecuter executer) {
System.out.println("create service: user_service");

// 创建服务: user_service
executer.execute("create service if not exists user_service (" //
+ " add(user user) long," // 第一个user是参数名,第二个user是参数类型
+ " find(name varchar) user," //
+ " update(user user) int," //
+ " delete(name varchar) int)" //
+ " package '" + SERVICE_PACKAGE_NAME + "'" //
// 如果是内部类,不能用getClassName(),会包含$字符
+ " implement by '" + UserServiceImpl.class.getCanonicalName() + "'" //
+ " generate code '" + GENERATED_CODE_PATH + "'");
}

public static void createHelloWorldService(SqlExecuter executer) {
System.out.println("create service: hello_world_service");

// 创建服务: hello_world_service
executer.execute("create service hello_world_service (" //
+ " say_hello() void," //
+ " say_goodbye_to(name varchar) varchar" //
+ " ) package '" + SERVICE_PACKAGE_NAME + "'" //
+ " implement by '" + HelloWorldServiceImpl.class.getName() + "'" //
+ " generate code '" + GENERATED_CODE_PATH + "'");
}
}
Expand Up @@ -23,12 +23,13 @@
import java.sql.Statement;

//一个标记类,标识它的子类是进行单元测试的
public class UnitTestBase extends TestBase {
public class UnitTestBase extends TestBase implements SqlScript.SqlExecuter {

public UnitTestBase() {
initTransactionEngine();
}

@Override
public void execute(String sql) {
try (Connection conn = DriverManager.getConnection(getURL()); Statement stmt = conn.createStatement()) {
stmt.executeUpdate(sql);
Expand Down
Expand Up @@ -17,9 +17,10 @@
*/
package org.lealone.test.fullstack;

import org.lealone.test.SqlScript;
import org.lealone.test.UnitTestBase;
import org.lealone.test.fullstack.generated.User;
import org.lealone.test.fullstack.generated.UserService;
import org.lealone.test.service.ServiceConsumer;
import org.lealone.test.service.ServiceProvider;
import org.lealone.vertx.LealoneHttpServer;

public class FullStackTest extends UnitTestBase {
Expand All @@ -30,82 +31,28 @@ public static void main(String[] args) {

@Override
public void test() {
init();
// 设置jdbc url(可选)
setJdbcUrl();

// 创建user表
SqlScript.createUserTable(this);

// 创建服务
ServiceProvider.createService(this);

// 从后端调用服务
callService();
ServiceConsumer.callService(getURL());

// 启动HttpServer
// 在浏览器中打开下面这个URL,测试从前端发起服务调用,在console里面看结果:
// http://localhost:8080/FullStackTest.html
LealoneHttpServer.start(8080, "./src/test/resources/webroot/", "/api/*");
}

void setJdbcUrl() {
private void setJdbcUrl() {
String url = getURL();
System.setProperty("lealone.jdbc.url", url);
System.out.println("jdbc url: " + url);
}

void init() {
setJdbcUrl();
String packageName = FullStackTest.class.getPackage().getName();

// 创建表: user
execute("create table user(name char(10) primary key, notes varchar, phone int)" //
+ " package '" + packageName + ".generated'" //
+ " generate code './src/test/java'");

System.out.println("create table: user");

// 创建服务: user_service
execute("create service if not exists user_service (" //
+ " add(user user) long," // 第一个user是参数名,第二个user是参数类型
+ " find(name varchar) user," //
+ " update(user user) int," //
+ " delete(name varchar) int)" //
+ " package '" + packageName + ".generated'" //
+ " implement by '" + UserServiceImpl.class.getCanonicalName() + "'" // 不能用getClassName(),会包含$字符
+ " generate code './src/test/java'");

System.out.println("create service: user_service");
}

void callService() {
String url = getURL();
UserService userService = UserService.create(url);

User user = new User().name.set("zhh").phone.set(123);
userService.add(user);

user = userService.find("zhh");

user.notes.set("call remote service");
userService.update(user);

userService.delete("zhh");
}

public static class UserServiceImpl implements UserService {
@Override
public Long add(User user) {
return user.insert();
}

@Override
public User find(String name) {
return User.dao.where().name.eq(name).findOne();
}

@Override
public Integer update(User user) {
return user.update();
}

@Override
public Integer delete(String name) {
return User.dao.where().name.eq(name).delete();
}
}

}

This file was deleted.

@@ -1,4 +1,4 @@
package org.lealone.test.orm.generated;
package org.lealone.test.generated.model;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
Expand All @@ -25,7 +25,7 @@
import org.lealone.orm.typequery.PTimestamp;
import org.lealone.orm.typequery.PUuid;
import org.lealone.orm.typequery.TQProperty;
import org.lealone.test.orm.generated.AllType.AllTypeDeserializer;
import org.lealone.test.generated.model.AllType.AllTypeDeserializer;

/**
* Model for table 'ALL_TYPE'.
Expand Down
@@ -1,4 +1,4 @@
package org.lealone.test.orm.generated;
package org.lealone.test.generated.model;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
Expand All @@ -10,7 +10,7 @@
import org.lealone.orm.typequery.PLong;
import org.lealone.orm.typequery.PString;
import org.lealone.orm.typequery.TQProperty;
import org.lealone.test.orm.generated.Customer.CustomerDeserializer;
import org.lealone.test.generated.model.Customer.CustomerDeserializer;

/**
* Model for table 'CUSTOMER'.
Expand Down

0 comments on commit 542f4f9

Please sign in to comment.