Skip to content

Instantly share code, notes, and snippets.

@fkmhrk
Created March 1, 2015 03:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fkmhrk/93e0fba4608b21f58bbc to your computer and use it in GitHub Desktop.
Save fkmhrk/93e0fba4608b21f58bbc to your computer and use it in GitHub Desktop.
model generation
package impl
import (
m "../"
"database/sql"
)
type userDAO struct {
connection *Connection
}
func NewUserDAO(connection *Connection) *userDAO {
return &userDAO{
connection: connection,
}
}
func (d *userDAO) Create(id, userName string) (*m.User, error) {
tr, err := d.connection.Begin()
if err != nil {
return nil, err
}
defer tr.Rollback()
st, err := tr.Prepare("INSERT INTO user(id,user_name) VALUES(?,?)")
if err != nil {
return nil, err
}
defer st.Close()
_, err = st.Exec(id)
if err != nil {
return nil, err
}
tr.Commit()
return &m.User {
Id: id,
UserName: userName,
}, nil
}
func (d *userDAO) Get(id string) (*m.User, error) {
db := d.connection.Connect()
st, err := db.Prepare("SELECT id,user_name FROM user WHERE id=? AND deleted <> 1")
if err != nil {
return nil, err
}
defer st.Close()
rows, err := st.Query(id)
if err != nil {
return nil, err
}
defer rows.Close()
if !rows.Next() {
return nil, nil
}
return d.scan(rows), nil
}
func (d *userDAO) Update(id, userName string) (*m.User, error) {
db := d.connection.Connect()
st, err := db.Prepare("UPDATE user SET id=?, user_name=? WHERE id=? AND deleted <> 1")
if err != nil {
return nil, err
}
defer st.Close()
_, err = st.Exec(id, userName, id)
if err != nil {
return nil, err
}
return &m.User {
Id: id,
UserName: userName,
}, nil
}
func (d *userDAO) Delete(id string) (*m.User, error) {
db := d.connection.Connect()
st, err := db.Prepare("UPDATE user SET deleted=1 WHERE id=? AND deleted <> 1")
if err != nil {
return nil, err
}
defer st.Close()
_, err = st.Exec(id)
if err != nil {
return nil, err
}
return nil, nil
}
func (d *userDAO) scan(rows *sql.Rows) *m.User {
var id string
var userName string
rows.Scan(&id, &userName)
return &m.User {
Id: id,
UserName: userName,
}
}
{
"tables":[
{
"name" : "user",
"fields" : [
{
"name" : "id",
"type" : "varchar(32)"
},
{
"name" : "user_name",
"type" : "text"
}
],
"primary_keys" : [
"id"
]
}
]
}
package model
type UserDAO interface{
Create(id, userName string) (*User, error)
Get(id string) (*User, error)
Update(id, userName string) (*User, error)
Delete(id string) (*User, error)
}
type User struct{
Id string
UserName string
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment