gorm-plus
gorm-plus copied to clipboard
Gorm-plus是基于Gorm的增强版,类似Mybatis-plus语法。Gorm-plus is based on an enhanced version of Gorm, similar to Mybatis-plus syntax.
Gorm-Plusæ¯Gormçå¢å¼ºå·¥å ·ï¼å®å¨ä¿æGormåæç¹æ§çåºç¡ä¸ï¼ä¸ºå¼åè æä¾äºå¼ç®±å³ç¨çå¢å¼ºåè½ãéè¿ç®åå¼åæµç¨ãæé«æçï¼å®ä¸ºå¼åè 带æ¥äºæ ä¸ä¼¦æ¯çå¼åä½éªãå¦ææ¨æ¸´æå°è¯ä¸æ¬¾è®©å¼ååå¾è½»æ¾èé«æçå·¥å ·ï¼Gorm-Pluså°æ¯æ¨ä¸å¯éè¿çéæ©ã
ç¹æ§
- æ ä¾µå ¥ãå¢å¼ºèéæ¹åï¼Gorm-Plus以æ ä¾µå ¥çæ¹å¼å¯¹ Gorm è¿è¡å¢å¼ºï¼ä¿æåæç¹æ§çåæ¶æä¾æ´å¤åè½ï¼è®©æ¨æ éæ å¿å ¼å®¹æ§é®é¢ã
- 强大ç CRUD æä½åéç¨æ¥è¯¢ï¼Gorm-Pluså ç½®äºå¼ºå¤§ç CRUD æä½åè½ï¼å¹¶æä¾äºç®ä¾¿çéç¨æ¥è¯¢åè½ï¼æ éç¹ççé ç½®å³å¯è½»æ¾æ建å¤ææ¡ä»¶æ¥è¯¢ã
- æ¯ææéå段形å¼æ¥è¯¢ï¼éè¿æ¯ææéå段形å¼æ¥è¯¢ï¼Gorm-Plus让ç¼ååç±»æ¥è¯¢æ¡ä»¶åå¾æ´å 便æ·ï¼åä¹ä¸ç¨æ å¿å 为å段åéèåºç°é误ã
- å ç½®æ³åæ¥è¯¢åçµæ´»çè¿åç±»åå°è£ ï¼Gorm-Pluså ç½®äºæ³åæ¥è¯¢åè½ï¼è®©æ¨è½å¤çµæ´»å°è£ è¿åç±»åï¼è½»æ¾åºå¯¹åç§æ¥è¯¢éæ±ã
- å ç½®å页æ件ï¼Gorm-Plusè¿æä¾äºå ç½®çå页æ件ï¼è®©å页æä½åå¾ç®åèé«æï¼è®©æ¨è½å¤è½»æ¾å¤ç大éæ°æ®ï¼å¹¶å®ç°æ´å¥½çç¨æ·ä½éªã
å¿«éä¸æ
ç°æä¸å¼ Users
表ï¼å
¶è¡¨ç»æå¦ä¸ï¼
CREATE TABLE `users` (
`id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`password` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`age` bigint DEFAULT NULL,
`phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`score` bigint DEFAULT NULL,
`dept` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`created_at` datetime(3) DEFAULT NULL,
`updated_at` datetime(3) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=407 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
对åºçæ°æ®å¦ä¸ï¼
INSERT INTO `users` (`username`, `password`, `address`, `age`, `phone`, `score`, `dept`, `created_at`, `updated_at`)
VALUES
('å¼ ä¸', 'password1', 'å°å1', 25, '12345678901', 80, 'é¨é¨1', NOW(), NOW()),
('æå', 'password2', 'å°å2', 30, '12345678902', 90, 'é¨é¨2', NOW(), NOW()),
('çäº', 'password3', 'å°å3', 35, '12345678903', 70, 'é¨é¨1', NOW(), NOW()),
('èµµå
', 'password4', 'å°å4', 28, '12345678904', 85, 'é¨é¨2', NOW(), NOW()),
('é±ä¸', 'password5', 'å°å5', 32, '12345678905', 75, 'é¨é¨1', NOW(), NOW());
å¼å§ä½¿ç¨
ä¸è½½Gorm-Plus
go get github.com/acmestack/gorm-plus
package main
import (
"github.com/acmestack/gorm-plus/gplus"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"log"
"time"
)
type User struct {
ID int64
Username string
Password string
Address string
Age int
Phone string
Score int
Dept string
CreatedAt time.Time
UpdatedAt time.Time
}
var gormDb *gorm.DB
func init() {
dsn := "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
var err error
gormDb, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
if err != nil {
log.Println(err)
}
// åå§ågplus
gplus.Init(gormDb)
}
func main() {
users, resultDb := gplus.SelectList[User](nil)
log.Println("error:", resultDb.Error)
log.Println("RowsAffected:", resultDb.RowsAffected)
for _, user := range users {
log.Println("user:", user)
}
}
æ§å¶å°è¾åºï¼
2023/06/01 17:48:19 error: <nil>
2023/06/01 17:48:19 RowsAffected: 5
2023/06/01 17:48:19 user: &{1 å¼ ä¸ password1 å°å1 25 12345678901 80 é¨é¨1 2023-06-01 17:48:11 +0800 CST 2023-06-01 17:48:11 +0800 CST}
2023/06/01 17:48:19 user: &{2 æå password2 å°å2 30 12345678902 90 é¨é¨2 2023-06-01 17:48:11 +0800 CST 2023-06-01 17:48:11 +0800 CST}
2023/06/01 17:48:19 user: &{3 çäº password3 å°å3 35 12345678903 70 é¨é¨1 2023-06-01 17:48:11 +0800 CST 2023-06-01 17:48:11 +0800 CST}
2023/06/01 17:48:19 user: &{4 èµµå
password4 å°å4 28 12345678904 85 é¨é¨2 2023-06-01 17:48:11 +0800 CST 2023-06-01 17:48:11 +0800 CST}
2023/06/01 17:48:19 user: &{5 é±ä¸ password5 å°å5 32 12345678905 75 é¨é¨1 2023-06-01 17:48:11 +0800 CST 2023-06-01 17:48:11 +0800 CST}
æç´¢å·¥å ·
åªéè¦ä¸é¢ä¸è¡ä»£ç å³å¯å®æå表çæææ¥è¯¢åè½
gplus.SelectList(gplus.BuildQuery[User](queryParams))
ä¾åï¼
func main() {
http.HandleFunc("/", handleRequest)
http.ListenAndServe(":8080", nil)
}
func handleRequest(w http.ResponseWriter, r *http.Request) {
queryParams := r.URL.Query()
list, _ := gplus.SelectList(gplus.BuildQuery[User](queryParams))
marshal, _ := json.Marshal(list)
w.Write(marshal)
}
å设æ们è¦æ¥è¯¢username为zhangsançç¨æ·
http://localhost:8080?q=username=zhangsan
å设æ们è¦æ¥è¯¢usernameå§zhangçç¨æ·
http://localhost:8080?q=username~>=zhang
å设æ们è¦æ¥è¯¢age大äº20çç¨æ·
http://localhost:8080?q=age>20
å设æ们è¦æ¥è¯¢usernameçäºzhagnsanï¼passwordçäº123456çç¨æ·
http://localhost:8080?q=username=zhangsan&q=password=123456
å设æ们è¦æ¥è¯¢usernameçäºzhagnsanï¼passwordçäº123456çç¨æ·
http://localhost:8080?q=username=zhangsan&q=password=123456
å设æ们è¦æ¥è¯¢usernameçäºzhagnsanï¼æè usenameçäºlisiçç¨æ·
å¯ä»¥å¢å ä¸ä¸ªåç»ågcondçæ¡ä»¶æ¥è¯¢æ¥å®ç°
http://localhost:8080?q=A.username=zhangsan&q=B.username=lisi&gcond=A|B
ææçå表æ¥è¯¢æ们é½åªéè¦ä¸è¡ä»£ç å³å¯ã
æ»ç»
ä»ä¸è¿°æ¥éª¤ä¸ï¼æ们å¯ä»¥çå°éæGorm-Plus
é常ç®åãåªéå¨åå§åGorm
ä¹åæ·»å ä¸è¡ä»£ç gplus.Init(gormDb)
å³å¯ä½¿ç¨ãä¸ä»
å¦æ¤ï¼ä½¿ç¨Gorm-Plus
ä¹åæ ·è½»æ¾ï¼åªéä¸è¡ä»£ç å³å¯å®æå表æ¥è¯¢ã
ç¶èï¼Gorm-Plus
ç强大åè½è¿ä¸æ¢äºæ¤ã
æ´å¤æ档请æ¥ç: https://github.com/acmestack/gorm-plus/wiki