Documentation ¶
Index ¶
- func DeleteStruct(ctx context.Context, entity IEntityStruct) error
- func GenerateStringID() string
- func QueryMap(ctx context.Context, finder *Finder) (map[string]interface{}, error)
- func QueryMapList(ctx context.Context, finder *Finder, page *Page) ([]map[string]interface{}, error)
- func QueryStruct(ctx context.Context, finder *Finder, entity interface{}) error
- func QueryStructList(ctx context.Context, finder *Finder, rowsSlicePtr interface{}, page *Page) error
- func SaveEntityMap(ctx context.Context, entity IEntityMap) error
- func SaveStruct(ctx context.Context, entity IEntityStruct) error
- func Transaction(ctx context.Context, ...) (interface{}, error)
- func UpdateEntityMap(ctx context.Context, entity IEntityMap) error
- func UpdateFinder(ctx context.Context, finder *Finder) error
- func UpdateStruct(ctx context.Context, entity IEntityStruct) error
- type BaseDao
- type DBConnection
- type DataSourceConfig
- type EntityMap
- func (entity *EntityMap) GetDBFieldMap() map[string]interface{}
- func (entity *EntityMap) GetPKColumnName() string
- func (entity *EntityMap) GetTableName() string
- func (entity *EntityMap) Put(key string, value interface{}) map[string]interface{}
- func (entity *EntityMap) Set(key string, value interface{}) map[string]interface{}
- func (entity *EntityMap) SetPKColumnName(pkName string)
- type EntityStruct
- type Finder
- type IEntityMap
- type IEntityStruct
- type Page
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DeleteStruct ¶
func DeleteStruct(ctx context.Context, entity IEntityStruct) error
DeleteStruct 根据主键删除一个对象.必须是*IEntityStruct类型 ctx不能为nil,参照使用zorm.Transaction方法传入ctx.也不要自己构建DBConnection
func QueryMap ¶
QueryMap 根据Finder查询,封装Map bug(springrain)需要测试一下 in 数组, like ,还有查询一个基础类型(例如 string)的功能 context上下文必须传入,如果外部有变量声明,禁止自行获取构建
func QueryMapList ¶
func QueryMapList(ctx context.Context, finder *Finder, page *Page) ([]map[string]interface{}, error)
QueryMapList 根据Finder查询,封装Map数组 根据数据库字段的类型,完成从[]byte到golang类型的映射,理论上其他查询方法都可以调用此方法,但是需要处理sql.Nullxxx等驱动支持的类型 context上下文必须传入,如果外部有变量声明,禁止自行获取构建
func QueryStruct ¶
QueryStruct 不要偷懒调用QueryStructList返回第一条,1.需要构建一个selice,2.调用方传递的对象其他值会被抛弃或者覆盖. 根据Finder和封装为指定的entity类型,entity必须是*struct类型或者基础类型的指针.把查询的数据赋值给entity,所以要求指针类型 context上下文必须传入,如果外部有变量声明,禁止自行获取构建
func QueryStructList ¶
func QueryStructList(ctx context.Context, finder *Finder, rowsSlicePtr interface{}, page *Page) error
QueryStructList 不要偷懒调用QueryMapList,需要处理sql驱动支持的sql.Nullxxx的数据类型,也挺麻烦的 根据Finder和封装为指定的entity类型,entity必须是*[]struct类型,已经初始化好的数组,此方法只Append元素,这样调用方就不需要强制类型转换了 context上下文必须传入,如果外部有变量声明,禁止自行获取构建
func SaveEntityMap ¶
func SaveEntityMap(ctx context.Context, entity IEntityMap) error
SaveEntityMap 保存*IEntityMap对象.使用Map保存数据,需要在数据中封装好包括Id在内的所有数据.不适用于复杂情况 ctx不能为nil,参照使用zorm.Transaction方法传入ctx.也不要自己构建DBConnection
func SaveStruct ¶
func SaveStruct(ctx context.Context, entity IEntityStruct) error
SaveStruct 保存Struct对象,必须是*IEntityStruct类型 bug(chunanuyong) 如果是自增主键,需要返回.需要sql驱动支持 ctx不能为nil,参照使用zorm.Transaction方法传入ctx.也不要自己构建DBConnection
func Transaction ¶
func Transaction(ctx context.Context, doTransaction func(ctx context.Context) (interface{}, error)) (interface{}, error)
Transaction 的示例代码 //匿名函数return的error如果不为nil,事务就会回滚 zorm.Transaction(ctx context.Context,func(ctx context.Context) (interface{}, error) {
//业务代码 //return的error如果不为nil,事务就会回滚 return nil, nil })
事务方法,隔离dbConnection相关的API.必须通过这个方法进行事务处理,统一事务方式 如果入参dbConnection为nil,使用defaultDao开启事务并最后提交.如果入参dbConnection没有事务,调用dbConnection.begin()开启事务并最后提交.如果入参dbConnection有事务,只使用不提交,有开启方提交事务.但是如果遇到错误或者异常,虽然不是事务的开启方,也会回滚事务,让事务尽早回滚. dbConnection的传入,还可以处理多个数据库的情况. 不要去掉匿名函数的context参数,因为如果Transaction的context中没有dbConnection,会新建一个context并放入dbConnection,此时的context指针已经变化,不能直接使用Transaction的context参数 bug(springrain)如果有大神修改了匿名函数内的参数名,例如改为ctx2,这样业务代码实际使用的是Transaction的context参数,如果为没有dbConnection,会抛异常,如果有dbConnection,实际就是一个对象.影响有限.也可以把匿名函数抽到外部 return的error如果不为nil,事务就会回滚
func UpdateEntityMap ¶
func UpdateEntityMap(ctx context.Context, entity IEntityMap) error
UpdateEntityMap 更新*IEntityMap对象.使用Map修改数据,需要在数据中封装好包括Id在内的所有数据.不适用于复杂情况 ctx不能为nil,参照使用zorm.Transaction方法传入ctx.也不要自己构建DBConnection
func UpdateFinder ¶
UpdateFinder 更新Finder语句 ctx不能为nil,参照使用zorm.Transaction方法传入ctx.也不要自己构建DBConnection
func UpdateStruct ¶
func UpdateStruct(ctx context.Context, entity IEntityStruct) error
UpdateStruct 更新struct所有属性,必须是*IEntityStruct类型 ctx不能为nil,参照使用zorm.Transaction方法传入ctx.也不要自己构建DBConnection
Types ¶
type BaseDao ¶
type BaseDao struct {
// contains filtered or unexported fields
}
BaseDao 数据库操作基类,隔离原生操作数据库API入口,所有数据库操作必须通过BaseDao进行.
func NewBaseDao ¶
func NewBaseDao(config *DataSourceConfig) (*BaseDao, error)
NewBaseDao 一个数据库要只执行一次,业务自行控制 第一个执行的数据库为 defaultDao var once sync.Once 创建baseDao
func (*BaseDao) GetDBConnection ¶
func (baseDao *BaseDao) GetDBConnection() (*DBConnection, error)
GetDBConnection 获取一个dbConnection 如果参数dbConnection为nil,使用默认的datasource进行获取dbConnection.如果是多库,就需要使用Dao手动调用GetDBConnection(),获得dbConnection,传给需要的方法
func (*BaseDao) UpdateStructNotNil ¶
func (baseDao *BaseDao) UpdateStructNotNil(ctx context.Context, entity IEntityStruct) error
UpdateStructNotNil 更新struct不为nil的属性,必须是*IEntityStruct类型 ctx不能为nil,参照使用zorm.Transaction方法传入ctx.也不要自己构建DBConnection
type DBConnection ¶
type DBConnection struct {
// contains filtered or unexported fields
}
DBConnection 数据库dbConnection会话,可以原生查询或者事务 方法都应包含 dbConnection DBConnection这样的入参,context上下文必须传入,如果外部有变量声明,禁止自行获取构建
type DataSourceConfig ¶
type DataSourceConfig struct { Host string Port int DBName string UserName string PassWord string //mysql,postgres,oci8,adodb DBType string }
DataSourceConfig 数据库连接池的配置
type EntityMap ¶
type EntityMap struct {
// contains filtered or unexported fields
}
EntityMap IBaseEntity的基础实现,所有的实体类都匿名注入.这样就类似实现继承了,如果接口增加方法,调整这个默认实现即可
func (*EntityMap) GetDBFieldMap ¶
GetDBFieldMap 针对Map类型,记录数据库字段
func (*EntityMap) GetPKColumnName ¶
GetPKColumnName 获取数据库表的主键字段名称.因为要兼容Map,只能是数据库的字段名称.
func (*EntityMap) SetPKColumnName ¶
SetPKColumnName 设置主键的名称
type EntityStruct ¶
type EntityStruct struct { }
EntityStruct IBaseEntity 的基础实现,所有的实体类都匿名注入.这样就类似实现继承了,如果接口增加方法,调整这个默认实现即可
func (*EntityStruct) GetPKColumnName ¶
func (entity *EntityStruct) GetPKColumnName() string
GetPKColumnName 获取数据库表的主键字段名称.因为要兼容Map,只能是数据库的字段名称.
func (*EntityStruct) GetPkSequence ¶
func (entity *EntityStruct) GetPkSequence() string
GetPkSequence Oracle和pgsql没有自增,主键使用序列.优先级高于GetPKColumnName方法
type Finder ¶
type Finder struct { //注入检查,默认true 不允许SQL注入的 ' 单引号 InjectionCheck bool //CountFinder 自定义的查询总条数Finder,使用指针默认为nil.主要是为了在group by等复杂情况下,为了性能,手动编写总条数语句 CountFinder *Finder //是否自动查询总条数,默认true.同时需要Page不为nil,才查询总条数 SelectTotalCount bool // contains filtered or unexported fields }
Finder 查询数据库的载体,所有的sql语句都要通过Finder执行.
func NewDeleteFinder ¶
NewDeleteFinder 根据表名初始化删除的Finder, DELETE FROM tableName
func NewSelectFinder ¶
NewSelectFinder 根据表名初始化查询的Finder NewSelectFinder("tableName") SELECT * FROM tableName NewSelectFinder("tableName", "id,name") SELECT id,name FROM tableName
func NewUpdateFinder ¶
NewUpdateFinder 根据表名初始化更新的Finder, UPDATE tableName SET
func (*Finder) Append ¶
Append 添加SQL和参数的值,第一个参数是语句,后面的参数[可选]是参数的值,顺序要正确. 例如: finder.Append(" and id=? and name=? ",23123,"abc") 只拼接SQL,例如: finder.Append(" and name=123 ")
func (*Finder) AppendFinder ¶
AppendFinder 添加另一个Finder finder.AppendFinder(f)
type IEntityMap ¶
type IEntityMap interface { //获取表名称 GetTableName() string //获取数据库表的主键字段名称.因为要兼容Map,只能是数据库的字段名称. GetPKColumnName() string //针对Map类型,记录数据库字段 GetDBFieldMap() map[string]interface{} }
IEntityMap Entity实体类接口,所有实体类必须实现,否则baseDao无法执行.baseDao函数形参只有Finder和IBaseEntity
type IEntityStruct ¶
type IEntityStruct interface { //获取表名称 GetTableName() string //获取数据库表的主键字段名称.因为要兼容Map,只能是数据库的字段名称. GetPKColumnName() string //兼容主键序列.如果有值,优先级最高 GetPkSequence() string }
IEntityStruct Entity实体类接口,所有实体类必须实现,否则baseDao无法执行.baseDao函数形参只有Finder和IBaseEntity