原生查询+1
This commit is contained in:
+1
-1
@@ -6,7 +6,7 @@ import (
|
|||||||
|
|
||||||
type LingYeDO struct {
|
type LingYeDO struct {
|
||||||
// 自增ID
|
// 自增ID
|
||||||
ID uint64 `gorm:"column:id;type:bigint(20);not null;primary_key;AUTO_INCREMENT;comment:'自增ID'"`
|
ID uint64 `gorm:"primary_key"`
|
||||||
// 创建时间
|
// 创建时间
|
||||||
CreatedAt time.Time `gorm:"comment:'创建时间'"`
|
CreatedAt time.Time `gorm:"comment:'创建时间'"`
|
||||||
// 更新时间
|
// 更新时间
|
||||||
|
|||||||
+11
-4
@@ -1,17 +1,16 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"lingye-gin/src/config"
|
"lingye-gin/src/config"
|
||||||
"lingye-gin/src/middleware"
|
"lingye-gin/src/middleware"
|
||||||
v1 "lingye-gin/src/test/v1"
|
"lingye-gin/src/modules/system/entity"
|
||||||
|
"lingye-gin/src/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// 初始化yaml配置
|
// 初始化yaml配置
|
||||||
new(config.ApplicationProperties).Init()
|
new(config.ApplicationProperties).Init()
|
||||||
|
|
||||||
v1.DescribeStudents(nil)
|
|
||||||
|
|
||||||
// 初始化redis
|
// 初始化redis
|
||||||
new(middleware.RedisPool).Init()
|
new(middleware.RedisPool).Init()
|
||||||
// 初始化gorm, 注册表
|
// 初始化gorm, 注册表
|
||||||
@@ -23,3 +22,11 @@ func main() {
|
|||||||
// 初始化gin
|
// 初始化gin
|
||||||
new(middleware.GinEngine).Start()
|
new(middleware.GinEngine).Start()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test() {
|
||||||
|
// 通过ID查询
|
||||||
|
var role entity.Role
|
||||||
|
util.SelectOne(role, "select * from sys_role where id = ?", 1)
|
||||||
|
fmt.Printf("SelectOne=%v", role)
|
||||||
|
// 查询列表
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"lingye-gin/src/config"
|
||||||
|
"lingye-gin/src/modules/system/entity"
|
||||||
|
"lingye-gin/src/modules/system/service/query"
|
||||||
|
"lingye-gin/src/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
type RoleDAO struct{}
|
||||||
|
|
||||||
|
// 新增
|
||||||
|
func (dao RoleDAO) Insert(resource *entity.Role) {
|
||||||
|
config.SqlExcutor.Create(resource)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除
|
||||||
|
func (RoleDAO) DeleteById(id uint64) {
|
||||||
|
role := entity.Role{}
|
||||||
|
role.ID = id
|
||||||
|
config.SqlExcutor.Delete(&role)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新
|
||||||
|
func (RoleDAO) UpdateById(role *entity.Role) {
|
||||||
|
model := &entity.Role{}
|
||||||
|
model.ID = role.ID
|
||||||
|
config.SqlExcutor.Model(model).Updates(map[string]interface{}{
|
||||||
|
"role_key": role.RoleKey,
|
||||||
|
"role_name": role.RoleName,
|
||||||
|
"role_sort": role.RoleSort,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 条件分页查询
|
||||||
|
func (RoleDAO) SelectPage(condition query.UserQuery) ([]entity.Role, int) {
|
||||||
|
var users []entity.Role
|
||||||
|
var total int
|
||||||
|
|
||||||
|
page, pageSize := util.FixPage(condition.Page, condition.PageSize)
|
||||||
|
// 分页条件
|
||||||
|
pageConfig := config.SqlExcutor.Where("username LIKE ?", "%"+condition.Username+"%")
|
||||||
|
// 分页参数
|
||||||
|
pageConfig = pageConfig.Limit((page - 1) * pageSize).Offset(pageSize)
|
||||||
|
pageConfig = pageConfig.Find(&users)
|
||||||
|
// 统计数量
|
||||||
|
pageConfig.Count(&total)
|
||||||
|
return users, total
|
||||||
|
}
|
||||||
@@ -7,8 +7,8 @@ import (
|
|||||||
// 字典类型
|
// 字典类型
|
||||||
type DictType struct {
|
type DictType struct {
|
||||||
base.LingYeDO
|
base.LingYeDO
|
||||||
DictName string `gorm:"column:dict_name;type:varchar(255);comment:'字典名称'"`
|
DictName string `gorm:"column:dict_name;type:varchar(255);index:idx_name_type;comment:'字典名称'"`
|
||||||
DictType string `gorm:"column:dict_type;type:varchar(255);unique_index;comment:'字典类型'"`
|
DictType string `gorm:"column:dict_type;type:varchar(255);index:idx_name_type;comment:'字典类型'"`
|
||||||
Status string `gorm:"column:status;type:char(1);default:'0';comment:'状态(0正常 1停用)'"`
|
Status string `gorm:"column:status;type:char(1);default:'0';comment:'状态(0正常 1停用)'"`
|
||||||
Remark string `gorm:"column:remark;comment:'备注'"`
|
Remark string `gorm:"column:remark;comment:'备注'"`
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-16
@@ -13,17 +13,15 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// 高级加密标准(Advanced Encryption Standard, AES)
|
// 高级加密标准(Advanced Encryption Standard, AES)
|
||||||
type AESUtils struct{}
|
|
||||||
|
|
||||||
// 16,24,32位字符串的话, 分别对应AES-128, AES-192, AES-256 加密方法
|
// 16,24,32位字符串的话, 分别对应AES-128, AES-192, AES-256 加密方法
|
||||||
// key不能泄露
|
// key不能泄露
|
||||||
func (AESUtils) GetRandomPwdKey() string {
|
func GetRandomPwdKey() string {
|
||||||
u2 := uuid.NewV4()
|
u2 := uuid.NewV4()
|
||||||
return strings.Replace(u2.String(), "-", "", -1)
|
return strings.Replace(u2.String(), "-", "", -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PKCS7 填充模式
|
// PKCS7 填充模式
|
||||||
func (AESUtils) PKCS7Padding(ciphertext []byte, blockSize int) []byte {
|
func PKCS7Padding(ciphertext []byte, blockSize int) []byte {
|
||||||
padding := blockSize - len(ciphertext)%blockSize
|
padding := blockSize - len(ciphertext)%blockSize
|
||||||
// Repeat()函数的功能是把切片[]byte{byte(padding)}复制padding个, 然后合并成新的字节切片返回
|
// Repeat()函数的功能是把切片[]byte{byte(padding)}复制padding个, 然后合并成新的字节切片返回
|
||||||
padText := bytes.Repeat([]byte{byte(padding)}, padding)
|
padText := bytes.Repeat([]byte{byte(padding)}, padding)
|
||||||
@@ -31,7 +29,7 @@ func (AESUtils) PKCS7Padding(ciphertext []byte, blockSize int) []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 填充的反向操作, 删除填充字符串
|
// 填充的反向操作, 删除填充字符串
|
||||||
func (AESUtils) PKCS7UnPadding(origData []byte) ([]byte, error) {
|
func PKCS7UnPadding(origData []byte) ([]byte, error) {
|
||||||
// 获取数据长度
|
// 获取数据长度
|
||||||
length := len(origData)
|
length := len(origData)
|
||||||
if length == 0 {
|
if length == 0 {
|
||||||
@@ -45,7 +43,7 @@ func (AESUtils) PKCS7UnPadding(origData []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 实现加密
|
// 实现加密
|
||||||
func (util AESUtils) AesEncrypt(origData []byte, key []byte) ([]byte, error) {
|
func AesEncrypt(origData []byte, key []byte) ([]byte, error) {
|
||||||
// 创建加密算法实例
|
// 创建加密算法实例
|
||||||
block, err := aes.NewCipher(key)
|
block, err := aes.NewCipher(key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -54,7 +52,7 @@ func (util AESUtils) AesEncrypt(origData []byte, key []byte) ([]byte, error) {
|
|||||||
// 获取块的大小
|
// 获取块的大小
|
||||||
blockSize := block.BlockSize()
|
blockSize := block.BlockSize()
|
||||||
// 对数据进行填充,让数据长度满足需求
|
// 对数据进行填充,让数据长度满足需求
|
||||||
origData = util.PKCS7Padding(origData, blockSize)
|
origData = PKCS7Padding(origData, blockSize)
|
||||||
// 采用AES加密方法中CBC加密模式
|
// 采用AES加密方法中CBC加密模式
|
||||||
blocMode := cipher.NewCBCEncrypter(block, key[:blockSize])
|
blocMode := cipher.NewCBCEncrypter(block, key[:blockSize])
|
||||||
result := make([]byte, len(origData))
|
result := make([]byte, len(origData))
|
||||||
@@ -64,7 +62,7 @@ func (util AESUtils) AesEncrypt(origData []byte, key []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 实现解密
|
// 实现解密
|
||||||
func (util AESUtils) AesDeCrypt(cypted []byte, key []byte) ([]byte, error) {
|
func AesDeCrypt(cypted []byte, key []byte) ([]byte, error) {
|
||||||
// 创建加密算法实例
|
// 创建加密算法实例
|
||||||
block, err := aes.NewCipher(key)
|
block, err := aes.NewCipher(key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -78,7 +76,7 @@ func (util AESUtils) AesDeCrypt(cypted []byte, key []byte) ([]byte, error) {
|
|||||||
// 这个函数也可以用来解密
|
// 这个函数也可以用来解密
|
||||||
blockMode.CryptBlocks(origData, cypted)
|
blockMode.CryptBlocks(origData, cypted)
|
||||||
// 去除填充字符串
|
// 去除填充字符串
|
||||||
origData, err = util.PKCS7UnPadding(origData)
|
origData, err = PKCS7UnPadding(origData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -86,8 +84,8 @@ func (util AESUtils) AesDeCrypt(cypted []byte, key []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 加密base64
|
// 加密base64
|
||||||
func (util AESUtils) EnPwdCode(pwd []byte) (string, error) {
|
func EnPwdCode(pwd []byte) (string, error) {
|
||||||
result, err := util.AesEncrypt(pwd, []byte(config.AppProps.Jwt.Secret))
|
result, err := AesEncrypt(pwd, []byte(config.AppProps.Jwt.Secret))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -95,19 +93,19 @@ func (util AESUtils) EnPwdCode(pwd []byte) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 解密
|
// 解密
|
||||||
func (util AESUtils) DePwdCode(pwd string) ([]byte, error) {
|
func DePwdCode(pwd string) ([]byte, error) {
|
||||||
// 解密base64字符串
|
// 解密base64字符串
|
||||||
pwdByte, err := base64.StdEncoding.DecodeString(pwd)
|
pwdByte, err := base64.StdEncoding.DecodeString(pwd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
// 执行AES解密
|
// 执行AES解密
|
||||||
return util.AesDeCrypt(pwdByte, []byte(config.AppProps.Jwt.Secret))
|
return AesDeCrypt(pwdByte, []byte(config.AppProps.Jwt.Secret))
|
||||||
|
|
||||||
}
|
}
|
||||||
func (util AESUtils) Test() {
|
func AesTest() {
|
||||||
str := []byte("加密测试")
|
str := []byte("加密测试")
|
||||||
pwd, _ := util.EnPwdCode(str)
|
pwd, _ := EnPwdCode(str)
|
||||||
bt, _ := util.DePwdCode(pwd)
|
bt, _ := DePwdCode(pwd)
|
||||||
fmt.Println(string(bt))
|
fmt.Println(string(bt))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"lingye-gin/src/config"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SelectOne(target interface{}, sql string, values ...interface{}) {
|
||||||
|
config.SqlExcutor.Raw(sql, values).Scan(target)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SelectList(target interface{}, sql string, values ...interface{}) {
|
||||||
|
config.SqlExcutor.Raw(sql, values).Scan(target)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Create() {
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user