Golang beego ORM + CRUP 操作详解
package models import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
) func init() { mysqluser := beego.AppConfig.String("mysqluser")
mysqlpass := beego.AppConfig.String("mysqlpass")
mysqlurls := beego.AppConfig.String("mysqlurls")
mysqldb := beego.AppConfig.String("mysqldb") orm.RegisterModel(new(DbBrand), new(DbProduct))
orm.RegisterDriver("mysql", orm.DRMySQL)
orm.RegisterDataBase("default", "mysql", mysqluser+":"+mysqlpass+"@tcp("+mysqlurls+")/"+mysqldb+"?charset=utf8&loc=Asia%2FShanghai")
orm.RunSyncdb("default", false, true)
if beego.AppConfig.String("runmode") == "dev" {
orm.Debug = true
}
}
package models import (
"time" "github.com/astaxie/beego/orm"
) type DbBrand struct {
BrandID int64 `orm:"auto;pk;column(BrandID);" json:"BrandID"`
BrandName string `orm:"size(100);column(BrandName);"json:"BrandName"`
SortID int64 `orm:"column(SortID)"`
Memo string `orm:"size(500);column(Memo);"`
CreateTime time.Time `orm:"auto_now;type(datetime);column(CreateTime)"` Product []*DbProduct `orm:"reverse(many)"`
} func (b *DbBrand) TableName() string {
return "_Brand"
} func (b *DbBrand) Query() orm.QuerySeter {
return orm.NewOrm().QueryTable(b)
} func (b *DbBrand) Insert() (int64, error) {
return orm.NewOrm().Insert(b)
} func (b *DbBrand) Delete() (int64, error) {
num, err := orm.NewOrm().Delete(b)
if err != nil {
return , err
}
return num, nil
} func (b *DbBrand) Update(fields ...string) error {
_, err := orm.NewOrm().Update(b, fields...)
if err != nil {
return err
}
return nil
} func (b *DbBrand) Read(fields ...string) error {
err := orm.NewOrm().Read(b, fields...)
if err != nil {
return err
}
return nil
}
package models import (
"time" "github.com/astaxie/beego/orm"
) type DbProduct struct {
ProductID int32 `orm:"auto;pk;column(ProductID);" json:"ProductID"`
Name string `orm:"size(100);column(Name)"`
Store int32 `orm:"column(Store);"`
CostPrice float32 `orm:"digits(12);decimals(2);column(CostPrice)"`
SalePrice float32 `orm:"digits(12);decimals(2);column(SalePrice)"`
MarketPrice float32 `orm:"digits(12);decimals(2);column(MarketPrice)"`
Memo string `orm:"size(500);null;column(Memo)"`
Code string `orm:"size(100);column(Code)"`
OpEmployeeID int32 `orm:"column(OpEmployeeID);"`
UseIntegralRule int32 `orm:"column(UseIntegralRule);"`
DeductionIntegralRule int32 `orm:"column(DeductionIntegralRule);"`
Unit string `orm:"size(100);column(Unit)"`
Weight string `orm:"size(100);column(Weight)"`
ReturnIntegralRule int32 `rm:"column(ReturnIntegralRule);"`
ReturnIntegralRuleValue int32 `orm:"column(ReturnIntegralRuleValue);"`
ReturnIntegralValue int32 `orm:"column(ReturnIntegralValue);"`
IsAudit bool `orm:"column(IsAudit)"`
IsHaveInvoice bool `orm:"column(IsHaveInvoice)"`
CreateTime time.Time `orm:"auto_now;type(datetime);column(CreateTime)"`
UpdateTime time.Time `orm:"auto_now;type(datetime);column(UpdateTime)"` Brand *DbBrand `orm:"rel(fk);null;on_delete(do_nothing);"`
// Type *DbProductType `orm:"rel(fk);null;on_delete(do_nothing);"`
// Channel *DbChannel `orm:"rel(fk);null;on_delete(do_nothing);"`
// ProductColor []*DbProductColor `orm:"reverse(many)"`
// ProductSize []*DbProductSize `orm:"reverse(many)"`
// ProductImage []*DbProductImage `orm:"reverse(many)"`
// ProductService []*DbProductService `orm:"reverse(many)"`
// OrderItem []*DbOrderItem `orm:"null;reverse(many)"`
} func (b *DbProduct) TableName() string {
return "_Product"
} func (b *DbProduct) Query() orm.QuerySeter {
return orm.NewOrm().QueryTable(b)
} func (b *DbProduct) Insert() (int64, error) {
return orm.NewOrm().Insert(b)
} func (b *DbProduct) Delete() error {
_, err := orm.NewOrm().Delete(b)
if err != nil {
return err
}
return nil
} func (b *DbProduct) Update(fields ...string) error {
_, err := orm.NewOrm().Update(b, fields...)
if err != nil {
return err
}
return nil
} func (b *DbProduct) Read(fields ...string) error {
err := orm.NewOrm().Read(b, fields...)
if err != nil {
return err
}
return nil
}
package controllers import (
"strconv"
"strings"
"time"
models "wechatSystem/models" "github.com/astaxie/beego"
) type BrandController struct {
baseController
} //品牌列表页
func (this *BrandController) Get() { this.Data["Title"] = "品牌管理"
this.TplName = "Brand/Index.html" var dbBrand models.DbBrand
var list []*models.DbBrand
dbBrand.Query().OrderBy("-sortID").All(&list)
this.Data["list"] = list
} //查询品牌
func (this *BrandController) SeachIndex() { brandName := this.GetString("Keys")
this.TplName = "Brand/Index.html" var dbBrand models.DbBrand
var list []*models.DbBrand //模糊查询
dbBrand.Query().Filter("BrandName__icontains", brandName).All(&list) this.Data["list"] = list } //品牌添加
func (this *BrandController) Add() { this.TplName = "Brand/Details.html"
} //详情
func (this *BrandController) Details() {
brandId, _ := strconv.ParseInt(this.Ctx.Input.Param(":id"), , ) //查询品牌分类集合
var dbBrandList []*models.DbBrand
var dbBrand models.DbBrand dbBrand.Query().All(&dbBrandList)
if brandId <= {
this.Showmsg("编辑数据错误,返回重试...")
} //根据ID 进行查询
dbBrand.BrandID = brandId
err := dbBrand.Read()
if err != nil {
this.Showmsg("该数据不存在...")
}
this.Data["BrandId"] = brandId
this.Data["BrandName"] = dbBrand.BrandName
this.Data["StorId"] = dbBrand.SortID
this.Data["Memo"] = dbBrand.Memo this.TplName = "Brand/Details.html" } //保存品牌
func (this *BrandController) Save() {
var err error
var brandModel models.DbBrand brandID, _ := this.GetInt64("brandId")
brandName := strings.TrimSpace(this.GetString("BrandName"))
sortID, _ := this.GetInt64("SortId")
memo := strings.TrimSpace(this.GetString("Memo"))
SaveRule := this.GetString("SaveRule")
brandModel.BrandName = brandName
brandModel.SortID = sortID
brandModel.Memo = memo brandModel.CreateTime = time.Now() if len(brandName) == {
this.Showmsg("品牌名称不能为空!")
} if brandID > {
//编辑更新
brandModel.BrandID = brandID
err = brandModel.Update("BrandName", "SortID", "Memo", "CreateTime")
} else {
//添加信息
_, err = brandModel.Insert()
} // if err != nil {
// this.Showmsg("保存出错,错误信息:" + err.Error())
// } else {
// this.Showmsg("保存成功!")
// }
if err != nil {
this.Showmsg("保存出错,错误信息:" + err.Error())
}
if SaveRule == "SaveReturnList" {
//this.TplName = "Brand/Index.html"
this.Ctx.Redirect(, "/Brand")
return
} //this.Ctx.Redirect(302, "/Brand/Details/0")
this.TplName = "Brand/Details.html"
} //重新排序
func (this *BrandController) SaveSortId() { var err error
//var modelList []Model
var brands []string
var sortIDs []string
this.Ctx.Input.Bind(&brands, "brandId") this.Ctx.Input.Bind(&sortIDs, "sortId") // brandId, _ := strconv.ParseInt(this.GetString("brandId"), 10, 64) // sortId, _ := strconv.ParseInt(this.GetString("SortID"), 10, 64) this.TplName = "Brand/Index.html" for i := ; i < len(brands); i++ {
for j := ; j < len(sortIDs); j++ {
var dbBrand models.DbBrand
sID, _ := strconv.ParseInt(sortIDs[j], , )
dbBrand.SortID = sID
dbBrand.CreateTime = time.Now()
bID, _ := strconv.ParseInt(brands[i], , ) if dbBrand.Query().Filter("BrandId", bID).Exist() { dbBrand.BrandID = bID err = dbBrand.Update("SortID", "CreateTime") }
} }
if err == nil {
this.Data["json"] = map[string]interface{}{"Isuccess": "true"}
} else {
this.Data["json"] = map[string]interface{}{"Isuccess": "false"}
}
this.ServeJSON() } //删除
func (this *BrandController) Delete() { brandId, _ := strconv.ParseInt(this.GetString("brandId"), , ) this.TplName = "Brand/Index.html" var dbBrand models.DbBrand if dbBrand.Query().Filter("BrandId", brandId).Exist() {
dbBrand.BrandID = brandId
if num, err := dbBrand.Delete(); err == nil {
beego.Info("Brand delete", num) this.Data["json"] = map[string]interface{}{"Isuccess": "true"}
} else {
beego.Error("Brand couldn't be delete. Reason", err)
this.Data["json"] = map[string]interface{}{"Isuccess": "false"}
} this.ServeJSON()
}
}
{{template "layout/basemain.html" .}}
{{define "layout/body.html"}}
<div class="location">
<a class="home"><i></i></a><span>当前页面:金色平台</span>
<i class="arrow"></i>
<span>品牌维护</span>
</div>
<form id="searchForm" action="/Brand/SeachIndex" method="post" >
<!--工具栏-->
<div class="toolbar-wrap">
<div id="floatHead" class="toolbar">
<div class="l-list">
<ul class="icon-list">
<li><a class="add" href="/Brand/Add"><i></i><span>添加</span></a></li>
<li><a id="selectAll" href="javascript:;" class="all"><i></i><span>全选</span></a></li>
<li><a id="saveBrandId" href="javascript:;" class="save"><i></i><span>保存</span></a></li>
<li><a id="delete" href="javascript:;" class="del"><i></i><span>删除</span></a></li>
</ul>
</div>
<div class="r-list">
<input type="text" name="Keys" class="keyword" />
<a id="lbtnSearch" class="btn-search" href="javascript:;" onclick="$('#searchForm').submit();">查询</a>
</div>
</div>
</div>
<!--/工具栏-->
</form>
<table class="ltable" style="margin-top:10px;text-align: center;">
<thead>
<tr>
<td>选择</td>
<td>商品品牌</td>
<td>排序</td>
<td>创建时间</td>
<td>操作</td>
</tr>
</thead>
<tbody>
{{range .list}}
<tr>
<td><input id="BrandId" name="BrandId" type="checkbox" class="checkall" value="{{.BrandID}}"/> </td>
<!--<td>{{.BrandID}}</td>-->
<td>{{.BrandName}}</td>
<td><input id="BrandId{{.BrandID}}" name="SortID" type="text" value="{{.SortID}}" class="sort" /></td>
<td>{{dateformat .CreateTime "2006-01-02 15:04"}}</td>
<td><a href="/Brand/Details/{{.BrandID}}"> 编辑 </a></td>
</tr>
{{end}}
</tbody>
</table>
{{end}}
<script type="text/javascript">
$(function(){
//全选功能 start
$("#selectAll").click(function(){
$(".checkall").each(function(){
this.checked = !this.checked
})
})
//end
//排序功能 start
$("#saveBrandId").click(function(){
if($(":checkbox:checked[name='BrandId']").length == 0){
wxframe.warn("请选择需要操作的项!");
return;
}
var brandIds = [];
var sortIdS = [];
$(":checkbox:checked[name='BrandId']").each(function(){
var SortID = $("#BrandId"+ this.value).val();
<!--brandIds.push({BrandId:this.value,SortID:SortID})-->
brandIds.push(this.value)
sortIdS.push(SortID)
})
$.ajax({
url: '/Brand/SaveSortId',
data: { brandId:brandIds,sortId : sortIdS },
dataType: 'json',
type: 'post',
success: function (json) {
if (json.Isuccess) {
location.href = '/Brand';
}
}
});
})
//删除功能 start
$("#delete").click(function(){
if($(":checkbox:checked[name='BrandId']").length == 0){
wxframe.warn("请选择需要操作的项!");
return;
}
wxframe.confirm("您确定要删除服务名称吗?",function(){
var brandIds = [];
$(":checkbox:checked[name='BrandId']").each(function(){
brandIds.push(this.value)
})
$.ajax({
url : '/Brand/Delete',
data : {brandId:brandIds[0]},
dataType : 'json',
type : 'post',
success : function(json){
if(json.Isuccess){
wxframe.success("删除成功!")
location.href = "/Brand"
}
}
})
})
})
//end
})
</script>
{{template "layout/basemain.html" .}}
{{define "layout/body.html"}}
<div class="location">
<a class="home"><i></i></a><span>当前页面:金色平台</span>
<i class="arrow"></i>
<span>品牌维护</span>
</div>
<div class="content-tab-wrap">
<div id="floatHead" class="content-tab">
<div class="content-tab-ul-wrap">
<ul>
<li><a href="javascript:" class="selected"> 基本信息 </a></li>
</ul>
</div>
</div>
</div>
<form id="form1" method="post" action="/Brand/Save" >
<div class="tab-content">
<dl>
<dt>品牌名称:</dt>
<dd><input type="text" name="BrandName" value="{{.BrandName}}" class="input normal" /> </dd>
</dl>
<dl>
<dt>排序:</dt>
<dd><input type="text" name="SortId" value="{{.StorId}}" class="input normal" /> </dd>
</dl>
<dl>
<dt>备注:</dt>
<dd>
<input type="textarea" name="Memo" class="input" style="width:24%;height:150px;" datatype="*0-300" tip="300个字符以内。" value="300个字符以内。"/>
</dd>
</dl>
</div>
<!--工具栏-->
<div class="page-footer">
<div class="btn-list btn">
<input type="hidden" name="brandId" value="{{.BrandId}}" />
<input type="hidden" name="SaveRule" id="SaveRule" />
<input type="submit" class="btn" value="保存" onclick="$('#SaveRule').val('SaveReturnList')" />
<input type="submit" class="btn" value="保存并继续" onclick="$('#SaveRule').val('SaveAndNext')" />
<input type="button" class="btn yellow" value="返回列表" onclick="location.href = '/Brand';" />
</div>
<div class="clear"></div>
</div>
<!--/工具栏-->
</form>
{{end}}
package routers import (
"wechatSystem/controllers" "github.com/astaxie/beego"
) func init() {
beego.Router("/", &controllers.MainController{}) //品牌维护
beego.Router("/Brand", &controllers.BrandController{})
//添加品牌
beego.Router("/Brand/Add", &controllers.BrandController{}, "*:Add")
//删除品牌
beego.Router("/Brand/Delete", &controllers.BrandController{}, "*:Delete")
//编辑品牌
beego.Router("/Brand/Details/:id([0-9]+)", &controllers.BrandController{}, "*:Details")
//保存品牌
beego.Router("/Brand/Save", &controllers.BrandController{}, "post:Save")
//保存排序
beego.Router("/Brand/SaveSortId", &controllers.BrandController{}, "*:SaveSortId")
//搜索品牌
beego.Router("/Brand/SeachIndex", &controllers.BrandController{}, "*:SeachIndex") }
Golang beego ORM + CRUP 操作详解的更多相关文章
- Django框架 之 ORM查询操作详解
Django框架 之 ORM查询操作详解 浏览目录 一般操作 ForeignKey操作 ManyToManyField 聚合查询 分组查询 F查询和Q查询 事务 Django终端打印SQL语句 在Py ...
- ORM 对表操作 详解
目录 ORM对表操作详解 表结构 ORM对表的 增 删 改 查 基于对象的跨表查询 -- 类似于子查询 基于双下划的跨表查询 -- 连表 join ORM对表的操作示例 正向查 与 反向查 relat ...
- Django之ORM查询操作详解
浏览目录 一般操作 ForeignKey操作 ManyToManyField 聚合查询 分组查询 F查询和Q查询 事务 Django终端打印SQL语句 在Python脚本中调用Django环境 其他操 ...
- python/ORM操作详解
一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...
- golang学习笔记16 beego orm 数据库操作
golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...
- django ORM 外键详解
Django中的外键: 首先,为了方便理解,我们把使用ForeignKey的字段所在的表定义为从表,把ForeignKey中to参数连接的表称为主表. 外键使用的先决条件: 在mysql数据表中,数据 ...
- MongoDB各种查询操作详解
这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下 一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...
- Linux Shell数组常用操作详解
Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...
- [Android新手区] SQLite 操作详解--SQL语法
该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法 :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解 ...
随机推荐
- Python3.5 学习十
多进程: 多线程和多进程的区别: Python多线程不适合CPU操作密集型的任务,适合IO操作密集型的任务(IO操作不占用CPU) Python折中解决多线程不能真正同步运算的方案是:起多个进程,每个 ...
- 名词-JS
1: 构造函数的伪装.(JS继承的时候出现 通过call函数改变this指向的对象) 2: 原型链.(JS继承的时候出现) 3:宿主对象:(有浏览器提供的对象.DOM, BOM - Document ...
- JavaScript基础流程控制(3)
day51 参考:https://www.cnblogs.com/liwenzhou/p/8004649.html for循环 while循环 三元运算 a>b条件成立,选a,不成立选b
- Flask从入门到精通之Flask表单
Flask请求对象包含客户端发出的所有请求信息.其中,request.form 能获取POST 请求中提交的表单数据.尽管Flask 的请求对象提供的信息足够用于处理Web 表单,但有些任务很单调,而 ...
- ubuntu 16.04 安装Tensorflow
ubuntu 16.04 安装Tensorflow(CPU) 安装python ubuntu 16.04自带python2.7,因此可以略过这一步 安装pip sudo apt-get install ...
- webpack快速入门——打包后如何调试
在配置devtool时,webpack给我们提供了四种选项. source-map:在一个单独文件中产生一个完整且功能完全的文件.这个文件具有最好的source map,但是它会减慢打包速度: che ...
- 双向一对一映射@OneToOne
双向一对一的实例我已经上传到GitHub,entrance项目上了,感兴趣的可以下载下来跑跑,这里讲两个在运行过程中遇到的问题. 问题一:上一篇博客的最后我留下了问题.一对一关联查询注解@OneToO ...
- 用 TensorFlow 实现 k-means 聚类代码解析
k-means 是聚类中比较简单的一种.用这个例子说一下感受一下 TensorFlow 的强大功能和语法. 一. TensorFlow 的安装 按照官网上的步骤一步一步来即可,我使用的是 virtua ...
- C#数据库连接方法
一:C# 连接SQL数据库 Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myP ...
- easyui tree扩展tree方法获取目标节点的一级子节点
Easyui tree扩展tree方法获取目标节点的一级子节点 /* 只返回目标节点的第一级子节点,具体的用法和getChildren方法是一样的 */ $.extend($.fn.tree.meth ...