- 将 BatchInsert 方法重命名为 Inserts,以更好地反映其功能 - 更新示例代码和文档,确保使用新方法名 - 删除过时的文档文件,整合 HoTimeDB 使用说明和 API 参考 - 优化 README.md,增强框架特性和安装说明的清晰度
303 lines
7.1 KiB
Markdown
303 lines
7.1 KiB
Markdown
# HoTime 快速上手指南
|
||
|
||
5 分钟入门 HoTime 框架。
|
||
|
||
## 安装
|
||
|
||
```bash
|
||
go get code.hoteas.com/golang/hotime
|
||
```
|
||
|
||
## 最小示例
|
||
|
||
```go
|
||
package main
|
||
|
||
import (
|
||
. "code.hoteas.com/golang/hotime"
|
||
. "code.hoteas.com/golang/hotime/common"
|
||
)
|
||
|
||
func main() {
|
||
appIns := Init("config/config.json")
|
||
|
||
appIns.Run(Router{
|
||
"app": {
|
||
"test": {
|
||
"hello": func(that *Context) {
|
||
that.Display(0, Map{"message": "Hello World"})
|
||
},
|
||
},
|
||
},
|
||
})
|
||
}
|
||
```
|
||
|
||
访问: `http://localhost:8081/app/test/hello`
|
||
|
||
## 配置文件
|
||
|
||
创建 `config/config.json`:
|
||
|
||
```json
|
||
{
|
||
"port": "8081",
|
||
"mode": 2,
|
||
"sessionName": "HOTIME",
|
||
"tpt": "tpt",
|
||
"defFile": ["index.html", "index.htm"],
|
||
"db": {
|
||
"mysql": {
|
||
"host": "localhost",
|
||
"port": "3306",
|
||
"name": "your_database",
|
||
"user": "root",
|
||
"password": "your_password"
|
||
}
|
||
},
|
||
"cache": {
|
||
"memory": {
|
||
"db": true,
|
||
"session": true,
|
||
"timeout": 7200
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
| 配置项 | 说明 |
|
||
|--------|------|
|
||
| `port` | 服务端口 |
|
||
| `mode` | 0=生产, 1=测试, 2=开发(输出SQL) |
|
||
| `tpt` | 静态文件目录 |
|
||
| `db` | 数据库配置 |
|
||
| `cache` | 缓存配置 |
|
||
|
||
## 路由系统
|
||
|
||
HoTime 使用三层路由结构:`模块/控制器/方法`
|
||
|
||
```go
|
||
appIns.Run(Router{
|
||
"模块名": {
|
||
"控制器名": {
|
||
"方法名": func(that *Context) {
|
||
// 处理逻辑
|
||
},
|
||
},
|
||
},
|
||
})
|
||
```
|
||
|
||
### 获取请求参数
|
||
|
||
```go
|
||
// GET/POST 参数
|
||
name := that.Req.FormValue("name")
|
||
|
||
// JSON Body
|
||
that.Req.ParseForm()
|
||
data := that.Req.PostForm
|
||
|
||
// 获取路径参数
|
||
module := that.RouterPath[0] // 模块
|
||
controller := that.RouterPath[1] // 控制器
|
||
action := that.RouterPath[2] // 方法
|
||
```
|
||
|
||
### 响应数据
|
||
|
||
```go
|
||
// 标准 JSON 响应
|
||
that.Display(0, Map{"data": "value"}) // 成功 code=0
|
||
that.Display(1, "错误信息") // 失败 code=1
|
||
|
||
// 直接写入
|
||
that.Resp.Write([]byte("raw data"))
|
||
```
|
||
|
||
## 中间件
|
||
|
||
```go
|
||
// 全局中间件(请求拦截)
|
||
appIns.SetConnectListener(func(that *Context) bool {
|
||
// 检查登录状态
|
||
if that.Session("user_id").Data == nil {
|
||
that.Display(2, "请先登录")
|
||
return true // 返回 true 终止请求
|
||
}
|
||
return false // 返回 false 继续处理
|
||
})
|
||
```
|
||
|
||
## Session 与缓存
|
||
|
||
```go
|
||
// Session 操作
|
||
that.Session("user_id", 123) // 设置
|
||
userId := that.Session("user_id") // 获取
|
||
that.Session("user_id", nil) // 删除
|
||
|
||
// 通用缓存
|
||
that.Cache("key", "value") // 设置
|
||
data := that.Cache("key") // 获取
|
||
that.Cache("key", nil) // 删除
|
||
```
|
||
|
||
三级缓存自动运作:**Memory → Redis → Database**
|
||
|
||
## 数据库操作(简要)
|
||
|
||
### 基础 CRUD
|
||
|
||
```go
|
||
// 查询列表
|
||
users := that.Db.Select("user", "*", Map{"status": 1})
|
||
|
||
// 查询单条
|
||
user := that.Db.Get("user", "*", Map{"id": 1})
|
||
|
||
// 插入
|
||
id := that.Db.Insert("user", Map{"name": "test", "age": 18})
|
||
|
||
// 更新
|
||
rows := that.Db.Update("user", Map{"name": "new"}, Map{"id": 1})
|
||
|
||
// 删除
|
||
rows := that.Db.Delete("user", Map{"id": 1})
|
||
```
|
||
|
||
### 链式查询
|
||
|
||
```go
|
||
users := that.Db.Table("user").
|
||
LeftJoin("order", "user.id=order.user_id").
|
||
Where("status", 1).
|
||
And("age[>]", 18).
|
||
Order("id DESC").
|
||
Page(1, 10).
|
||
Select("*")
|
||
```
|
||
|
||
### 条件语法速查
|
||
|
||
| 语法 | 说明 | 示例 |
|
||
|------|------|------|
|
||
| `key` | 等于 | `"id": 1` |
|
||
| `key[>]` | 大于 | `"age[>]": 18` |
|
||
| `key[<]` | 小于 | `"age[<]": 60` |
|
||
| `key[>=]` | 大于等于 | `"age[>=]": 18` |
|
||
| `key[<=]` | 小于等于 | `"age[<=]": 60` |
|
||
| `key[!]` | 不等于 | `"status[!]": 0` |
|
||
| `key[~]` | LIKE | `"name[~]": "test"` |
|
||
| `key[<>]` | BETWEEN | `"age[<>]": Slice{18, 60}` |
|
||
| `key` | IN | `"id": Slice{1, 2, 3}` |
|
||
|
||
### 事务
|
||
|
||
```go
|
||
success := that.Db.Action(func(tx db.HoTimeDB) bool {
|
||
tx.Update("user", Map{"balance[#]": "balance - 100"}, Map{"id": 1})
|
||
tx.Insert("order", Map{"user_id": 1, "amount": 100})
|
||
return true // 返回 true 提交,false 回滚
|
||
})
|
||
```
|
||
|
||
> **更多数据库操作**:参见 [HoTimeDB 使用说明](HoTimeDB_使用说明.md)
|
||
|
||
## 扩展功能
|
||
|
||
| 功能 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| 微信支付/公众号/小程序 | `dri/wechat/` | 微信全套 SDK |
|
||
| 阿里云服务 | `dri/aliyun/` | 企业认证等 |
|
||
| 腾讯云服务 | `dri/tencent/` | 企业认证等 |
|
||
| 文件上传 | `dri/upload/` | 文件上传处理 |
|
||
| 文件下载 | `dri/download/` | 文件下载处理 |
|
||
| MongoDB | `dri/mongodb/` | MongoDB 驱动 |
|
||
| RSA 加解密 | `dri/rsa/` | RSA 加解密工具 |
|
||
|
||
## 完整示例
|
||
|
||
```go
|
||
package main
|
||
|
||
import (
|
||
. "code.hoteas.com/golang/hotime"
|
||
. "code.hoteas.com/golang/hotime/common"
|
||
)
|
||
|
||
func main() {
|
||
appIns := Init("config/config.json")
|
||
|
||
// 登录检查中间件
|
||
appIns.SetConnectListener(func(that *Context) bool {
|
||
// 放行登录接口
|
||
if that.RouterPath[2] == "login" {
|
||
return false
|
||
}
|
||
if that.Session("user_id").Data == nil {
|
||
that.Display(2, "请先登录")
|
||
return true
|
||
}
|
||
return false
|
||
})
|
||
|
||
appIns.Run(Router{
|
||
"api": {
|
||
"user": {
|
||
"login": func(that *Context) {
|
||
phone := that.Req.FormValue("phone")
|
||
password := that.Req.FormValue("password")
|
||
|
||
user := that.Db.Get("user", "*", Map{
|
||
"phone": phone,
|
||
"password": password,
|
||
})
|
||
|
||
if user == nil {
|
||
that.Display(1, "账号或密码错误")
|
||
return
|
||
}
|
||
|
||
that.Session("user_id", user.GetInt64("id"))
|
||
that.Display(0, Map{"user": user})
|
||
},
|
||
|
||
"info": func(that *Context) {
|
||
userId := that.Session("user_id").ToInt64()
|
||
user := that.Db.Get("user", "*", Map{"id": userId})
|
||
that.Display(0, Map{"user": user})
|
||
},
|
||
|
||
"list": func(that *Context) {
|
||
page := that.Req.FormValue("page")
|
||
if page == "" {
|
||
page = "1"
|
||
}
|
||
|
||
users := that.Db.Table("user").
|
||
Where("status", 1).
|
||
Order("id DESC").
|
||
Page(ObjToInt(page), 10).
|
||
Select("id,name,phone,created_at")
|
||
|
||
total := that.Db.Count("user", Map{"status": 1})
|
||
|
||
that.Display(0, Map{
|
||
"list": users,
|
||
"total": total,
|
||
})
|
||
},
|
||
},
|
||
},
|
||
})
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
**下一步**:
|
||
- [HoTimeDB 使用说明](HoTimeDB_使用说明.md) - 完整数据库教程
|
||
- [HoTimeDB API 参考](HoTimeDB_API参考.md) - API 速查手册
|