Skip to content

Commit 65d4e6e

Browse files
committed
add DynamicTableGeneratorQueryTest
1 parent ca801a3 commit 65d4e6e

File tree

2 files changed

+75
-10
lines changed

2 files changed

+75
-10
lines changed

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/generator/DynamicTableGenerator.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import org.hibernate.boot.registry.StandardServiceRegistry;
77
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
88
import org.hibernate.cfg.AvailableSettings;
9-
import org.hibernate.dialect.Dialect;
109
import org.hibernate.tool.schema.SourceType;
1110
import org.hibernate.tool.schema.TargetType;
1211
import org.hibernate.tool.schema.internal.ExceptionHandlerCollectingImpl;
@@ -23,7 +22,7 @@ public class DynamicTableGenerator {
2322
/**
2423
* 数据库方言
2524
*/
26-
private final Dialect dialect;
25+
private final Class<?> dialect;
2726
private final StandardServiceRegistry serviceRegistry;
2827
private final SchemaManagementTool managementTool;
2928

@@ -32,14 +31,9 @@ public DynamicTableGenerator(Class<?> dialectClass, String jdbcUrl) {
3231
}
3332

3433
public DynamicTableGenerator(Class<?> dialectClass, String jdbcUrl, String username, String password) {
35-
try {
36-
this.dialect = (Dialect) dialectClass.getDeclaredConstructor().newInstance();
37-
} catch (Exception e) {
38-
throw new RuntimeException("Failed to instantiate dialect", e);
39-
}
40-
34+
this.dialect = dialectClass;
4135
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
42-
.applySetting(AvailableSettings.DIALECT, dialect.getClass().getName())
36+
.applySetting(AvailableSettings.DIALECT, dialect.getName())
4337
.applySetting("hibernate.connection.url", jdbcUrl);
4438
if (StringUtils.hasText(username)) {
4539
builder.applySetting("hibernate.connection.username", username);
@@ -56,7 +50,7 @@ private class ExecutionOptionsImpl implements ExecutionOptions {
5650
@Override
5751
public Map<String, Object> getConfigurationValues() {
5852
Map<String, Object> config = new HashMap<>();
59-
config.put(AvailableSettings.DIALECT, dialect.getClass().getName());
53+
config.put(AvailableSettings.DIALECT, dialect.getName());
6054
return config;
6155
}
6256

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.codingapi.springboot.fast.generator;
2+
3+
import com.codingapi.springboot.fast.jdbc.JdbcQuery;
4+
import com.codingapi.springboot.fast.jdbc.JdbcQueryContext;
5+
import com.codingapi.springboot.fast.jpa.JPAQuery;
6+
import com.codingapi.springboot.fast.jpa.JpaQueryContext;
7+
import com.codingapi.springboot.fast.metadata.TableEntityMetadata;
8+
import jakarta.persistence.EntityManagerFactory;
9+
import jakarta.persistence.GenerationType;
10+
import org.hibernate.cfg.AvailableSettings;
11+
import org.junit.jupiter.api.Test;
12+
import org.springframework.beans.factory.annotation.Autowired;
13+
import org.springframework.boot.test.context.SpringBootTest;
14+
import org.springframework.core.env.Environment;
15+
import org.springframework.jdbc.core.JdbcTemplate;
16+
17+
import java.util.List;
18+
import java.util.Map;
19+
20+
import static org.junit.jupiter.api.Assertions.assertFalse;
21+
import static org.junit.jupiter.api.Assertions.assertThrows;
22+
23+
@SpringBootTest
24+
public class DynamicTableGeneratorQueryTest {
25+
26+
@Autowired
27+
private EntityManagerFactory entityManagerFactory;
28+
29+
@Autowired
30+
private Environment environment;
31+
32+
@Autowired
33+
private JdbcTemplate jdbcTemplate;
34+
35+
36+
@Test
37+
void generateThenUpdateQuery() throws ClassNotFoundException {
38+
String dialect = entityManagerFactory.getProperties().get(AvailableSettings.DIALECT).toString();
39+
String jdbcUrl = environment.getProperty("spring.datasource.url");
40+
String username = environment.getProperty("spring.datasource.username");
41+
String password = environment.getProperty("spring.datasource.password");
42+
43+
DynamicTableGenerator dynamicTableGenerator = new DynamicTableGenerator(Class.forName(dialect), jdbcUrl, username, password);
44+
45+
TableEntityMetadata tableEntityMetadata = new TableEntityMetadata("com.codingapi.springboot.fast.entity.Test");
46+
tableEntityMetadata.setTable("test");
47+
tableEntityMetadata.addPrimaryKeyColumn(Long.class, "id", GenerationType.IDENTITY, "主键");
48+
tableEntityMetadata.addColumn(String.class, "name", "姓名");
49+
50+
Class<?> entityClass = tableEntityMetadata.buildClass();
51+
52+
// 创建表
53+
dynamicTableGenerator.generateMigratorTableDDL(entityClass, true);
54+
55+
// 通过DynamicTableGenerator 动态创建的entity无法通过jpa的 EntityManager进行数据查询处理, 因为Entity不在JPA扫描支持的范围内。
56+
JPAQuery jpaQuery = JpaQueryContext.getInstance().getJPAQuery();
57+
assertThrows(Exception.class,()->{
58+
jpaQuery.listQuery(entityClass,"select t from com.codingapi.springboot.fast.entity.Test");
59+
});
60+
61+
// 插入数据
62+
jdbcTemplate.update("insert into test(name) values(?)", "小明");
63+
64+
// 查询数据
65+
JdbcQuery jdbcQuery = JdbcQueryContext.getInstance().getJdbcQuery();
66+
List<Map<String, Object>> list = jdbcQuery.queryForMapList("select * from test");
67+
System.out.println(list);
68+
assertFalse(list.isEmpty());
69+
70+
}
71+
}

0 commit comments

Comments
 (0)