Skip to content

Commit 85bf1da

Browse files
author
litongjava
committed
tio-boot db enjoy
1 parent ae49e6e commit 85bf1da

File tree

3 files changed

+193
-6
lines changed

3 files changed

+193
-6
lines changed

docs/.vuepress/config/sidebar-zh.json

+5-4
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
{
7474
"title": "08_认证和授权",
7575
"collapsable": false,
76-
"children": ["08_认证和授权/01.md", "08_认证和授权/02.md"]
76+
"children": ["08_认证/01.md", "08_认证/02.md"]
7777
},
7878
{
7979
"title": "09_缓存",
@@ -129,7 +129,8 @@
129129
"15_table-to-json/05.md",
130130
"15_table-to-json/06.md",
131131
"15_table-to-json/07.md",
132-
"15_table-to-json/08.md"
132+
"15_table-to-json/08.md",
133+
"15_table-to-json/09.md"
133134
]
134135
},
135136
{
@@ -169,9 +170,9 @@
169170
]
170171
},
171172
{
172-
"title": "23_http-client",
173+
"title": "23_HTTP-Client",
173174
"collapsable": false,
174-
"children": ["23_http-client/01.md"]
175+
"children": ["23_httpclient/01.md"]
175176
},
176177
{
177178
"title": "25_性能测试",

docs/zh/06_内置组件/10.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ import com.litongjava.tio.boot.tesing.TioBootTest;
5454

5555
public class PenRawDataServiceTest {
5656

57-
@Before
58-
public void before() {
57+
@BeforeClass
58+
public void beforeClass() {
5959
// 初始化测试环境并为 AOP 准备 ActiveRecordPluginConfiguration 类
6060
TioBootTest.before("test", ActiveRecordPluginConfiguration.class);
6161
}

docs/zh/15_table-to-json/09.md

+186
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
# table-to-json 整合 enjoy 模版模版引擎
2+
3+
整合 Enjoy 模板引擎到你的 Java 应用程序,尤其是在处理数据库操作和 SQL 文件管理方面,不仅能提高开发效率,还能使代码的可维护性更强。以下是一个详细的指南,包括如何配置数据库连接,如何添加和管理 SQL 文件,以及如何通过模板引擎执行查询测试。
4+
5+
### 为什么要整合 Enjoy 模板引擎
6+
7+
- **统一管理 SQL 文件**:Enjoy 模板引擎允许你将 SQL 文件放置在项目的资源目录下,通过模板引擎动态加载,这样做有助于统一管理 SQL 语句,便于维护和更新。
8+
- **开发效率提高**:通过模板引擎支持的动态 SQL 功能,可以根据不同条件拼接不同的 SQL 片段,减少重复代码,提高开发效率。
9+
- **提升应用性能**:Enjoy 模板引擎编译模板后缓存结果,对于重复执行的 SQL 查询,可以直接使用缓存结果,减少解析时间,提升应用性能。
10+
11+
### 整合指南
12+
13+
#### 配置数据库连接
14+
15+
首先,我们需要配置数据库连接。以下是一个配置示例,演示如何在 Java 应用中设置和使用 HikariCP 连接池与 PostgreSQL 数据库。
16+
17+
```java
18+
package com.litongjava.tio.boot.admin.config;
19+
20+
import javax.sql.DataSource;
21+
22+
import com.jfinal.template.Engine;
23+
import com.jfinal.template.source.ClassPathSourceFactory;
24+
import com.litongjava.jfinal.aop.annotation.AConfiguration;
25+
import com.litongjava.jfinal.aop.annotation.AInitialization;
26+
import com.litongjava.jfinal.plugin.activerecord.ActiveRecordPlugin;
27+
import com.litongjava.jfinal.plugin.activerecord.OrderedFieldContainerFactory;
28+
import com.litongjava.jfinal.plugin.activerecord.dialect.PostgreSqlDialect;
29+
import com.litongjava.jfinal.plugin.hikaricp.DsContainer;
30+
import com.litongjava.tio.boot.constatns.TioBootConfigKeys;
31+
import com.litongjava.tio.boot.server.TioBootServer;
32+
import com.litongjava.tio.utils.environment.EnvironmentUtils;
33+
import com.zaxxer.hikari.HikariConfig;
34+
import com.zaxxer.hikari.HikariDataSource;
35+
36+
@AConfiguration
37+
public class TableToJsonConfig {
38+
39+
public DataSource dataSource() {
40+
String jdbcUrl = EnvironmentUtils.get("jdbc.url");
41+
String jdbcUser = EnvironmentUtils.get("jdbc.user");
42+
43+
String jdbcPswd = EnvironmentUtils.get("jdbc.pswd");
44+
int maximumPoolSize = EnvironmentUtils.getInt("jdbc.MaximumPoolSize", 2);
45+
46+
HikariConfig config = new HikariConfig();
47+
// config
48+
config.setJdbcUrl(jdbcUrl);
49+
config.setUsername(jdbcUser);
50+
config.setPassword(jdbcPswd);
51+
config.setMaximumPoolSize(maximumPoolSize);
52+
53+
HikariDataSource hikariDataSource = new HikariDataSource(config);
54+
55+
// set datasource
56+
DsContainer.setDataSource(hikariDataSource);
57+
// add destroy
58+
TioBootServer.me().addDestroyMethod(hikariDataSource::close);
59+
return hikariDataSource;
60+
61+
}
62+
63+
/*
64+
*
65+
* config ActiveRecordPlugin
66+
*/
67+
@AInitialization
68+
public void activeRecordPlugin() throws Exception {
69+
// get dataSource
70+
DataSource dataSource = dataSource();
71+
// get env key
72+
String property = EnvironmentUtils.get(TioBootConfigKeys.APP_ENV);
73+
74+
// create arp
75+
ActiveRecordPlugin arp = new ActiveRecordPlugin(dataSource);
76+
arp.setContainerFactory(new OrderedFieldContainerFactory());
77+
if ("dev".equals(property)) {
78+
arp.setDevMode(true);
79+
}
80+
81+
arp.setDialect(new PostgreSqlDialect());
82+
83+
// config engine
84+
Engine engine = arp.getEngine();
85+
//devMode下修改sql文件无需重启
86+
engine.setDevMode(EnvironmentUtils.isDev());
87+
//设置sql文件路径
88+
engine.setSourceFactory(new ClassPathSourceFactory());
89+
//添加压缩
90+
engine.setCompressorOn(' ');
91+
engine.setCompressorOn('\n');
92+
// add sql file
93+
arp.addSqlTemplate("/sql/all_sql.sql");
94+
// start
95+
arp.start();
96+
97+
// add stop
98+
TioBootServer.me().addDestroyMethod(arp::stop);
99+
}
100+
}
101+
```
102+
103+
#### 添加 SQL 文件
104+
105+
在你的项目资源目录(
106+
107+
`src/main/resources/sql`)下添加 SQL 文件。首先创建一个名为 `all_sql.sql` 的文件,该文件用于包含其他 SQL 文件。
108+
109+
`all_sql.sql` 示例:
110+
111+
```sql
112+
#include("user.sql")
113+
```
114+
115+
接着,创建 `user.sql` 文件,该文件中定义了具体的 SQL 语句。
116+
117+
`user.sql` 示例:
118+
119+
```sql
120+
#namespace("user")
121+
#sql("adminUser")
122+
SELECT * FROM tio_boot_admin_system_users WHERE ID = 1 AND deleted = 0
123+
#end
124+
#sql("getUserById")
125+
SELECT * FROM tio_boot_admin_system_users WHERE ID = ? AND deleted = 0
126+
#end
127+
#end
128+
```
129+
130+
#### 查询测试
131+
132+
最后,进行查询测试,以验证整合是否成功。以下是测试用例的示例代码:
133+
134+
```java
135+
package com.litongjava.tio.boot.admin.services;
136+
137+
import com.litongjava.jfinal.plugin.activerecord.Db;
138+
import com.litongjava.jfinal.plugin.activerecord.DbTemplate;
139+
import com.litongjava.jfinal.plugin.activerecord.Record;
140+
import com.litongjava.jfinal.plugin.activerecord.SqlPara;
141+
import com.litongjava.tio.boot.admin.config.TableToJsonConfig;
142+
import com.litongjava.tio.boot.tesing.TioBootTest;
143+
import org.junit.BeforeClass;
144+
import org.junit.Test;
145+
146+
/**
147+
* Created by Tong Li <https://github.com/litongjava>
148+
*/
149+
public class UserServiceTest {
150+
151+
@BeforeClass
152+
public static void beforeClass() {
153+
TioBootTest.before(TableToJsonConfig.class);
154+
}
155+
156+
@Test
157+
public void adminUser() {
158+
DbTemplate template = Db.template("user.adminUser");
159+
Record first = template.findFirst();
160+
System.out.println(first);
161+
}
162+
163+
@Test
164+
public void getUserById() {
165+
//template
166+
DbTemplate template = Db.template("user.getUserById");
167+
//sqlPara 是一个包含了sql和para的对象
168+
SqlPara sqlPara = template.getSqlPara();
169+
sqlPara.addPara(1);
170+
//执行查询
171+
Record first = Db.findFirst(sqlPara);
172+
System.out.println(first);
173+
}
174+
}
175+
```
176+
177+
output
178+
179+
```log
180+
2024-03-28 23:33:45.549 [main] INFO c.z.h.HikariDataSource.<init>:80 - HikariPool-1 - Starting...
181+
2024-03-28 23:33:45.646 [main] INFO c.z.h.HikariDataSource.<init>:82 - HikariPool-1 - Start completed.
182+
{id:1, username:admin, password:8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918, nickname:admin, signature:This is a signature, title:Admin, group_name:Administrators, tags:{"tags": [{"key": "tag1", "label": "Tag 1"}, {"key": "tag2", "label": "Tag 2"}]}, notify_count:10, unread_count:5, country:United States, access:admin, geographic:{"province": {"label": "California", "key": "CA"}, "city": {"label": "San Francisco", "key": "SF"}}, address:123 Main St, San Francisco, CA 94122, remark:管理员, dept_id:103, post_ids:[1], email:[email protected], mobile:15612345678, sex:1, avatar:http://127.0.0.1:48080/admin-api/infra/file/4/get/37e56010ecbee472cdd821ac4b608e151e62a74d9633f15d085aee026eedeb60.png, status:0, login_ip:127.0.0.1, login_date:2023-11-30 09:16:00.0, creator:admin, create_time:2021-01-05 17:03:47.0, updater:null, update_time:2024-03-23 08:49:55.0, tenant_id:1}
183+
{id:1, username:admin, password:8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918, nickname:admin, signature:This is a signature, title:Admin, group_name:Administrators, tags:{"tags": [{"key": "tag1", "label": "Tag 1"}, {"key": "tag2", "label": "Tag 2"}]}, notify_count:10, unread_count:5, country:United States, access:admin, geographic:{"province": {"label": "California", "key": "CA"}, "city": {"label": "San Francisco", "key": "SF"}}, address:123 Main St, San Francisco, CA 94122, remark:管理员, dept_id:103, post_ids:[1], email:[email protected], mobile:15612345678, sex:1, avatar:http://127.0.0.1:48080/admin-api/infra/file/4/get/37e56010ecbee472cdd821ac4b608e151e62a74d9633f15d085aee026eedeb60.png, status:0, login_ip:127.0.0.1, login_date:2023-11-30 09:16:00.0, creator:admin, create_time:2021-01-05 17:03:47.0, updater:null, update_time:2024-03-23 08:49:55.0, tenant_id:1}
184+
```
185+
186+
通过上述步骤,你已经成功地将 Enjoy 模板引擎整合到你的项目中,可以享受到模板引擎带来的便利和高效性能了。

0 commit comments

Comments
 (0)