Skip to the content.

Model : database

为了永久存储数据,在项目中添加数据库部分。且根据MVC设计的原则,model包需要完全独立

连接数据库

Go连接数据库需要两个包,一个是内置的sql包,另一个是所用数据库的驱动包,驱动包采用匿名import的方法。*sql.DB类型负责完成具体的对数据库的操作。初始化方法如下:

func (m *BooklistModel) Init()  {
	
    //1.指定数据库(err只检查语法)
	db, err := sql.Open("mysql",
		"root:1230@tcp(localhost:3306)/booklist")
	if err != nil {
		log.Fatal(err)
	}
	
    //2.尝试连接
	err = db.Ping()
	if err != nil {
		// do something here
		fmt.Println("booklist数据库连接失败")
	} else {
		fmt.Println("booklist数据库连接成功")
	}

	m.DB = db
}

添加与修改数据

QUERY

db.Query,必须有一个rows对象接收返回的结果,且手动关闭连接

步骤如下:

INSERT,UPDATE,DELETE

db.Exec,可以不指定接收对象,连接会自动关闭

代码结构

同样采用面向对象的写法,在model包中定义BooklistModel结构体,每一个具体操作数据库的功能函数作为其方法。逻辑如下

type BooklistModel struct {
	DB *sql.DB
}

func (m *BooklistModel) Init()  {}

func (m *BooklistModel) QueryBooks() []BookInfo{}

func (m *BooklistModel) AddBook(BookName, FinishedTime, Comments string) {}

由于在controller中需要调用操作数据库的函数,而handler函数要实现接口又不能增加接受变量,因此将BooklistMode作为Controller结构体的一个成员变量。在主函数中初始化并赋值

type Controller struct {
	M		model.BooklistModel
	Init     bool
}

参考

GO DATABASE/SQL TUTORIAL

ATE IN GOLANG AND MYSQL DATABASE 面向对象

Introduction

View : html and css

Controller : Go http package

Model : database