一.需求分析

  • 商品描述表(tb_item_desc)和商品表(tb_item)具有主外键关系,商品的主键也是商品描述的主键,使用工具函数生成的主键也当作商品描述表的主键
  • 商品描述中信息来源于页面中KindEditor的富文本编辑框,里面带有HTML代码直接保存就可以
  • 多表新增时要考虑事务的问题,本功能中使用最原始的方式实现(多个DML,多个事务,效率低),后面多表新增使用标准的事务方式,让同学们有对比,看看哪个方式较好.
  • 只需要在DAO和Service中添加代码即可.

二.代码实现

  • 在/item文件夹下新建desc文件夹,并在desc文件夹下新建TbItemDesc.go编写实体
  1. package desc
  2. //商品描述
  3. type TbItemDesc struct {
  4. ItemId int
  5. ItemDesc string
  6. Created string
  7. Updated string
  8. }
  • 在/item/desc下新建TbItemDescDao.go
  1. package desc
  2. import (
  3. "commons"
  4. "fmt"
  5. )
  6. //新增描述
  7. func insertDescDao(t TbItemDesc ) int{
  8. count,err:=commons.Dml("insert into tb_item_desc values(?,?,?,?)",t.ItemId,t.ItemDesc,t.Created,t.Updated)
  9. if err!=nil{
  10. fmt.Println(err)
  11. return -1
  12. }
  13. return int(count)
  14. }
  • 在/item/desc下新建TbItemDescService.go,并把新增暴露给其他package
  1. package desc
  2. //新增
  3. func Insert(t TbItemDesc) int{
  4. return insertDescDao(t)
  5. }
  • 在/item/TbItemDao.go中添加删除函数
  1. //根据id删除
  2. func delById(id int) int{
  3. count,err:=commons.Dml("delete from tb_item where id=?",id)
  4. if err!=nil{
  5. fmt.Println(err)
  6. return -1
  7. }
  8. return int(count)
  9. }
  • 修改/item/TbItemService.go中新增商品业务代码
  1. //商品新增
  2. func insetService(f url.Values) (e commons.EgoResult){
  3. var t TbItem
  4. cid,_:=strconv.Atoi(f["Cid"][0])
  5. t.Cid =cid
  6. t.Title = f["Title"][0]
  7. t.SellPoint = f["SellPoint"][0]
  8. price,_:=strconv.Atoi(f["Price"][0])
  9. t.Price = price
  10. num,_:=strconv.Atoi(f["Num"][0])
  11. t.Num=num
  12. t.Image = f["Image"][0]
  13. t.Status = 1
  14. date:=time.Now().Format("2006-01-02 15:04:05")
  15. t.Created =date
  16. t.Updated = date
  17. id:=commons.GenId()
  18. t.Id = id
  19. //商品表新增执行
  20. count :=insertItemDao(t)
  21. if count>0{
  22. //商品描述新增
  23. var tbItemDesc desc.TbItemDesc
  24. tbItemDesc.ItemId = id
  25. tbItemDesc.Created = date
  26. tbItemDesc.Updated = date
  27. tbItemDesc.ItemDesc = f["Desc"][0]
  28. countDesc:=desc.Insert(tbItemDesc)
  29. if countDesc>0{
  30. e.Status = 200
  31. }else{
  32. //删除商品中数据
  33. delById(id)
  34. e.Status = 400
  35. }
  36. }
  37. return
  38. }