现在的位置: 首页 > 综合 > 正文

IBatisNet的ExecuteQueryForMap和QueryForDictionary用法的官方完全详细实例教程

2018年03月19日 ⁄ 综合 ⁄ 共 7063字 ⁄ 字号 评论关闭

 #region QueryForDictionary
        /// <summary>
        /// Test ExecuteQueryForDictionary
        /// </summary>
        [Test]
        public void TestExecuteQueryForDictionary()
        {
            IDictionary<string, Account> map = sqlMap.QueryForDictionary<string, Account>("GetAllAccountsViaResultClass", null, "FirstName");

            Assert.AreEqual(5, map.Count);
            AssertAccount1(map["Joe"]);

            Assert.AreEqual(1, map["Joe"].Id);
            Assert.AreEqual(2, map["Averel"].Id);
            Assert.AreEqual(3, map["William"].Id);
            Assert.AreEqual(4, map["Jack"].Id);
            Assert.AreEqual(5, map["Gilles"].Id);
        }

        /// <summary>
        /// Test ExecuteQueryForDictionary With Cache.
        /// </summary>
        [Test]
        public void TestExecuteQueryQueryForDictionaryWithCache()
        {
            IDictionary<string, Account> map = sqlMap.QueryForDictionary<string, Account>("GetAllAccountsCache", null, "FirstName");

            int firstId = HashCodeProvider.GetIdentityHashCode(map);

            Assert.AreEqual(5, map.Count);
            AssertAccount1(map["Joe"]);

            Assert.AreEqual(1, map["Joe"].Id);
            Assert.AreEqual(2, map["Averel"].Id);
            Assert.AreEqual(3, map["William"].Id);
            Assert.AreEqual(4, map["Jack"].Id);
            Assert.AreEqual(5, map["Gilles"].Id);

            map = sqlMap.QueryForDictionary<string, Account>("GetAllAccountsCache", null, "FirstName");

            int secondId = HashCodeProvider.GetIdentityHashCode(map);

            Assert.AreEqual(firstId, secondId);
        }

        /// <summary>
        /// Test ExecuteQueryForMap : Hashtable.
        /// </summary>
        /// <remarks>
        /// If the keyProperty is an integer, you must acces the map
        /// by map[integer] and not by map["integer"]
        /// </remarks>
        [Test]
        public void TestExecuteQueryForDictionary2()
        {
            IDictionary<string, Order> map = sqlMap.QueryForDictionary<string, Order>("GetAllOrderWithLineItems", null, "PostalCode");

            Assert.AreEqual(11, map.Count);
            Order order = map["T4H 9G4"];

            Assert.AreEqual(2, order.LineItemsIList.Count);
        }

        /// <summary>
        /// Test ExecuteQueryForMap with value property :
        /// "FirstName" as key, "EmailAddress" as value
        /// </summary>
        [Test]
        public void TestExecuteQueryForDictionaryWithValueProperty()
        {
            IDictionary<string, string> map = sqlMap.QueryForDictionary<string, string>("GetAllAccountsViaResultClass", null, "FirstName", "EmailAddress");

            Assert.AreEqual(5, map.Count);

            Assert.AreEqual("Joe.Dalton@somewhere.com", map["Joe"]);
            Assert.AreEqual("Averel.Dalton@somewhere.com", map["Averel"]);
            Assert.IsNull(map["William"]);
            Assert.AreEqual("Jack.Dalton@somewhere.com", map["Jack"]);
            Assert.AreEqual("gilles.bayon@nospam.org", map["Gilles"]);
        }

        #endregion

-----------------------------------------------------------------------------------------------------------------------

#region  Map Tests

        /// <summary>
        /// Test ExecuteQueryForMap : Hashtable.
        /// </summary>
        [Test]
        public void TestExecuteQueryForMap()
        {
            IDictionary map = sqlMap.QueryForMap("GetAllAccountsViaResultClass", null, "FirstName");

            Assert.AreEqual(5, map.Count);
            AssertAccount1(((Account)map["Joe"]));

            Assert.AreEqual(1, ((Account)map["Joe"]).Id);
            Assert.AreEqual(2, ((Account)map["Averel"]).Id);
            Assert.AreEqual(3, ((Account)map["William"]).Id);
            Assert.AreEqual(4, ((Account)map["Jack"]).Id);
            Assert.AreEqual(5, ((Account)map["Gilles"]).Id);
        }

        /// <summary>
        /// Test ExecuteQueryForMap With Cache : Hashtable.
        /// </summary>
        [Test]
        public void TestExecuteQueryForMapWithCache()
        {
            IDictionary map = sqlMap.QueryForMap("GetAllAccountsCache", null, "FirstName");

            int firstId = HashCodeProvider.GetIdentityHashCode(map);

            Assert.AreEqual(5, map.Count);
            AssertAccount1(((Account)map["Joe"]));

            Assert.AreEqual(1, ((Account)map["Joe"]).Id);
            Assert.AreEqual(2, ((Account)map["Averel"]).Id);
            Assert.AreEqual(3, ((Account)map["William"]).Id);
            Assert.AreEqual(4, ((Account)map["Jack"]).Id);
            Assert.AreEqual(5, ((Account)map["Gilles"]).Id);

            map = sqlMap.QueryForMap("GetAllAccountsCache", null, "FirstName");

            int secondId = HashCodeProvider.GetIdentityHashCode(map);

            Assert.AreEqual(firstId, secondId);
        }

        /// <summary>
        /// Test ExecuteQueryForMap : Hashtable.
        /// </summary>
        /// <remarks>
        /// If the keyProperty is an integer, you must acces the map
        /// by map[integer] and not by map["integer"]
        /// </remarks>
        [Test]
        public void TestExecuteQueryForMap2()
        {
            IDictionary map = sqlMap.QueryForMap("GetAllOrderWithLineItems", null, "PostalCode");

            Assert.AreEqual(11, map.Count);
            Order order = ((Order)map["T4H 9G4"]);

            Assert.AreEqual(2, order.LineItemsIList.Count);
        }

        /// <summary>
        /// Test ExecuteQueryForMap with value property :
        /// "FirstName" as key, "EmailAddress" as value
        /// </summary>
        [Test]
        public void TestExecuteQueryForMapWithValueProperty()
        {
            IDictionary map = sqlMap.QueryForMap("GetAllAccountsViaResultClass", null, "FirstName", "EmailAddress");

            Assert.AreEqual(5, map.Count);

            Assert.AreEqual("Joe.Dalton@somewhere.com", map["Joe"]);
            Assert.AreEqual("Averel.Dalton@somewhere.com", map["Averel"]);
            Assert.IsNull(map["William"]);
            Assert.AreEqual("Jack.Dalton@somewhere.com", map["Jack"]);
            Assert.AreEqual("gilles.bayon@nospam.org", map["Gilles"]);
        }

        /// <summary>
        /// Test ExecuteQueryForWithJoined
        /// </remarks>
        [Test]
        public void TestExecuteQueryForWithJoined()
        {
            Order order = sqlMap.QueryForObject("GetOrderJoinWithAccount", 10) as Order;

            Assert.IsNotNull(order.Account);

            order = sqlMap.QueryForObject("GetOrderJoinWithAccount", 11) as Order;

            Assert.IsNull(order.Account);
        }

        /// <summary>
        ///  Better support for nested result maps when using dictionary
        /// </remarks>
        [Test]
        [Category("JIRA-254")]
        public void Better_Support_For_Nested_Result_Maps_When_Using_Dictionary()
        {
            IDictionary order = (IDictionary)sqlMap.QueryForObject("JIRA-254", 10);

            Assert.IsNotNull(order["Account"]);

            order = (IDictionary)sqlMap.QueryForObject("JIRA-254", 11);

            Assert.IsNull(order["Account"]);
        }

        /// <summary>
        /// Test ExecuteQueryFor With Complex Joined
        /// </summary>
        /// <remarks>
        /// A->B->C
        ///  ->E
        ///  ->F
        /// </remarks>
        [Test]
        public void TestExecuteQueryForWithComplexJoined()
        {
            A a = sqlMap.QueryForObject("SelectComplexJoined", null) as A;

            Assert.IsNotNull(a);
            Assert.IsNotNull(a.B);
            Assert.IsNotNull(a.B.C);
            Assert.IsNull(a.B.D);
            Assert.IsNotNull(a.E);
            Assert.IsNull(a.F);
        }
        #endregion

抱歉!评论已关闭.