Documentation ¶
Index ¶
- func ConfLogger(_infoZapLogger, _errorZapLogger *zap.Logger, _showSQL bool)
- type Osm
- func (o *Osm) Begin() (*Tx, error)
- func (o *Osm) Close() error
- func (o *Osm) Delete(id string, params ...interface{}) (int64, error)
- func (o *Osm) DeleteBySQL(sql string, params ...interface{}) (int64, error)
- func (o *Osm) Insert(id string, params ...interface{}) (int64, int64, error)
- func (o *Osm) InsertBySQL(sql string, params ...interface{}) (int64, int64, error)
- func (o *Osm) Select(id string, params ...interface{}) func(containers ...interface{}) (int64, error)
- func (o *Osm) SelectKVS(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
- func (o *Osm) SelectStrings(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
- func (o *Osm) SelectStruct(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
- func (o *Osm) SelectStructs(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
- func (o *Osm) SelectValue(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
- func (o *Osm) SelectValues(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
- func (o *Osm) Update(id string, params ...interface{}) (int64, error)
- func (o *Osm) UpdateBySQL(sql string, params ...interface{}) (int64, error)
- func (o *Osm) UpdateMulti(id string, params ...interface{}) error
- func (o *Osm) UpdateMultiBySQL(sql string, params ...interface{}) error
- type Tx
- func (o *Tx) Commit() error
- func (o *Tx) Delete(id string, params ...interface{}) (int64, error)
- func (o *Tx) DeleteBySQL(sql string, params ...interface{}) (int64, error)
- func (o *Tx) Insert(id string, params ...interface{}) (int64, int64, error)
- func (o *Tx) InsertBySQL(sql string, params ...interface{}) (int64, int64, error)
- func (o *Tx) Rollback() error
- func (o *Tx) Select(id string, params ...interface{}) func(containers ...interface{}) (int64, error)
- func (o *Tx) SelectKVS(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
- func (o *Tx) SelectStrings(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
- func (o *Tx) SelectStruct(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
- func (o *Tx) SelectStructs(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
- func (o *Tx) SelectValue(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
- func (o *Tx) SelectValues(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
- func (o *Tx) Update(id string, params ...interface{}) (int64, error)
- func (o *Tx) UpdateBySQL(sql string, params ...interface{}) (int64, error)
- func (o *Tx) UpdateMulti(id string, params ...interface{}) error
- func (o *Tx) UpdateMultiBySQL(sql string, params ...interface{}) error
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ConfLogger ¶ added in v1.0.9
Types ¶
type Osm ¶
type Osm struct {
// contains filtered or unexported fields
}
Osm 对象,通过Struct、Map、Array、value等对象以及Sql Map来操作数据库。可以开启事务。
func New ¶
New 创建一个新的Osm,这个过程会打开数据库连接。
driverName是数据库驱动名称如"mysql". dataSource是数据库连接信息如"root:root@/51jczj?charset=utf8". xmlPaths是sql xml的路径如[]string{"test.xml"}. params是数据连接的参数,可以是0个1个或2个数字,第一个表示MaxIdleConns,第二个表示MaxOpenConns.
如:
o, err := osm.New("mysql", "root:root@/51jczj?charset=utf8", []string{"test.xml"})
func (*Osm) Delete ¶
Delete 通过id在xml中找到删除sql并执行
xml
<osm> ... <delete id="deleteUser">DELETE FROM user where id = #{Id};</delete> ... </osm>
代码
user := User{Id: 3} count,err := o.Delete("deleteUser", user)
删除id为3的用户数据
func (*Osm) DeleteBySQL ¶ added in v1.0.4
DeleteBySQL 执行删除sql
代码
count, err := o.DeleteBySQL(`DELETE FROM res_user WHERE id in #{Ids};`, []int64{1, 2}) if err != nil { log.Println(err) } log.Println("count:", count)
结果
count: 2
删除id为1和2的用户数据
func (*Osm) Insert ¶
Insert 通过id在xml中找到添加sql并执行
xml
<osm> ... <insert id="insertUser">INSERT INTO user(email) VALUES(#{Email});</insert> ... </osm>
代码
user := User{Email: "test@foxmail.com"} insertId,count,err := o.Insert("insertUser", user)
添加一个用户数据,email为"test@foxmail.com"
func (*Osm) InsertBySQL ¶ added in v1.0.4
InsertBySQL 执行添加sql
代码
insertResUser := ResUser{ Email: "test@foxmail.com", } insertID, count, err := o.InsertBySQL("INSERT INTO res_user (email) VALUES(#{Email});", insertResUser) if err != nil { log.Println(err) } log.Println("insertID:", insertID, "count:", count)
结果
insertID: 3 count: 1
添加一个用户数据,email为"test@foxmail.com"
func (*Osm) Select ¶
func (o *Osm) Select(id string, params ...interface{}) func(containers ...interface{}) (int64, error)
通过id在xml中找到查询sql并执行
查询结果分为8种,分别是:
"value" : 查出的结果为单行,并存入不定长的变量上(...),可以是指针,如var r1,r2 string、var r1,r2 *string "values" : 查出的结果为多行,并存入不定长的变量上(...,每个都为array),元素可以是指针,如var r1,r2 []string、var r1,r2 []*string都允许 "struct" : 查出的结果为单行,并存入struct,可以是指针,如var r User、var r *User "structs" : 查出的结果为多行,并存入struct array,元素可以是指针,如var r []User、var r []*User "kvs" : 查出的结果为多行,每行有两个字段,前者为key,后者为value,存入map (双列),Key、Value可以是指针,如var r map[string]time.Time、var r map[*string]time.Time、var r map[string]*time.Time "strings" : 查出的结果为多行,并存入columns,和datas。columns为[]string,datas为[][]string
xml
<select id="searchArchives" result="struct"> <![CDATA[ SELECT id,email,create_time FROM user WHERE id=#{Id}; ]]> </select>
result上面8种的一种,查询结果会将列名转换为属性名,如"create_time"列,在结果中存放在CreateTime属性中
上面的结果为User{Id: "1", Email: "test@foxmail.com", CreateTime: "2014-06-01 12:32:40"}
func (*Osm) SelectKVS ¶ added in v1.0.4
func (o *Osm) SelectKVS(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
SelectKVS 执行查询sql
查出的结果为多行,每行有两个字段,前者为key,后者为value,存入map (双列),Key、Value可以是指针,如var r map[string]time.Time、var r map[*string]time.Time、var r map[string]*time.Time
代码
var idEmailMap = map[int64]string{} _, err = o.SelectKVS(`SELECT id,email FROM res_user WHERE id in #{Ids};`, []int64{1, 2})(&idEmailMap) if err != nil { log.Println(err) } log.Printf("idEmailMap: %v \n", idEmailMap)
结果
idEmailMap: map[1:test@foxmail.com 2:test@foxmail.com]
func (*Osm) SelectStrings ¶ added in v1.0.8
func (o *Osm) SelectStrings(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
SelectStrings 执行查询sql
查出的结果为多行,查出的结果为多行,并存入columns,和datas。columns为[]string,datas为[][]string
代码
var columns []string var datas [][]string _, err = o.SelectStrings(`SELECT id,email FROM res_user WHERE id in #{Ids};`, []int64{1, 2})(&columns, &datas) if err != nil { log.Println(err) } log.Printf("columns: %v,datas: %v \n", columns, datas)
结果
columns: ["id", "email"] datas: [["1",'test@foxmail.com'],["2","test@foxmail.com"]]
func (*Osm) SelectStruct ¶ added in v1.0.4
func (o *Osm) SelectStruct(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
SelectStruct 执行查询sql
查出的结果为单行,并存入struct,可以是指针,如var r User、var r *User
代码
var users []ResUser _, err = o.SelectStruct(`SELECT id,email,create_time FROM res_user WHERE id=#{Id};`, 1)(&users) if err != nil { log.Println(err) } log.Printf("user: %#v \n", users)
结果
user: ResUser{ID:1, Email:"test@foxmail.com", Mobile:"", Nickname:""}
func (*Osm) SelectStructs ¶ added in v1.0.4
func (o *Osm) SelectStructs(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
SelectStructs 执行查询sql
查出的结果为多行,并存入struct array,元素可以是指针,如var r []User、var r []*User
代码
var users []ResUser _, err = o.SelectStructs(`SELECT id,email,create_time FROM res_user WHERE id=#{Id};`, 1)(&users) if err != nil { log.Println(err) } log.Printf("users: %#v \n", users)
结果
users: []ResUser{ResUser{ID:1, Email:"test@foxmail.com", Mobile:"", Nickname:""}}
func (*Osm) SelectValue ¶ added in v1.0.4
func (o *Osm) SelectValue(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
SelectValue 执行查询sql
查出的结果为单行,并存入不定长的变量上(...),可以是指针,如var r1,r2 string、var r1,r2 *string
代码
var email string _, err = o.SelectValue(`SELECT email FROM res_user WHERE id=#{Id};`, 1)(&email) if err != nil { log.Println(err) } log.Printf("email: %s \n", email)
结果
email: test@foxmail.com
func (*Osm) SelectValues ¶ added in v1.0.4
func (o *Osm) SelectValues(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
SelectValues 执行查询sql
查出的结果为多行,并存入不定长的变量上(...,每个都为array),元素可以是指针,如var r1,r2 []string、var r1,r2 []*string都允许
代码
var emails []string _, err = o.SelectValues(`SELECT email FROM res_user WHERE id in #{Ids};`, []int64{1, 2})(&emails) if err != nil { log.Println(err) } log.Printf("emails: %v \n", emails)
结果
emails: [test@foxmail.com test@foxmail.com]
func (*Osm) Update ¶
Update 通过id在xml中找到更新sql并执行
xml
<osm> ... <update id="updateUserEmail">UPDATE user SET email=#{Email} where id = #{Id};</update> ... </osm>
代码
user := User{Id: 3, Email: "test@foxmail.com"} count,err := o.Update("updateUserEmail", user)
将id为3的用户email更新为"test@foxmail.com"
func (*Osm) UpdateBySQL ¶ added in v1.0.4
UpdateBySQL 执行更新sql
代码
count, err := o.UpdateBySQL(`UPDATE res_user SET email=#{Email} WHERE id=#{ID};`, "test2@foxmail.com", 3) if err != nil { log.Println(err) } log.Println("count:", count)
结果
count: 1
将id为1的用户email更新为"test2@foxmail.com"
func (*Osm) UpdateMulti ¶
UpdateMulti 批量通过id在xml中找到更新sql并执行
xml
<osm> ... <update id="updateUserEmail"> UPDATE user SET email=#{Email} where id = #{Id}; UPDATE user SET email=#{Email} where id = #{Id2}; </update> ... </osm>
代码
user := User{Id: 3, Id2: 4, Email: "test@foxmail.com"} err := o.UpdateMulti("updateUserEmail", user)
将id为3和4的用户email更新为"test@foxmail.com"
func (*Osm) UpdateMultiBySQL ¶ added in v1.0.6
UpdateMultiBySQL 批量执行更新sql
代码
user := User{Id: 3, Id2: 4, Email: "test@foxmail.com"} err := o.UpdateMultiBySQL(` UPDATE user SET email='#{Email}' where id = #{Id}; UPDATE user SET email='#{Email}' where id = #{Id2};`, user)
将id为3和4的用户email更新为"test@foxmail.com"
type Tx ¶
type Tx struct {
// contains filtered or unexported fields
}
Tx 与Osm对象一样,不过是在事务中进行操作
func (*Tx) Delete ¶
Delete 通过id在xml中找到删除sql并执行
xml
<osm> ... <delete id="deleteUser">DELETE FROM user where id = #{Id};</delete> ... </osm>
代码
user := User{Id: 3} count,err := o.Delete("deleteUser", user)
删除id为3的用户数据
func (*Tx) DeleteBySQL ¶ added in v1.0.4
DeleteBySQL 执行删除sql
代码
count, err := o.DeleteBySQL(`DELETE FROM res_user WHERE id in #{Ids};`, []int64{1, 2}) if err != nil { log.Println(err) } log.Println("count:", count)
结果
count: 2
删除id为1和2的用户数据
func (*Tx) Insert ¶
Insert 通过id在xml中找到添加sql并执行
xml
<osm> ... <insert id="insertUser">INSERT INTO user(email) VALUES(#{Email});</insert> ... </osm>
代码
user := User{Email: "test@foxmail.com"} insertId,count,err := o.Insert("insertUser", user)
添加一个用户数据,email为"test@foxmail.com"
func (*Tx) InsertBySQL ¶ added in v1.0.4
InsertBySQL 执行添加sql
代码
insertResUser := ResUser{ Email: "test@foxmail.com", } insertID, count, err := o.InsertBySQL("INSERT INTO res_user (email) VALUES(#{Email});", insertResUser) if err != nil { log.Println(err) } log.Println("insertID:", insertID, "count:", count)
结果
insertID: 3 count: 1
添加一个用户数据,email为"test@foxmail.com"
func (*Tx) Select ¶
func (o *Tx) Select(id string, params ...interface{}) func(containers ...interface{}) (int64, error)
通过id在xml中找到查询sql并执行
查询结果分为8种,分别是:
"value" : 查出的结果为单行,并存入不定长的变量上(...),可以是指针,如var r1,r2 string、var r1,r2 *string "values" : 查出的结果为多行,并存入不定长的变量上(...,每个都为array),元素可以是指针,如var r1,r2 []string、var r1,r2 []*string都允许 "struct" : 查出的结果为单行,并存入struct,可以是指针,如var r User、var r *User "structs" : 查出的结果为多行,并存入struct array,元素可以是指针,如var r []User、var r []*User "kvs" : 查出的结果为多行,每行有两个字段,前者为key,后者为value,存入map (双列),Key、Value可以是指针,如var r map[string]time.Time、var r map[*string]time.Time、var r map[string]*time.Time "strings" : 查出的结果为多行,并存入columns,和datas。columns为[]string,datas为[][]string
xml
<select id="searchArchives" result="struct"> <![CDATA[ SELECT id,email,create_time FROM user WHERE id=#{Id}; ]]> </select>
result上面8种的一种,查询结果会将列名转换为属性名,如"create_time"列,在结果中存放在CreateTime属性中
上面的结果为User{Id: "1", Email: "test@foxmail.com", CreateTime: "2014-06-01 12:32:40"}
func (*Tx) SelectKVS ¶ added in v1.0.4
func (o *Tx) SelectKVS(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
SelectKVS 执行查询sql
查出的结果为多行,每行有两个字段,前者为key,后者为value,存入map (双列),Key、Value可以是指针,如var r map[string]time.Time、var r map[*string]time.Time、var r map[string]*time.Time
代码
var idEmailMap = map[int64]string{} _, err = o.SelectKVS(`SELECT id,email FROM res_user WHERE id in #{Ids};`, []int64{1, 2})(&idEmailMap) if err != nil { log.Println(err) } log.Printf("idEmailMap: %v \n", idEmailMap)
结果
idEmailMap: map[1:test@foxmail.com 2:test@foxmail.com]
func (*Tx) SelectStrings ¶ added in v1.0.8
func (o *Tx) SelectStrings(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
SelectStrings 执行查询sql
查出的结果为多行,查出的结果为多行,并存入columns,和datas。columns为[]string,datas为[][]string
代码
var columns []string var datas [][]string _, err = o.SelectStrings(`SELECT id,email FROM res_user WHERE id in #{Ids};`, []int64{1, 2})(&columns, &datas) if err != nil { log.Println(err) } log.Printf("columns: %v,datas: %v \n", columns, datas)
结果
columns: ["id", "email"] datas: [["1",'test@foxmail.com'],["2","test@foxmail.com"]]
func (*Tx) SelectStruct ¶ added in v1.0.4
func (o *Tx) SelectStruct(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
SelectStruct 执行查询sql
查出的结果为单行,并存入struct,可以是指针,如var r User、var r *User
代码
var users []ResUser _, err = o.SelectStruct(`SELECT id,email,create_time FROM res_user WHERE id=#{Id};`, 1)(&users) if err != nil { log.Println(err) } log.Printf("user: %#v \n", users)
结果
user: ResUser{ID:1, Email:"test@foxmail.com", Mobile:"", Nickname:""}
func (*Tx) SelectStructs ¶ added in v1.0.4
func (o *Tx) SelectStructs(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
SelectStructs 执行查询sql
查出的结果为多行,并存入struct array,元素可以是指针,如var r []User、var r []*User
代码
var users []ResUser _, err = o.SelectStructs(`SELECT id,email,create_time FROM res_user WHERE id=#{Id};`, 1)(&users) if err != nil { log.Println(err) } log.Printf("users: %#v \n", users)
结果
users: []ResUser{ResUser{ID:1, Email:"test@foxmail.com", Mobile:"", Nickname:""}}
func (*Tx) SelectValue ¶ added in v1.0.4
func (o *Tx) SelectValue(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
SelectValue 执行查询sql
查出的结果为单行,并存入不定长的变量上(...),可以是指针,如var r1,r2 string、var r1,r2 *string
代码
var email string _, err = o.SelectValue(`SELECT email FROM res_user WHERE id=#{Id};`, 1)(&email) if err != nil { log.Println(err) } log.Printf("email: %s \n", email)
结果
email: test@foxmail.com
func (*Tx) SelectValues ¶ added in v1.0.4
func (o *Tx) SelectValues(sql string, params ...interface{}) func(containers ...interface{}) (int64, error)
SelectValues 执行查询sql
查出的结果为多行,并存入不定长的变量上(...,每个都为array),元素可以是指针,如var r1,r2 []string、var r1,r2 []*string都允许
代码
var emails []string _, err = o.SelectValues(`SELECT email FROM res_user WHERE id in #{Ids};`, []int64{1, 2})(&emails) if err != nil { log.Println(err) } log.Printf("emails: %v \n", emails)
结果
emails: [test@foxmail.com test@foxmail.com]
func (*Tx) Update ¶
Update 通过id在xml中找到更新sql并执行
xml
<osm> ... <update id="updateUserEmail">UPDATE user SET email=#{Email} where id = #{Id};</update> ... </osm>
代码
user := User{Id: 3, Email: "test@foxmail.com"} count,err := o.Update("updateUserEmail", user)
将id为3的用户email更新为"test@foxmail.com"
func (*Tx) UpdateBySQL ¶ added in v1.0.4
UpdateBySQL 执行更新sql
代码
count, err := o.UpdateBySQL(`UPDATE res_user SET email=#{Email} WHERE id=#{ID};`, "test2@foxmail.com", 3) if err != nil { log.Println(err) } log.Println("count:", count)
结果
count: 1
将id为1的用户email更新为"test2@foxmail.com"
func (*Tx) UpdateMulti ¶
UpdateMulti 批量通过id在xml中找到更新sql并执行
xml
<osm> ... <update id="updateUserEmail"> UPDATE user SET email=#{Email} where id = #{Id}; UPDATE user SET email=#{Email} where id = #{Id2}; </update> ... </osm>
代码
user := User{Id: 3, Id2: 4, Email: "test@foxmail.com"} err := o.UpdateMulti("updateUserEmail", user)
将id为3和4的用户email更新为"test@foxmail.com"
func (*Tx) UpdateMultiBySQL ¶ added in v1.0.6
UpdateMultiBySQL 批量执行更新sql
代码
user := User{Id: 3, Id2: 4, Email: "test@foxmail.com"} err := o.UpdateMultiBySQL(` UPDATE user SET email='#{Email}' where id = #{Id}; UPDATE user SET email='#{Email}' where id = #{Id2};`, user)
将id为3和4的用户email更新为"test@foxmail.com"