<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 批量混合SQL操作 ### 批量混合SQL操作API 在了解批量混合SQL操作API前,請先了解一下Sql執行單元的定義 ### Sql執行單元定義 * 當sqls為string時候,則Sql執行單元為該字符串的內容 * 當sqlkeys為string時,則Sql執行單元為所對應的SqlMap配置項或SqlTemplate模板 * 當sqls為[]string或map[string]string時候,則Sql執行單元為相關元素的字符串內容 * 當sqlkeys為[]string或map[string]string時候,則Sql執行單元為以相關元素為key所對應的SqlMap配置項或SqlTemplate模板 * Sql執行單元的具體內容,必須以"select", "insert", "delete", "update", "create", "drop"為起始內容,但后續內容不會繼續做檢查,請合理定義Sql執行單元內容。當執行單元內容不是以上起始內容,則對應索引或key返回的結果集為nil,請注意對返回結果集的nil判斷 * Sql執行單元并非單條Sql語句,當執行insert,delete,update,create,drop操作時候,可以為多條Sql語句,這里需要對應的數據庫的SQL語法支持。如在一個執行單元批量執行多條Sql,返回結果集作為一組所有執行單元的大結果集中的一個元素,這個結果集的數據類型為map[string]interface{},只有2個鍵值對,一個鍵值對的key為LastInsertId,一個鍵值對的key為RowsAffected,請控制好執行粒度。另外,目前不是所有數據庫都支持返回LastInsertId,目前還在設計更通用的API來實現所有數據庫都能支持此功能。 * 當執行select操作時候,執行單元的Sql語句必須為一條,返回結果集作為一組所有執行單元的大結果集中的一個元素 * insert,delete,update,create,drop操作不能和select操作混合定義在同一個執行單元中 * 最后,Sql執行單元基于以上約定,請合理組織 ### Sqls(sqls, parmas...)方法說明: 1. sqls參數 * sqls參數數據類型為interface{}類型,但實際參數類型檢查時,只支持string,[]string和map[string]string三中類型,使用其他類型均會返回參數類型錯誤。 * 使用string類型則為執行單條Sql執行單元(傳送門:[Sql執行單元定義](#SQL)),Execute()方法返回的結果集數據類型為[][]map[string]interface{},只有1個元素。 * 使用[]string則Execute()方法為有序執行多條Sql執行單元,Execute()方法返回的結果集數據類型為[][]map[string]interface{}類型,結果集元素個數與sqls參數的元素個數相同,每個元素索引與返回結果集的索引一一對應。 * 使用map[string]string類型則Execute()方法為無序執行多條Sql執行單元,Execute()方法返回的結果集數據類型為map[string][]map[string]interface{},結果集map的key與返回結果集的key一一對應。 2. parmas...參數 * 可以接收0個參數或則1個參數,當所有執行單元都無需執行參數時候,可以不傳此參數 * parmas參數數據類型為interface{},但實際參數類型檢查時,只支持map[string]interface{},[]map[string]interface{}和map[string]map[string]interface{}三種類型,使用其他類型均會返回參數類型錯誤。 * 使用map[string]interface{}類型時候,sqls參數類型必須為string類型,即map[string]interface{}類型為單條Sql執行單元的參數。 * 使用[]map[string]interface{}類型時候,sqls參數類型可以為string類型,此時只有第一個元素[0]map[string]interface{}會被提取,之后的元素將不起任何作用。同時,sqls參數類型也可以為[]string類型,這種參數組合是最常用的組合形式之一,sqls參數的索引和parmas參數的索引一一對應。當某個索引所對應的Sql執行單元是無參數的時候,請將此索引的值設為nil,即parmas[i] = nil * 使用map[string]map[string]interface{}類型時,sqls參數類型必須為map[string]string類型,這種參數組合是最常用的組合形式之一,sqls參數的key和parmas參數的key一一對應。當某個key所對應的Sql執行單元是無參數的時候,請將此key的值設為nil,即parmas[key] = nil ### SqlMapsClient(sqlkeys, parmas...)方法說明: 1. sqlkeys參數 * sqlkeys參數數據類型為interface{}類型,但實際參數類型檢查時,只支持string,[]string和map[string]string三中類型,使用其他類型均會返回參數類型錯誤。 * 使用string類型則為執行單條Sql執行單元(Sql執行單元定義),即在xorm種緩存的SqlMap中的key所對應的配置項,Execute()方法返回的結果集數據類型為[][]map[string]interface{},只有1個元素。 * 使用[]string則Execute()方法為有序執行多條Sql執行單元,Execute()方法返回的結果集數據類型為[][]map[string]interface{}類型,結果集元素個數與sqls參數的元素個數相同,sqlkeys的索引與返回結果集的索引一一對應,sqlkeys存儲的是每個元素的值是xorm緩存的SqlMap的key * 使用map[string]string類型則Execute()方法為無序執行多條Sql執行單元,Execute()方法返回的結果集數據類型為map[string][]map[string]interface{},sqlkeys的key與返回結果集的key一一對應,sqlkeys存儲的是每個鍵值對的值是xorm緩存的SqlMap的key 2. parmas...參數 * 可以接收0個參數或則1個參數,當所有執行單元都無需執行參數時候,可以不傳此參數 * parmas參數數據類型為interface{},但實際參數類型檢查時,只支持map[string]interface{},[]map[string]interface{}和map[string]map[string]interface{}三種類型,使用其他類型均會返回參數類型錯誤。 * 使用map[string]interface{}類型時候,sqlkeys參數類型必須為string類型,即map[string]interface{}類型為單條Sql執行單元的參數。效果等同SqlMapClient()方法(請注意本方法名為SqlMapsClient)。 * 使用[]map[string]interface{}類型時候,sqlkeys參數類型支持兩種: * 第1種為string類型,此時只有第一個元素[0]map[string]interface{}會被提取,之后的元素將不起任何作用。 * 第2種為[]string類型,這種參數組合是最常用的組合形式之一,sqlkeys參數的索引和parmas參數的索引一一對應。當某個索引所對應的Sql執行單元是無參數的時候,請將此索引的值設為nil,即parmas[i] = nil * 使用map[string]map[string]interface{}類型時,sqlkeys參數類型必須為map[string]string類型,這種參數組合是最常用的組合形式之一,sqlkeys參數的key和parmas參數的key一一對應。當某個key所對應的Sql執行單元是無參數的時候,請將此key的值設為nil,即parmas[key] = nil ### SqlTemplatesClient(sqlkeys, parmas...)方法說明: 1. sqlkeys參數 * sqlkeys參數數據類型為interface{}類型,但實際參數類型檢查時,只支持string,[]string和map[string]string三中類型,使用其他類型均會返回參數類型錯誤。 * 使用string類型則為執行單條Sql執行單元(Sql執行單元定義),即在xorm緩存的SqlTemplate中的key所對應的模板,Execute()方法返回的結果集數據類型為[][]map[string]interface{},只有1個元素。 * 使用[]string則Execute()方法為有序執行多條Sql執行單元,Execute()方法返回的結果集數據類型為[][]map[string]interface{}類型,結果集元素個數與sqls參數的元素個數相同,sqlkeys的索引與返回結果集的索引一一對應,sqlkeys存儲的是每個元素的值是xorm緩存的SqlTemplate的key * 使用map[string]string類型則Execute()方法為無序執行多條Sql執行單元,Execute()方法返回的結果集數據類型為map[string][]map[string]interface{},sqlkeys的key與返回結果集的key一一對應,sqlkeys存儲的是每個鍵值對的值是xorm緩存的SqlTemplate的key 2. parmas...參數 * 可以接收0個參數或則1個參數,當所有執行單元都無需執行參數時候,可以不傳此參數 * parmas參數數據類型為interface{},但實際參數類型檢查時,只支持map[string]interface{},[]map[string]interface{}和map[string]map[string]interface{}三種類型,使用其他類型均會返回參數類型錯誤。 * 使用map[string]interface{}類型時候,sqlkeys參數類型必須為string類型,即map[string]interface{}類型為單條Sql執行單元的參數。效果等同SqlMapClient()方法(請注意本方法名為SqlMapsClient)。 * 使用[]map[string]interface{}類型時候,sqlkeys參數類型支持兩種: * 第1種為string類型,此時只有第一個元素[0]map[string]interface{}會被提取,之后的元素將不起任何作用; * 第2種為[]string類型,這種參數組合是最常用的組合形式之一,sqlkeys參數的索引和parmas參數的索引一一對應。當某個索引所對應的Sql執行單元是無參數的時候,請將此索引的值設為nil,即parmas[i] = nil * 使用map[string]map[string]interface{}類型時,sqlkeys參數類型必須為map[string]string類型,這種參數組合是最常用的組合形式之一,sqlkeys參數的key和parmas參數的key一一對應。當某個key所對應的Sql執行單元是無參數的時候,請將此key的值設為nil,即parmas[key] = nil ### Execute()方法說明: * 一共3個返回值,([][]map[string]interface{}, map[string][]map[string]interface{}, error) * 當以上3個方法的sqls或sqlkeys參數為string或[]string時為有序執行Sql執行單元,故返回結果集為第一個返回值,Slice存儲,第二返回值為nil * 當以上3個方法的sqls或sqlkeys參數為map[string]string時為無序執行Sql執行單元,返回結果集為第二個返回值,map存儲,第一個返回值為nil * 當以上3個方法執行中出現錯誤,則第三個返回值有值,前2個返回值均為nil <a name="SQL"></a> ~~~ //第一種方式,可以從Engine對象輕松進行使用,該方式自動管理事務,注意如果您使用的是mysql,數據庫引擎為innodb事務才有效,myisam引擎是不支持事務的。 engine.Sqls(sqls, parmas...).Execute() engine.SqlMapsClient(sqlkeys, parmas...).Execute() engine.SqlTemplatesClient(sqlkeys, parmas...).Execute() //第2種方式,手動創建Session對象進行調用,該方式需要您手動管理事務 session := engine.NewSession() defer session.Close() // add Begin() before any action tx,err := session.BeginTrans() _, err = tx.Session().Exec("delete from userinfo where username = ?", user2.Username) if err != nil { tx.RollbackTrans() return } //Execuet返回值有3個,分別為slice,map,error類型 results, _, err = tx.Session().Sqls(sqls, parmas...).Execute() if err != nil { tx.RollbackTrans() return } _, results, err = tx.Session().SqlMapsClient(sqlkeys, parmas...).Execute() if err != nil { tx.RollbackTrans() return } results, _, err = tx.Session().SqlTemplatesClient(sqlkeys, parmas...).Execute() if err != nil { tx.RollbackTrans() return } // add Commit() after all actions err = tx.CommitTrans() if err != nil { return } //支持兩種返回結果集 //Slice形式類似如下 /* [ [ { "id": "6", "name": "xorm" }, { "id": "7", "name": "xormplus" }, { "id": "8", "name": "ibatis" } ], [ { "LastInsertId": 0, "RowsAffected": 0 } ], [ { "LastInsertId": 0, "RowsAffected": 0 } ], [ { "LastInsertId": 13, "RowsAffected": 1 } ] ] */ //Map形式類似如下 /* { "deleteUser": [ { "LastInsertId": 0, "RowsAffected": 0 } ], "insertUser": [ { "LastInsertId": 11, "RowsAffected": 1 } ], "updateUser": [ { "LastInsertId": 0, "RowsAffected": 0 } ], "userList": [ { "id": "3", "name": "xorm" }, { "id": "4", "name": "xormplus" }, ] } */ ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看