mybatis动态sql——(六)
0 什么是动态sql
mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。
通过mybatis提供的各种标签方法实现动态拼接sql。
aaarticlea/png;base64,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" alt="" />
-------------------------------if,where--------------------------------------
1.问题描述
用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。
对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。
2. mapper.xml
aaarticlea/png;base64,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" alt="" />
3. 测试代码
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqkAAAGkCAIAAACdMivTAAAgAElEQVR4nO2dv28jt7r35/4Bt77/w6mDAGca3+Lt3trlgRHAmPoW2xoKDrBAumgLAQZO78YH2MJY1THgIljcxVZxoyYusskbdwHSZt5iRhr+fMihRhJH/HxA7Eoih3zI4Txf/pJVtQAAAFAS1akNAAAAgKOC9gMAAJQF2g8AAFAWaD8AAEBZoP0AAABlgfYDAACUBdoPAABQFmg/AABAWaD9AAAAZYH2AwAAlAXaDwAAUBZp2v/lbnV1/fhlZBQAAACcniTtf769WNw+jY2K4GJxFRMlJBsb60wckyYyNiZxfNUAAAD2J0X7n+69M3sj6mJx5Qu+zH1RQT2OKct5la+sGLN3KYXqyMEwY1RbAQAAJDBe+18frhc3d69RUT7dtYU8Rhoj5dPAJ6v2h3Z6X1bBGvnMkMcKMYsQAAAAezJa+18eby7uP0VGxWu/M8OgrhuJ4wcHtgYbn0RqufyJHRUcWNiWo/0AADAtY7X/09vF1dvn2KjINX9Z+33T9OB6vvG5kdhpg7AqYHzoK8u5pOE0UlX3yAEKAADA/ozU/pGn/DKf9/uKSC4uOTHaDwAAR2OU9o/+al+89kfK9p7zfuHCUeOMsQQ3CAQj0X4AAJiWMdo/5pRfxyRr/kKCUWXJAxF7zV/OKqZesm3BmqL9AABwCEZo/9P9le+Uny8qft4vFx0z7w9mKC8SyCv2kYnjP0f7AQDgVMRr/7hTfh0x2h85p3cmjlm6D877hVhjSSBo8z7zfudig5AnAABAGrHa//J4c7F6eBkZdQjt9ymoUymd6/nOBQM1jV1o0Ax5HWJUBX1RAAAAkxCp/Sl/wN+38O7UV5ngvN8YBDinzsLgQ17w32fNXxglBMcK+wwmAAAAfPA7fgAAAGWB9gMAAJQF2g8AAFAWaD8AAEBZoP0AAABlgfYDAACUxTjt//yv6y3/+nwgiwAAAOCQxGv/rx++VRT/87/6N79++Pba5tsPv+5n1y5/AAAAmJRY7be1+PO/dIX/9cO3+0u+UB4AAABMQaT2m0Lff6aqM9oPAAAwB6K0/9cP33ZCPOz3f/vhV2M84NN+5YyAoeb6dkEf59xDmG5MAQAAUDpR2t/P8Ldz8f7/CO3Xzwh4Tgz4imTeDwAAcABitP/XD99+++HXndZvRT685m99pCr6539J3xZA+wEAAA5DvPbvhFyZ/ge0X13ud637K+v75ooB2g8AAHAYYrS/m/Ar033XtN+n/VEC/uuHb6/9KwQAAAAwHSPW/PtZ+rcfPncvDGkO7/fLRdjfGET8AQAApmfMWT8Zzzl/89z+NiPjc/tKNQHn/AEAAKZi3Hf8AAAAYO7E/20fZfL964d/MREHAACYJ/F/z189tM8aPAAAwFzhN3wBAADKAu0HAAAoC7QfAACgLNB+AACAskD7ASJYN1WzNj6ol5tTmQMAsA9of6msm6pKV691UxlamAv71cufp5XlZlnn2gZFc4gO4GezrKvqmAUCTMNBtf+Xx/pyUb15dD0Vr8s3i+qyD/X7VzvF+p036piEzfh4X10uqnfPUblNrZm+DNdNpWM6p6m035bAzbI+nCsMZp5Qr8BNcSp/zIVOPt5Xl4vmo/6h9KTkQrBHHdUSf7MfU/v9XQMgc/LV/j7BqbU/woxstf+Ak9J8tT8Bsa1E9z5+7t8NJeeq/Xksc2RjyUF7OsBBOZn292zerzIQ+P1A+89Y+0PtOLad0f79ycYStB/mS6T2d77p3XPnuSrVTxluSxXCbdT6/cq8aotL+0NLAl0RfVgtf5FN73NTvK3xyXNz6SxONkOLjdD+7b6gf9VUXVPVPZt+bR8XyFDwj0pBRoru/Jo33lj1jdN+p/GBKvfn6IboIVJwt/56Jbah3IzRKTqsDnOpdMLtk7K0n6/+wvv1kIPa552997mxO+Qvj7WRYAj3MULqq2jXiOYNV1NqzRzT5339MKLPx3UAxYhAnxdB+2G+jNL+S5faBbXfedWWsdq/2Q0jYrXfmperBksWCmYYrjNG+3s8DlQXUP1deHczbd7vSNF7wP5TbbXbkPjYeb/fjFCVBw+txYXdravItDaMcu6x/j9C+/Ww7XK99jfvlNhA731dvrHG2cM5A7v3Rmu/hi7WfSNY3WHdePRU6AB6P3RmGTif4erYellqD/X0+SDZLEAAjGak9uuu6n7dRmm/46otwpq/K6p3W+aSaYDdzKlt9UXXfhljJ9v9ikLAwn784axyCLe3sPRDTeZ1nkKGtqe2HZrHRRoeXfGJbvcb1n6v5xerrESqadO1f3wbTqr927KENf9dN9N6lDHd7x6B1fIXqfeu36kvVstfuk6r5hDbYwfLRaHrukFjSqe/daQO4O9tEZbY0WIXHZe3mgzdhzkzSvvNdcjV8peoNX/HVVvGaX/qtqiS1XOj5GA54igLzav2135rSmU4FmW90nVcf9J5v9MPClOv4H6/23ixyoLxadrvNSNQ3HG13z2a9J42FXrv5v2qurxfb2W+fv+6/UQpzlhFCFoe6lGuAZb/IqkDuLTf6Dtjtd+4RUOaNO3f5Yv+w0xJ0351fqxF6VMK4aotKdo/et7fDpL/8V7NM23er3/rbzst21f7o3yItlopXjqt9kszMSsfcWM4vBkgRyZrv9uM0BXT7fdvkydqv2NvS+q9H++ry9Xy/X1/2qY7SeDQ+BFrAOF5f71cu8aI478fmf+838oGYGbssd/fi1/wKIB7F9O/Ze7MUJ+pO3ZMQ3RrnrWy+J9Sr84M7bDhuP1+z1QhegZheRvflRNrv+rEtzNo9wq9UBXNeKnKB9X++DaMyS3tnL97v3+k9gd7b/1mVb9/HZL1GToevZgv2gRuiqql5qqP84YJra4XZY0fAk9L3H6/Z40J7YdCSNV+TXEHLVwtP/bfCAhdlaj9rXXcL3YNwNhS9VRtyE00Q7FhtfzFdazai3reWPUb5hlm9XCbuG/vznDUYmuUHxyuq5ebzbI2UwY2KxzG+6oclJnKlalQr8Q23GU74ff7jZ6/l/a3/t6rnYwxdg3MRy/yG7ZW+ypib3Ub9QO99WP6vFGUZ6xsZih0ADPWL/ZoPxRC4n4/QDGkrVtDOnNpV7Qf5gvaDxDC+TUBTnodjLlo/8ivBAJkBNoPEMbY42jbds3v+B2M2Wg/v+UDs4Xf8QMAACgLtB8AAKAs0H4AAICyQPsBAADKAu0HAAAoC7QfAACgLNB+AACAskD7AQAAygLtBwAAKAu0HwAAoCzQfgAAgLJA+wEAAMoC7QcAACgLtB8AAKAs0H4AAICyQPsBAADKAu0HAAAoC7QfAACgLNB+AACAskD7AQAAygLtBwAAKAu0HwAAoCzQfgAAgLJA+wEAYAzrpmrWxgf1cnMqcyCBM9L+dVNt0bvlyYzJ9GGgoQ7K+qeq+qELGTTvT1X1Q73889R2wIk4xPO1bhxZbpZ1Dv4EoslU+zfLulIY06XWjSv9HhkmMQNJo6EOyu+NS/s3y4+7kcExBgcTar8ypunCBNmuf6qqn4rSi/k/X07l38Wg/rMhR+1fN/s8FI4OuF+G5woNdVAc2r9ufpix1B1CpwvT/jN4vvzK3zL3nxcZar/Yu+Iut7aiznJmuSc01EGxtf/3ZtbL72j/vpzB8xWa2jP1nw8Zan+3KubvQMp2tWvVzO59YzJ0XemM80aJu+naVYob6E7KJGzECxbSUPujL9HrKmWsgTe/65fa2v/nsrYy8WWo5yaY4Y0Sjx1oV9U/K837Q738c934MowzXslQqfgP6k6BsfdhbyL4LGzXP1X1z5v298ao3ebn2qjp+qeq+hgjtYmdzfM4+K+a//MVlnZpJ3Hm455zI0Ptb5Vua/YWY1HJ1dGcnS8yQ/2d0NGTngF9xW+zrAdzevv6yOj5gd8MGspVKYWY9vWr3Wb5UY1aNzHa339YVT/YmqRn+OeyVjIURDc8bw5uPfy5rAdx7VW/L1pfqBDK2vxcD9X/vdHGLsbbKPsFC7eDjL4B1XZbN+Y4xluuVlZkZ9P6vPA4iF103s/XZlmHHhx3ErQ/Q/LU/o7d2HTXZ8x+HC1pvgytnqpeLezOhTfuLDPsvTClcCN17MqZ1wwaagrWP3mO45mCGq39Hbt58G4E8Oey1rcDVFH0miFG+cyw58ebn+utJUZFtLfmWT/vlFq9arP8aC0DGPZb2i9aaM7mfVHq5wJjOpvyXnocIrroXJ+vZO2HDMlZ+zuUYanVa0dKmpWhc0ZodnZpoO6fQzofOSPhkCZd0pxm0FBTsfm5tlekLXEaqf0d6nR2WMF2L+A7zQhGOc1wiOKQJqT9vjUGbVVf3bMITL692u+1MGjGsKcQMekf1dmUabD0OER30fk9X2j/OZG/9qtCtud0NpyhfI27T7ujjj6dtZbuaCg1lclY/7T5uR7Edc95/zbLYb06nNhlRkzUtPN+p+jqa/L6VcY6vEnivF88dtCfBoja6U+d90v9Lr6Lzu/5St3vhwzJX/u1VS1lA2o73B0taVqG0d9KEcazzqi4bTa1XvtOZzUzaKip0ZblFUnbTnlHa7+2EW4cIIg0IyIqbr/fM00fof3G1sDurTBYaV0yH7IwdMThz2X9Q9P85Jz0d2NAx5w3qrNpm9/C4xDdRef4fIUeOE9874MYFOREhtpvztL03jzE9udRtU0x7yKcMOUz/tqG/jS6rxKi/GZYsf5nLFLSBDNoqP0xzqLrAjas0vcH41X5NFbvlaNzwt/GMY++a8MC91VClN8MK9Yn9vFr/sq+Q1X/vDbW29VYsdZe+9XcQscbuwydnUI/yGZ9LndC6zrf4+DvoufwfGkjIBP/AAbxz48MtX8ELDBFQkMdlMgj5XAEAqcLx8BT48Kv/lJ7hb7fCEcH7S8CGuqgoP254NlESIOnxo3zywXypsW6sdc54LSg/UVAQx0UtP/k7PYOJuzmPDU+Nsva3gsQTiEw5c+QeWs/AAAAjAXtBwAAKAu0HwAAoCzQfgAAgLJA+wEAAMoC7QcAACgLtB8AAKAs0H4AAICyQPsBAADKAu0HAAAoC7QfAACgLNB+AACAskD7AQAAygLtBwAAKAu0HwAAoCzQfgAAgLJA+wEAAMoC7QcAACgLtB8AAKAs0H4AAICyQPsBAADKAu0HAAAoC7QfAACgLNB+AACAsshf+7/cra6uH7+MjIJSeLq/urj/NH2+z7cXC3oXAJwn2Wv/8+3F4vYpOupicWUndH7o/vz14Xpx9fbZ+OTm7jXO2nF8eru4ulg9vPRvv9ytrryVzQy76XyNfGjStV/oWu1e2h/fFHLKyHy6ZKdq/z3ZmS3X4mJxZYfInIVPAIold+1/uvf6XzvK5z52n+9chtePHFP7Xx+uF1cXu8yNt3ljNPJYvzwhh9L+VIS6240jD1VHaX98+qywjVdfqA+sL1kwZyO343dRgAzJW/sF3bWinC7VHg0IybbZHlP7b+8eb7oRzMvjzdvnT29z0n7BV8oCVqD2OyemQY1J036hrHlJWsIwyH608++iABmStfa/PN743LoRJcz125C/0BxHSPtfHm+US3TleL4dolSzn28vVg8v3Qr/4upil//rw/Xi9un14fr+U9t+uVvdPrW69qsZDlsD/YLH073DDCEqxUJXexotNpkObUdCfWV7U2+fWtdNeb7dLZB02q/cF3+Vt22o38Q+DGtIyiV2O/g6gKDTvhr72irYmILI9QiN6W+W9uhdy66UUVn1RbB3HbyLApwROWv/p7cu5+uLcj7SF64RgHqJ8SKg/f6Z4svjjRL15W6leMDeLfaZDCk77e9Uvx8BKNrffzLUd5dh73/7t1pZQlSKha62st/GvA7TbXmsHl52L5S7/HRvSlRMlYU23NZamPe7up//kqD2C/3T+SImT28ysTEz6VpObfbVVG6oYLNM00UBzoiMtX+PU34+7RemAv2VYe13DkesbxyoFiqTVC3DfkrUvjzeXK9u3j63wnDHVDuPhvmjUiyMnGtOM6naNctwC5TWUC3UV2KE1jCIT9m2rV/73TcoshF8b53DU0H7jc5sppcbU+eEXUuWYbmOwRym76IAZ0S22j/6q31B7ReSDQT3+/sTeVcX2iHwYUlTCar7c2nMVvu3CwCt7qC7Y/9KkBy0tgDuikqy0LNp4my6GJ2TXG1Aroabbmz3CK0htKFc67ZtvWLp7gBRc/SYea3vWuGq8dqfRddqgw9j3Jr/hF0UoBxy1f4xp/w6Rmm/f/hveXyf83p9uB68v7A9EaH9A1/uVl0+X+5W4ir36MlZkoViA6qfpHlejeBUddg51u6+PB/1taFc67a1SncbPMh/vPYLHXX3Wp6eOru3lkZqzFy6lq8pfAnkTybpogDlkKn2C4e3fVGqqNsftqLnNfM3vnPvtkRbfnDukfd43N/L441T+68fv7g3Td0O+tNbRYGEqAQLO5zCI0i7oPF7aX83MLq/NW6Hv8pSG25LFNQ9pP16B3AKtlNyWpf87DPvd7wIan/GXcv3QhgPTdhFAQohT+0fd8qvQ1jNs+dJsitRDjNramGcDzf2HczT45p7Hav92tryxerhSVno1szTW0OISrCwFd2o+trw0cFLHERsUXf2y5Wy9mvcbWhfq4mc0Te0Q23uDhCj00ZnCw5D5TyNfLQ85cbMo2s5K2i0jC3SwUucKSO7KEA55Kj9LlEMR0Vqf9Dh5k/CokgyxrDJ/lz9JOi490S4+ycnqP1yVIL2O1/v2eDH7Fqtv9bG4Ea+JKsuCjAXMtT+9D/gb0+tWv8Db4dJa3FAjuaghfGT/Da9yG//2/t6N4UV0pzuta9TRa4HqK/lrOQRg/bJ+IoM/cdK00dN3WitC1vFR7XGYbsowFmQofZDgCNPzo5Hpw2ufy8WV+23/z0If57/ZkVqRQaB1/99ur865+YCKAy0H/Igmxl84uusyKFBZtdoACWB9gMAAJQF2g8AAFAWaD8AAEBZoP0AAHuwbqpmfWojIJ11U9XLzamtODZoP8CkrJtqy+kVYd1UVYl+7XisGxp49myWdQ5P63HJT/vt27BZ1od6ugzXuFnWWXjs/KChxrJuXA3UNdzxBgeZa7+7kWbU2Szlx31NwevyzaK67EP93vm7LhPj7ornTNna33vibebGW9hBQ43G4UvWzZm45slwOtz5dDbHnB/3NQUn0P7y5v5of7Nc1l3um2XdrMvc+glBQ43GljVWhy282j+LzuayHvc1IZv3q+Npf3FT//lpv75qantXV0z/RAzRfeRmWVfNerOsm3X/7BjHPtQM9Y/r5ca5sStEpVgoYvRV4y0NtT+xbeiww3YkoSVZX5VFM7xR4rED7aq4+yVj7GWYd9r61E4/GDKXzuZftMB9RT+VH+938/vqcrX8RW9Mh/ZrSwLV5aJ6p/3ieqNGXd6vo6LU6vkeljMaUvXMTfv9QzP9Ov1d3ycV39LFdQ9P99j0j5Dy8PSfKFls3/b5KY9gTFSKhSKS9tNQejuZxDzKsW3oTOi8eGeJWXyoyp46hmcqwa2HzbKutMdriIxdqLDvq6cm1u3yz/vz72zu+TzuK371vJP2fbV/SGCouyrwQpRxEzy3FO0/AuGHx9mtrNumPmaGE9ul3T4pm2Vd192T4n06zfw8LswflWShSEj7aaj98LahUC3xs57d3G9nebDKnqyEKJ8Z4vMlryTFlaHWRayXr4CZdLZU7eep7On1uPnoTRFe8++WDfqp/1bgtZWANhSllndIb5Idc9P+VvGc5jqWja+zKxft9sr6BGpSa2FSenjc3lOJSrJQJOBIaaj9cbZh1PQ1aKg64Rar7DMjGOU0w+HfhjRp2u+f94fqJWp/5p0tRftbnsodvzzWl4vqzaMgtW7t17YJdEXv8twFNXMhaigP7T8tVj/ydSxrtdLb+4IPj57pbkHNfDr3GjgnWSgS66lLbyiX2xr7iIttmKT9qkxE18ps7GDUMeb9hsiMyEDWfr2E7DqbOxb3FclWjMfN+7WJvvV2IGkN4MgTixOTofYbC0jC5pE2TJM2mTz31DXM233m2tByPzyavUJUgoUyaoa9vtFQh0JrA8XcrfCN1n5tghy7RSpNTZxRDjO0gu1Juyjd3e3VSxlmnW6bhHq5oufT2fzij/uy4+2B6fqduXO/HQfY2/NbqbYn/faaf9RRAMdWgtDOXtc6Y3LU/taYqSmNbswwjM5kLnJpXX/sw6NnVy/XioczJpLmQNkTlWDhiHZq1qoPpqH2R2zDwfy6OxftqbJivBkTeVMEM4QovxlWrF/sfdrvHE34yvLeSit2WMCeSWfTZd5THO5LmJkYx/3C2q+NGFbLj4+1X/sVdReitMo5K3Gm4p+p9meO0NXLWjYKUUhDnVNdxhOxrXAaO6Ki9i9zdjvEhTyV45Bq3on/ubUL2p8CD08khTTUOdVlNJbSC2cSDsppOpu+gzILCnkqRyCPVteNvUhzBqD9KfDwRFJIQ51TXVIw1/xP0xan6mzSeYcsKeSpjMdxaLLnTJf727ZF+wEAAEoD7QcAACgLtB8AAKAs0H4AAICyQPsBAADKAu0HAAAoC7QfAACgLNB+AACAskD7AQAAygLtBwAAKAu0HwAAoCzQfgAAgLJA+wEAAMoC7QcAACgLtB8AAKAs0H4AAICyQPsBAADKAu0HAAAoC7QfAACgLNB+AACAskD7AQAAygLtBwAAKAu0HwAAoCzQfgAAgLLIX/u/3K2urh+/jIwCAAAAN9lr//PtxeL2KTrqYnFlJ3R+mPC5Easmky+RM4+/NibPi8XVLhhpfCHSTrugeKtiEuzfDgAAEEPu2v90753Z21GdePjEVZU6Wf8iRWsS7Y9U4vhsnUMT+3NnejnEpBfqJdwXp8EAAHAg8tb+14frxc3da1SUU4llkRZkMlK6fMkiBxYHXQNInverjZa2KhAzNgoOVgAA4EBkrf0vjzcX959ioiIFzDfpd85rnRmqbyPn/b7RQMwkO4EYKY2JEvIRamSn9FUncv0AAAAmJ2ft//R2cfX2OTZKEHJBmZwvgmOCmHmtL8p3VWRuzvx96hs5zlDT+Oyx0wQbJOZtcq0BACCZjLV/j1N+Pu0XtDAyK2fmMQMFX+ZTzfvHDheEqMjG8Wl/zBjCaQPaDwBwHLLV/tFf7Qtqv5AsPis5sf25MHRQUwrjA2cCoThZtoODjOAnakXslQOfYTGfo/0AAMchV+0fc8qvY5T2j9JIO085BIs2CnLabNvjagtH9SOXHOSy9pn3+zJxrgcEkwEAwORkqv1P91e+U36+KGHB2f5XjfVlZXwiTGoj8/ElVufNY1cXnAmEgvb/JEb75QzjiwYAgEOQp/aPO+XXIcxx7bl4zJRULkIYZPg+kTNRRwBy1Xy2BasQv8Ygz/udzWhXTS4L7QcAOBU5av/L483F6uFlZFSk9qfN+9XPDakLaluM5jnXzJ02+Bg17BC0P76gmPwjXycbAwAACWSo/el/wN85W/Upa8zsNnIGbH8ijDzkt76qRWIPbuSlDmPWHkwTU67TAPUTO5nvEwAAOAQZaj8AAAAcELQfAACgLNB+AACAskD7AQAAygLtBwAAKAu0HwBKYt1Uzdr4oF5uTmUOwElA+wGgGNZNZQv9ZllXxngA4MzJT/vt53CzrA86Ll831Y5TOIB14yjY6aPyhTY8Pjwpuw9jK+1Pu25QfyiK0rVfL83pWw6PwyPNyRXRhqeBJ2X7UaQh4iiBuT+UReHabzmO00wVrVLnJFu04YngSXHZJV8rJT37DgOgMD/t3yzryrfy6FuT7A/zDNF9pONpH5yLEWmmHVuWXS/FjxkuzShLq3Kcv5WNpw0Pplm/PNaXi+rd8/rdorpcVJeL6s2jUtjr8s3288tF/b77Jern5nJRvXu289kmcMOTMuouh6XdnaLL84z3jqBM5qb9/gdYv86xQrl7fndxrmW+oTDBoyWU1cpuS4uzYoyyIvyQ5I5pw6g2VCUrftDQab8ethKuCb8S9bp8YwwR2vbjfXW5aD5KRfGkjLnLEWsi7iRoP5wlc9R+p0uznlvVLRi+ZJs21aOllGVGmXkYUxu373QW7iSk/bThgZz5Vvt7vf94X+3m9N3rncYrb9fvFtXl/bp/sVr+0m7er7oXAjwpY+5ysvYDnCVz0/5tAmsa5pqlaV7G4QZdHm1I6vdoKWUZNdksa8cqbL3cGBk43FHUtmRgGZY2jGjDJDrtNwT+3XPbdnJuzvu7lJv3q+ryft0t/l8u6vev208keFLG3GW0H0AlP+23XYLPR2ireqI3F3OQdhb9Hm10WbvYfo/TcjJ90fr1h5j3q9CGXvZZ83dpvznvV/l4X12ulu/vqzeP6/er6s3j8p0npWkhT4rXQuMuh8d7hxsRAmRHhtpvrAUK373RHm7pOzr+h1pfGdVKNjcglYRpZe0ubRrzL4sNpdcuH+vbMfUjGG8npA2nQ9D+7bTecRSgO9n3ZlW/fx1ODBin/xzwpIy5yyFpl9Y8GBTAuZGj9rfGnEt56vSjy+aMwIjVPZU4/XBnqMQ0a2PtMa2s3YXOFD6R9rWGiNd42vCQflzS/tY+7qcd9e8P9/Vp5EP+W3hSYlpjiPWu3PhHKYg/nCOZav+xsTcVD1rUWW4q0oYlMO+77Ff/0OEDtB/ODLS/Qz9kfDhdOeh684mhDUtg5ndZ3xiIKmvd2AsnAHMH7d8xrBceQld2K59nLVq0YQnM+y47vzjgkXaW++FsQfsBAADKAu0HAAAoC7QfAACgLNB+AACAskD7ASBj1uaf9/EfzQOAWNB+AMgV5xfy+ZInwN7kp/1H/dU1pcgJv7Z0tn8XnIY6DPR5f6bj/xQPAIRB+80/9rFu9vYp5+mYaKiDQZ/3ZZnwJ3gBIILStV/0L/tkem5uiYY6IPT5hBzpPAB7MD/t138axDoF5IwZfg/UiJTcoPwzuE4zzJ8tqSrjr4FqCbTfQWuWXVT/25wHxSAAAB4fSURBVKRRC7EJFpbZUEl0v8rz7nn9bvvTO9qP6mq/yqP9JI/x+3vdb/SJP8xDn7dvZepP7nbFcRgQQGZu2u/3CPp1+rves/SZDHHiwqHkB4M/Pe775VHDws6inbsa/FbUpCbNwvIaSvt1N4c6udn9lq7jZ/fMn+PbRr0u3xhDhP6n/JqPUlH0eetWRix8uJOg/QAxzFH7nR7IcgSqJzGmOru0e/lB+cc/rEihXg57JtF+Gmofttrf6736a7zda+OHet88btp2/W5RXd6v+xer5S/t5v2qeyFAn7duZbL2A0AMc9P+bQJr8uaa22l+0Oc8k/yg1wx/cQ5PtU13CO33WlhiQyXRab8h8O+e27aTc3Pe36XcvF9Vl/frbvH/clG/f91+IkGfR/sBjkt+2m97EdGLhRdGpUgtC/miEXnkMO/3WlhgQ+2z5u/SfnPer/LxvrpcLd/fV28e1+9X1ZvH5TtPStNC+ryWRep+PwDEkKH2G6uVwjxFG/hL8xnBS3S6oPm7/o2aoXiqzJp/eExx7H1271K1P83CAhsqCUH7t9N6x1GA7mTfm1X9/nU4MWCc/nNAn48feMjx/doEgwIAkRy1vzVmaspjrCw6OiZvRqy+VSk4A19pyufNerMcfvZbNsNIoMa6S0qXtEQLy2uoBCTtb+3jftpR//5wX59GPuS/hT5vWGycWHCU5l+TQPwBZDLVfgAoHr/6SyObTvzRfgAJtB8AcsX55QLxuGJ3CWcAAWTQfgDIF3XfoWPt/R0/lvsBYjmS9v+///t/CAQCgbALx/G9AE7QfgKBQDhBOI7vBXCC9hMIBMIJwnF8L4CTY2v/cYoDAMgTnCHkANoPAHA8cIaQA/lr/5e71dX145eRUTARz7cXi6suvA3+dTqAHMi706L9kAPZa//z7cXi9mlk1MXiynnFziPYwXetM6uYfOzLfVaNRc5nqlJ0Pr1NdaOHsSdQkO+ORN44+T6mRe3ZDsHLY/rtVCXuooRC4+t+sB4S6LRH65kGaD/kQO7a/3TvndkLUTFPdbw3j1f0sdofORaRRyey8RNxQO0PNoKQwNcyQXHqXjjTR5YVU8FdKTH5CMSPMoWKj6qXkZsz1ngtPzVpg6f9QPsBvOSt/a8P14ubO+cfQ7eiRvnrNlWT7GsFVQ66/vgxhGB5glyNZxrtn6oRYu6dM2VkK/m00FdQzJgg+UbYRQjm+SoeNM8XNXa4Y6TxNXUOnRbth5LJWvtfHm8u7j9FRo2VkLFPvqBhkRIiK0q87AkuUpCitmu04Vp9u0TZIr1YXFnNnqL9To9vmGonixGAZO2PzCTSmHg9nkTYYiyJb8b4z30931mcM01k5k6m7bQHHm1EgfZDDuSs/YLeuJ/q4GtfevVD1RHE5Cm89vnHeNnzfeisQqDW/uMRL483atTT/TTab5vq036n2ck3zm4W4UY4vX+MRMm3w9eLhHoJ2Ob5elpkKUIbtq5eJ7RPfG/0FSpZNXWnHdvZDgHaDzmQsfaPPOUX45sSXL9PToJl2dcG1cL5Wngru2DTnT3fXrj123SRx9f+4B1Rr4oUknjbfKUI3UO4cc4bEayXbEl8Wc6UvjyTBS9e++MfNLc9U3datB+gI1vtH/3VvlES0oaco5wysqyg+4vxRIJbV/P3JdCiXh+utwYMDfj6cJ2q/UEli9F+Z3oht6DgBW9KvBjHSEKwg8ndadRoIL4zyymFNow0wznE8aXxWRjW/nbiTov2A3Tkqv1jTvl1jH2qIz1+cIYUjJK1KjiGEFQzQT57Xh+uB0+aPu+PFE5hrCO0gE88hJs7Ko3zk3h7hAxtY4JjEWcOQZOMsvZsw5i6O1+npRGKdjfEFJ121J09EGg/5ECm2u96kgNRPncfdM1ClJBnjAcx8gmqTqQBvhdCAgtt7eTp/upi9fCy/fxiMWLNP6hbwerYKWV19DWy87Xc5r5PZHtiLm/9dyHSgLSyfJ/Et2GMPcG+mpAmotwJOu1YL3EI0H7IgTy1f9wpv47JtX+USASLCF7r85XOCZOdzH5rvNbPSxubJp/eKp+ro6une2t8o3jYGI8Zc1/GjFoCUfFtLpQ1iT2+mzhWaGPsGTueGFWdyDGrzyS1ymO1/xCdVijuOKD9kAM5av/L4812RD8iyvawTlerphc+338q1lpuUfb7kbMQO5nsWBMcnLDoMhbbQnsoIzTC/oOtsbo+oT3xOi0zavAUWYpgc8xDNEr71ZxlM/YR44ROi/ZDyWSo/Yl/wD9e44Uxge3rfXIV4yWd8qPm4zQgZrwi2C8Ner7975jXgxuNSe9Hboqxuh6fxr4LY2/cJPbIhQaztTMXNHgq7R9rRnCcZNTX94BI7XOwTov2Q8lkqP1wGDrfF/fvxf2nqJQAB+UcOy3OEHIA7S+DuMnTuNcAB+VMOy3OEHIA7QcAOB44Q8gBtB8A4HjgDCEH0H4AgOOBM4QcQPvhWDzfTvXVQR9P996vgQBkAs4QcgDth6PwfHth/iXmT28X3Z9m6/4um+d3m0zEq6w/8w6QGzhDyAG0vx3+Juji6mIS5RB+gTATAj+NOmlrtG0n2NaM/NPb7R9ce7p3aH9viesPtQpXzaDxoWzydoZQCmj/oCUdT/d7K0f+8uOx0K2me6P86XWVL3crn4p3Y4WHtw7tF64yEwBkSMbOEAqidO33yNJ+zFX7nbPz/fH9BMMg0safan6679KbwzL5qoH82x8KJltnCEWRo/Ybf5rbeKsvSusu/vl2iFI14/n2YvXwovz4x1aKJLVLMMNYML+wfoBES7DTrdeH68XtXRe1enjpaxGlXmNbQ7QwtO/ubN7u59UHDbYySVdip/bHXmiPNrq6cxgQTgvaDzkwN+0PbFTvovSF3160+rNmQ0rxaFiaGUKsvkb95W61lcydfA46KvySYbigVm4N6cLd8Mg4lydnOAyh9GTbCxNXVpK13/27D2g/5ADaDzkwR+33LiBrbl2VN+OQ+evDdfd2L+33a7NTWe2yNDMMe+K1f3xr+CzUL9dHAKEMO8vv7cP8GWk/QA6g/ZADc9P+djtLNpfTh/V8xxq4T+qStd9rhr+4ncAPbAU+Wfu9Zoit4bPQRFmZCGbYegciaD+ACtoPOTBD7d/x+nA9CJ4oll6pU+VtEjP8xR1i3u81I3R53B68soAfyrCrwrNrLJXNfj9ADqD9kAM5ar+6Z/x0bx3cG9Cmd/ZO84AgP91RANd3/NLMaFvvcoJjv7/LMEL7OwPEuWx0a/gt1NGkV8pQHXZ4/oZPkhKnar/ndnv+YADAUUH7IQdy1H5thfn+08vjje+YuqGF5iH2yKN5+oK2olKJZhgJ1Nh+DOE4Kh+l/YZuJbaG10JzYT8qQ8fgyfyjQGO/SOn4MsKIy/3f7+/3R/j6H5wStB9yIE/thzPjQH85wIU0zhv1x4MBDgLOEHIA7YejIH8zYirkvYznW77jBycHZwg5gPbDkVA3TQ6E/3f8+m8tcgAQTg7OEHIA7QcAOB44Q8iB6rc//jpC2HX34xRHIJQc/us//+O//vM/Tm4GwRlwhoQcwrG1n0AgEAj/D+0nnDSg/QQCgXCCcHLvTyg5oP0EAoFwgnBy708oORxJ+wmELMK/m6r6+z8/ax/+T9X+7ev2f//4693X7d+q9v2JbJPM+Pz9V1X1j3/HZsV+P4FAkAPa/9dvf2z++XW1I97DesO/m6pq7k5fr5EW2gLz+fuvLKWcc/jwj6r66ruN8fn/VO3fvvnrtz/+ev+NpP1/q9r9bRAyCZgxplOh/QQCQQ5o/4d/VFX1zYfdJ3ff7C3baH+W4e6bqvr6+x+tz9997RDdv1XtLvy2/cR4YSQzgtMGQfudZihh88+vtY4qBLSfQCDIoXTt9+nBXgHtzzF8+IdnUWcnuv/7Xb/qrsYakj929i8MDowhgmyG9665AtpPIBDkkKP2331jTMS1tz9+9/dhgd5whf9uhhh1hvTvpvr6+x+7Kb62sO9eBE42Q/+wR81fS7Abc3z+/quq+WcX9fX3P/a1iPLyY1tDsjCk/ZO2/F9331Rffbe5+yYiw/iG8pnxR/qATNX+/Zf998vBPXzp7ovazdB+AoEgh7lpv9+D//jd35UofYG0l4RexoaU4hGqNDOE2LtvKtPCTtU+f/9VJ2a7F/5JakxBgdbwXShr/7Qt37fGLqU+CPv8/VeDtcqmjNhQcpV//O7voxZ4hDX/fcJ+mWz++bVjqIr2EwiEsWGO2u8URcstqlplnO7eSdpe2u/X5rHK6rAnXvvHt0aChZO3fGhZxX0jpIYKVDlB+423Mdv5vqxGnQnwB7f22wHtJxAIcpib9v+xnfyZy+nDqrJjXdo3Z03Wfq8Z/uIce+db3UrW/rTWkCwU9/snbPlA82rfvBiWB6SGClR5T+3/zb/fP0rUDzHvtwPaTyAQ5DBD7d+Fz99/NYiQKJZeBVIW3qcxw1/cIeb9aa3hbRDrKnHMtF/LC81r3pS4eX9alb3Bt+a/58r/Ifb77YD2EwgEOeSo/f5dYSNo0yB9u1cPgt/vNqRd3/FLM+O3P7zLCY79/rCkqdfKc77o1pAtHERX+FLZBC0f0H7jxEBEQwWqnDCc+uOv31xf7ZtqwX/0sr+nMfszmEpjov0EAkEOOWq/tn77zYcfv/u775i6oYXmIfbIo3n6crEiD4lmGAnUWOVYu2JetPYbSpzYGgkWHqDlpWUVZXOh+vr7u13LhxpKrnLa9zn31H5fbuODfyjWN9fQzmg/gUCQQ57aTyAcIkhf6fQF53f8kiU8Xful8Wt3PALtJxAIsQHtJ5QU5C9o6MFYk4885Sev5ydqv/z3/P/dVHzHj0AgjAloP6GsoO7dzCV0fwfJFdV/IcIYFqD9BAJBDmg/gXBuAe0nEAhyqFoAAAAoCbQfAACgLNB+AACAskD7AfZj3VTN+tRG5Mu6qerl5tRWAIAG2g+wB+umQtpkNsu6YnQEkBdof+e+t5zCRa0bR8En05R142gF231vlvVh7dss60lvi7NeU2R6auWfQ0MdpPEBIJ3StV8XNacKHx6HgpzOWWah/eaNWDd7N8YBWjQD5Z9HQzH3B8iNwrXf8nOncedWqSecJ2Wg/Qe5CdM36eknszNpqENmCwBJ5Kj9hpcw3mpLnIY38a3e98eNhug+0uGPBncqmzG6LFs+Fc9tOHGpytG+fmxD6en10kLaP+VNERUtoW9I9bIT7CI2y7pqll1Uvdz0ZgodIt3CM28osb26PE+9bwJQHHPTfv/sQZcnx1q+LWSuhchB0wQzEspqZYHX4qwYo6wYT5nWUL4LZe2f9KbIy8NpfUOI9TbvTpQGddKy8C18HK33zqWh1CraDYb2A5yEOWq/029ZnkW9zFDdbdpU7U8py4wy8zAWAdyjDGfhbtIayn4bY8akN2U/SfNr2th6OeyZRPuLayhvHQHgdMxN+1tt5dGYRVuo3tPh61zOc0jqNyOlrF2Bw2TJXvGtl5uwwkRvnCY0lC/74BBkupuSLmleM+R6eZr3ENrvtfCcG0rIAgBOxQy1f4e2/i0qYrz39Ey/W0v7R5e1i+0XRS032BetXz/JIbv4hvLGW5+KTbrXTRH3NZL6hj/pPtNZYW38OL13Lg0VMgEAjk+O2m/ukXsXKDUZlGZBfrejL39qq6uCGWll7S5tGudfgls3VVXXrtGIbydYsU0cDkQ3lD9aX3gW8pjgpvRV0qRL2W4Z3zcC9XI2b1jS3BU4Zu+dSUNJtegXIBgUAByXHLVfWwJt1uryuLJU6RA8I1bXdHFa5c7Qa0ZyWbsLnSl8PlpbEfbF6p8nNpQVax5JcF1yiJviLy2xb4yuV4SkGRvxe1p4xg0ljW0Qf4BTkKf2Hx17+/2gRbHteSZ41B8MQodg0H6AI4P2d+jH1g/nzgML7jA35DPz0Ib6/Lpxrj0AwEFB+3cMK5qHcOW7dVR04sw44prRLHGda+1guR/gZKD9AAAAZYH2AwAAlAXaDwAAUBZoPwAAQFmg/QAAAGWRv/Z/uVtdXT9+GRkFAAAAbrLX/ufbi8XtUyjqYnG1+/hicWWHI1g6nk9vF1cXq4eX/u2Xu9WVt7Knw2g9oTHjo3K9IwAARZC79j/de2f2RtROTmxdUaN8YWK7Y3h9uF5cXSxu7l5db/NAaMzI9M4otB8A4ITkrf2vD9c+LfRH2YMA57Dg9FL0+nC9uL17vOlGMC+PN2+fP73NSfudwyPjE2E4JQyq0H4AgBOStfa/PN5c3H8aG2VoUjtS+5/ur9ScjbcvjzeKsOnr88+3Q5Rq2/PtxerhpVvhX1xdLK7ePrdt22v/0+vD9f2ntv1yt7p9anXtVzMctgb6BY+ne4cZQlSChXYTCQOmGDnPZcUFAKBsctb+T293MhmKMiamwovg9FTSfv/hg5fHGyXqy93KuGpYzB9SdtrfqX4/AlC0v/9kqO8uw17a+7daWUJUgoX2KQq1yvucA0DyAQBOSMbaH3fKb4cs8EYa4XVI+53DEesbB6qFz7faLv5ut6KfbbcvjzfXq5u3z60w3FHNMCxUy/JHpVjobCLfuQp5RJWwSAAAAAciW+0f/dU+nyb5otLW/Lcn8q4uFqoNw2q5Y0fAN4jZav92AaDVtb879q8ESft75fZHpVgoC3lQzmMGByz7AwAcn1y1f/wpP0PgVV2ZbM3fNGMn/8L2RIT2D3y5W3X5fLlbmXv8+837UyyUh0pjtT/4OQAAHIdMtd+ruP4oW/tbS6Vi5v3qvri+fW6gLT/ou+k6HmV9ebxxav/14xf3frxb+z+9VVYghKgEC4VF+2Cs/WFw1wAAAI5Dnto/4pTfDmOW75v3q+mdr7Xl8ftP6hcK9EP+5r6DERs8IShqv7a5cLF6eFLMUI7xXxnnD4SoBAsn1H6f3iP/AADHJ0ftd4liOGqq/f78SVgUSUPelQ9O350Tffb7AQBOTobav9cf8PedL7Oj7ARz4Zja73stj7RGNem8Gh8A4AzIUPshwNG0HwAAzhK0HwAAoCzQfgAAgLJA+wEAAMoC7QcAACgLtB8AAKAs0H4AAICyQPsBAADKAu0HAAAoC7QfAACgLNB+AACAskD7AQAAygLtBwAAKAu0HwAAoCzQfgAAgLJA+wEAAMoC7QcAACgLtB8AAKAs0H4AAICyQPsBAADKAu0HAAAoC7QfAACgLNB+AACAskD7AQAAygLtBwDIiXVTNetTGzFL1k1VLzentmIezFP7101VcY/nwLqptri9GbfyjFDutn5P97vL68bXe07NIXrvuuGBSGezrHPtLLmRpfZvlrXc+xMeubH+w+5DQav2ZbOsq4BSjiIjl+k35Qi3cgYYrdD1hJnVUfK6U2n/kZ/KEziiDJRfHcGdog+uG0fBI9rlDP3DQZin9icQ0yE2y3qX5tjab3b4dbN39532Gdir+pOacn7Pdj/q2zav8XYmHO625Kv9CYjNdHLl1xvYqcKHx9EKozoXc/8o0H41gTn1OpqXOcgzP7Uz7uYDSTmi/SKbZV01y2XddYHNsm7Ws9u4PKDDLUb7T96zLQNOMxixSh3bMCdvyDkwN+0X94+1RfNtvP6hazPSucYa8jLOsmwjtZjenw/R20jpCTO6sfE2rcpagl3EVoH6D3sz7VZJcAauZ/Ewt3JCElrerlpUB+gWnDbLuln30m8cWvJspHeJnA0pRKVYGGgmG7Vru7MaYeEu8qhP5dEdkUexjtcPHQYMrkk2I6nPe8cZhkOUquy+P+6mTHVf58nctL/HpyV+TzV2x1n2Mv7c9OscS2i7soY4ccokPXJJVdYX8jbLemvR7skYHhFXFimb0YKhU95K4QLR6UaVE9nyqR2gWXeq348AFO3vP1GyMITV5U2FqBQLw8hpPaqiy442CtXHMVHaP+1NaY/tiHylHa0fum7hYJRgRlrzSgKvxVkxTvflMdtqE7S/58y0f5TzaSUdC3sZ72XesbzR2Xdp99L+kVUW6uWwx+da3OMlPwnaP/ZWTk9Syyd1gK3Qb5Z1Xddiy1v5mXMvzxRO18/RFoZJ0n5388q2H+updF0XU6/k3puq/ZNVOVX7U5tXjTLzMBYB3KMMZ+HCp6ByRtrfaotB5vXTzvu9ZbmmmF5X7S/Lb7iZx9gqO9p2my5S+48w70+o1wFIavmkDrCb5PcLAK3D4cXk53GYelSShWGm034rp1jtbye9KXbmcfXymxEoLkX7J62y6xYOSeWxWlKPGmo8dHw1/+3AWJ/nxxwDRPvDnJf2azmMOC3ikjPrAlG5w8uOUqRv5cpx0Yg8DjHvHzvhD1k9+a30FWGy55q/18KkDrC2D/btnKFZ/73n/WldNMhR5v1HfSqP7og8Ucfrh8E9+Lj7FVXWLrbfW7TauS9avz523n+s+cGcOVPtt7MIbl1aqqYvVgnXa2VJ5QQee+PRUhbUjAF25LTBY4q+TKgkCmm/ZWM8e2h/wq2ciLSWT+gArv7u2RDS74Gen9ZhhajELqqU73o4J9R+1dztrNYRJRc6xVN5bEfkzu1o/bA1nYO32xhm7NGjNsu6ahrn3zFcN1VV167RiNN9RRTadyYGBW3bZqz97lmaYwan9T9pXqcmcD/Q1sKTVpwSI5dlmq89SkK/85WmfN6sVRuTq+wuSdb+pFU04X4d9lZOQ2LLj+0AovabtV0rZhhtaM6VPVEJFprZ+vyq9XmgA3ins8N1dXf21P08HPipPLoj0kc2rhofsh/azatn6DUjuazdhc4Uvs7m6wBalv6lEcS/I0vtB4AI9llOgSzxqP+RsbffD1rUtBUOnTDgwehA+wHmCtp/huiL2idCVeR1c7jByOT7d+GtpwyGVnmA9gPMFbT/LDnirFtgWFk/hC27PYJpM3cdGtQKPH27ZgPaDwAAUBZoPwAAQFmg/QAAAGWB9gMAAJQF2g8AAFAWaD8AAEBZoP0AAABlgfYDAACUBdoPAABQFmg/AABAWaD9AAAAZYH2AwAAlAXaDwAAUBZoPwAAQFmg/QAAAGWB9gMAAJQF2g8AAFAWaD8AAEBZoP0AAABlgfYDAACUBdoPAABQFmg/AABAWaD9AAAAZYH2Qwasm6pZn7Dwerk5VekAAMcH7S+VdVNVE2neuqm2pCj4ujENCWY4ofFt226WdZrlAADzJFPt3yzrSmECv7xuZuDeNz/X1Q9HsjJBPgNtmNbEtvJHZDi58bPoHgAAE5Gj9q+baeTeyjR7577+qap+ytfIA2i/oPwT37NAZsz9AaAgMtR+UQ72yjV3175Zfqzqn/PdeZ5e+484GQ9mNoceAgAwCRlqf7fe7/LC9txMHyfoOwV9QmP7oEMbWyi7y0Pum2VdNcvu2nq56dNEasOfy/qHqurDcM3m57r6OJQ8vNXSOy700B1Sc2+O9wfYhsghzr+b7ssw3IbbfCMz9F8RihaPAiR2ANGa7nIOAwLAOZGh9reKgzddrrEmoHnrpDmkPpxQ3u1c/uD74yaGm5/r6od6+ec2x4/VTu+NJX1zhf/3RrkwBn1Aolelj+sby7Wi7ZZqJUNrAWa8VMsZbpa1KKpCeb5hwT6LCG5z0H4AOD/y1P6O3YTNUPvtW8NXy8cE/JM6t7ztYgbZjNH+P5e1od+/N9sZvLGkv25+qJrfFVv0VYEITIPU94bOOnTNI9X62oE3/whzghkeQPvHdgCVkDkAAOdCztrfsVnW5rp+926zrE1nrizvulYMbNevLvfra8Vp2m/rt76wrwwLrFn++IN+Lm3e1jts7Nlpf5vQAcyL0X4AKIH8td9arx52sv2O2hgwtJL2uwUhTfst/V43P2zn+sMCQNvvBWg7+gkH/ULz/ty1f4/Dg6HqxXaAMXkCAJwL+Wu/vZK7WdZV08h/Cc6aw3m+w+X9aleE9neLBnop2hf0tc1+JaoT/kpfIdgsPwrzfkdZpkH6Kv8htD/wPbjxGaZv0QerF9sBgln2SwkMCgDgjMhQ+811eN/xK/96v3SVHWueAx/O+kVpvyV3Pw1n9fV5/LpRPt/8XJtK/3szHPI3BwHOsoyWilRVxz6HZ7HAzsPZhvtk6PxCZyBDT1RyBxginQ2G+APA2ZGh9odhY7bjLBapnep/Eit8Ten/0ikAwDyZofbzF9i2nIX2h87nHwG5R60b5yoCAMB8mZP279Zsz0DvJuFMtN/5lY0j4j81ynI/AJwnc9J+AAAA2B+0HwAAoCzQfgAAgLJA+wEAAMoC7QcAACgLtB8AAKAs0H4AAICyQPsBAADKAu0HAAAoC7QfAACgLNB+AACAskD7AQAAygLtBwAAKAu0HwAAoCz+P3zxm25Z/t9GAAAAAElFTkSuQmCC" alt="" />
if也可以多个条件进行组合
fstarttime,fendtime 是传递的map参数的键名 (有时候==后面的常量不用加引号)
<if test="fstarttime != null or fendtime != null and isManage=='1'">
totalMinus desc
</if>
<if test="fstarttime == null and fendtime == null">
sort DESC
</if>
引号问题
//外面是双引号,里面就是单引号 <if test="contactPhone != null and contactPhone!= '' ">
contact_phone = #{contactPhone}
</if> //外面是单引号,里面就是双引号
<if test='contactPhone != null and contactPhone != "" '>
contact_phone = #{contactPhone}
</if> //判断字符串等于某个值是需要使用外面单引号,里面双引号
<if test='contactPhone == "abc" '>
contact_phone = #{contactPhone}
</if>
-----------------------------------------sql片段-------------------------------------------------
1.需求
将上边实现的动态sql判断代码块抽取出来,组成一个sql片段。其它的statement中就可以引用sql片段。
方便程序员进行开发。
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAp8AAAD5CAIAAADuuMkxAAAgAElEQVR4nO3dMZOiPBzHcV7PvQQa38T11zi+hy1utLG3cfaabbdhrG6G1nFnq2fmyrOxuNvmirO9Pk8BQhKSPwEBEb+f2WJXBCKL+ZEQTaQAAMC0RLcuAAAA6BjpDgDA1JDuAABMTfN0//Fz9mW//tFDWQAAQBeap/uf33PSHQCAERPT/c/v+Zef744HSXcAAMbLn+4/fs6+7Off/9mPk+4AAIybO90/vv/nvblOugMAMG6OdH//tp99+e/1j2eNP7/nwlIAAHBrVrr/e/26n1XvtRv+rh3p/nf9ZT8rfr7+/ghaBAAAute87e5OdwAAMBbN77sDAIBxaz5mnm+zAQBg3Jp/3p10BwBg3PieeQAApoZ0BwBgakh3AACmhnQHAGBqSHcAAKaGdAcAYGpIdwAApoZ0BwBgahqk+/u3/ezb3/6KAtTiJASAEFNL99mXfYtFjZ4ZvgvfM2tLErid68vTaEeBOtmIz12chABwc2NM95k+Y6zrp3ia9YtqFajWZuUn127KuWVr475XZG3H+QLDy1Ob5dUSyqUKRLoDwM2NMd0Fvgz2BWHtJULtXgKX+oLcuW7Ic5y/tCuPvh0ry52luiaeqy+wW2M4CQFg/Ix0//j+3+zr7w/zGUV9mv2STQ47+7K3n/njZxkeev374+fs6+8P9Xd9WWrMQONby6NFutdup7pIzkXhKsHZAva1zn0XGfJOA8tTPTjyJUUn6neh/7u18+f9237+/d/7t+JVmHMX6WuFnScA8ODMtvuPn3bFqv69fs3ngc0r37xu/bvW5of9+P6ftuK/169aFZxXzf+9/rGfKawVHlqWpuku7yVkF9VFQnO82GPtn4Hte9/vwi6U/+ULlyO16o/en9/zMpj/rrWcDj61aLsDQBAz3YspX//8nud5/Hd9aW1bFav2Z3kFkNOvEn78LKJdGVuW1hLSqPqg85nFn+Ftbnl38n71Rb7dVYPcKqdv+9enu7C0dpu1Al+XRT+d/KdWefo5nwkAcLLuu/9df/nv9Y/6+P7f+tvP+fd/xSOqrgqu5Jme7pVJ4uvWapTuQizVtt2dz7G2LFwiOFveIfEcWLaQR3zHxFdC4WnVVcJfe+3ryrtnXH3s3lPrz+856Q4AzVnp/u/1637949/r15/v6u/66++PojXfpIFlENPdt1Z4ugfmtPC4sJ1GG7Ta6E3Dslqea7Yjx3/IhVFrnu38e/1q32un7Q4APbHHzL9/28+//ZxfhtGtv/0samR/FWzfHDV4011aKzC0alvq7VLQl+61WVhbnpClXbXdQ1Zv2i4PIaW7NRqjPt3V+7fimuDS9CfdAaCOne7ZkPi8tRRcBRcrVjtdhXQX1gpvc1t/BuarL96EXYSHbkjT3PlL+I5qlzYqeaNDV8u74p/f8+KAfP39/v2/sFOrvIMz//7vQ1sLAOBzZ98z70uy8EiWH/etHtjAbZTT11xG1C6VW+G1zf3anTYtDwBgSHeT7r40lVuuTbudrRVDSiUURvhTeHKvbXd9v0KnwjUJTboDwM3dTboDAIBApDsAAFNDugMAMDWkOwAAU0O6AwAwNaQ7AABTQ7oDADA1pDsAAFPTf7qXU74CAIAhDNF2f/+2nwmTyAEAgE4N1DOfzRYz//5vmN0BAPDIBrzvnk0RxgRfAAD0rFG6l3NxZpN4fgQtqmzBuxQAAHSAtjsAAFMzVLr/+Ml9dwAAhsGYeQAApobPuwMAMDV8Vx0AAFNDugMAMDWkOwAAU0O6AwAwNaQ7AABTQ7oDADA1pDsAAFNDugMAMDXdpPt7spwlx042BQAArkS6AwAwNWK6n9/i1S4N2Mqg6X5+i1fPm/NAewMA4O740/24i1ar+C0oRQduu6e7VbRaLegsAADAxZ3up7dnKz4/DtvZ9vBhPq0I9eyXj8N2tlzOlkv7mcckf3xpXgQck9n28KGO68vS9TFgLa2EgRcfAAA8FEe6p7tVVO36PiazZfJuPHR+3S7nh7PK0r3M4ON6mT+ussuCcsXz61aL6jy/t69n+5nSWuX+3+LVKtrRhAcAwGCl+3nzvIqc99rPh3kWt+fDPM/j4/rS2rZ65rU/yyuAnH6VcEyKaFfGlsW1DMfFahU9v52avGYAAKYtuO2ujuvl9vWsPg7bdZLMD+fiESWle9nrrv3o6e7ObGmtAm13AABcQu+7Z+3p9fH8uk3e1XG9PXwUrfm6dF/78ldMd+9a+VMaDPoDAOChNBgz/54s50kyvwyjWydJMXrOn+7WHXRrF750F9dizDwAAKIGn3fPhsTnTepsQNwlwoV0L1Z0DID3p7u0Fp93BwBAxPfMAwAwNaQ7AABTQ7oDADA1pDsAAFNDugMAMDWkOwAAU0O6AwAwNaQ7AABTM+50PyazpTmdjCafmG65FJ4zTvuF+hSpl5NSqfoUqSfHpD0oPUXq06L/3aTqU6T2DRfxrwQwTvea7vJX1bqlyTKqziN7hbYbfInVp1j9UurX5pINN/ISq09R/tNBMp3U584T7qQ+R+rzptNtuuwX+T+l0aLx/CsBQDeadDe/9baW9WW3QcaU7llcCbHRu5P6bLaJXxZXl0Ro/l63zQFSs/intFtk/Cv5smQAtzaOdG884dv5dXvH6f50aeAKsdG3px4axL823V+sZG3ifafbdHry9zqELLL+lUx0BOC2bp/urtlmL7PULJczaypY7XFp6nfTebNdRkvrZ6u3rdKkXGRNfGusm2d5/QbbHAj1WW+kWn9mt5+LH/M+dHb3N/vRMybLniwgs5+9UkqO4VbF0Hv4nV39zlsAL7F6SvNFxS/WNUez7o1L58FT9WjIr6vyMr0HJFh2YjNJMYCbuHG6p7tVJPVh+iZ677Ltft5stcfPh1gLeLl17l6aLqKKeFOfDla3tvmn0NQ2Bp3p/djZHeu4XFpsRGq4ty2Gd6l541y/P13kenZ18nmj9gt7C9XuDf1SxnHVEpXbNy5ixNcl9BBc1XlwfotXq2hHEx7A0G6Y7ufN8yqqudc+QLqfD3G1HX95Wposo2XiK2KnXf1We3q/MBrovnHj1tOMsV2VO+t5+opj39oVo9hdtY1bjeeiN7vYWvFL1pp3PjlEOYK98lrk19VuSF2Y42K1ip7fGG8HYEi03Y9JpY/deNrpsPX1vXea7lYK2u3gLKojI72U1U8eOZqnji5lMd3bFaPY3d58zBH5xSPVX5R68j05zEtsjhPUXov8utoNqatH2x3AjYz1vntuoHT3ts6Ngh62jrv1nfXM643UrAnuDOBq69wXft5Gp5jubYpRPFLdXSXyi1KVz0+1X2r7wLXLi+pQA6uhr/8pv652Q+pqNB4rCgCduX26KyXUg52m++mwdQW5ed9dUOnD92ywDS1xrZvHFus2sHAjXG6PWned9cuFFsVwPmJtUJnXBEXfePHLr43d7f8UNekVFwbK1b0u/TC+xKGLBIyZB3Bb40h3ZX/eXf8euvzHyN9W6W6Odddz2h4Df6mVrcero+J9G2yhHCwWq18n9blIykprda+v5lta98Uy+iB2/SKgZTGUUuZtgnJpqq2lRXVxi724CnHeoQ9Pd6vzwHGj3fm6rKWVqxlhkRefdwdwa6NJdwAA0BHSHQCAqSHdAQCYGtIdAICpId0BAJga0h0AgKkh3QEAmBrSHQCAqSHdL47JbLmcH9xfQaJ/u47vOeNUTqySer9WFjchTcnTIeH7fUO++rcHV027hwG1O0WFL6FyLqKO6gnpfuFP94/DtnYKeVunE8xcs8GXWPte91bzlHfFOcV7e3Vfxjd25sS4/elz+ruWrAn6xoNT1NDuFBXW8iwaTx01MQ+Z7ua33tZ6TzqbS769K9I9ezvdqipXyjEX7cvi6pLcqN3ZGd8Mfl3ra/q7K9xqvxJO0ap2p6hwTeNZ5K6j+Drnqz1eujeeuavD+eiu0HaDxRRnN6xShaluWnNPSXc/Buud7mX6u+vcar8CTtGqlqdo8ztBvjqKqZiu9Fjp7p5t9pgU99SN+ei0x7Wfmi56e0Ka6gQzaVKdrsa1bp7l9RtscyD806kppaxp481OVH1WFWvG9Ke0nIGteBtLdVyrYujdp85+VGf/ajZpTbao+CWwQm98NKzbh6k9g45q2pVyqRafqvuSj6EwR7A4fbDAOv75yxRKqJSyjmHIfjlF7+sU7UdWYzONcjsPlO7pbhVJXT0DzCVvzTZ7PsRawMut807nkrcvos0/hXaMMcpG77jL7qjF5dJiI1KrqG0xvEvNG3v6bbyi0swqu88btV8EVZ1tjoY+m61noFC1K0WvhR3xo4WikUbiMRSaX21aZtZ90zSshP61JJyid3WK9uj8Fq9W0Y4mfGMPku7nzfMqqrnXPkC6V2aI15+WJkthtvhOu/ods6Nq1/u+gbLW04whMJXblnmNIw4saleMYnfV9p9zDtls78XWil+KKWhlbY7GZcW9fwxwo97pclBxsa/LcZOPYbdD6l7iyku+bEEoobCWgFNU3dUp2rPjYrWKnt8Yb9fIg6S7UqNoux+TSh+78bTTYevre+803a0qxr7216Zy93ZCuiZxd3S3ilVnu2IUu9ubjznq0+KR6i9KPQX2S7c4GlohheFF4b3iVkDqx00+hl0Oqav8K61iuEsoriXgFFV3dYr2iLZ7Ww+U7sp33z03ULp7W+dGQQ9bx936znrm9avy7Ire+Q6vNn1873ZvQ1CsOtsUo3ikurtKfVqUqnx+qv3SsFMx/GjoT34KbB9rFXT1LqnVitL/lI9hl0PqzJds7ctbQnEtAafofZ2ifWk8CBqlx0p3pYTTpdN0Px22riA377sLKn34ng22oVVn1u1Si3VrVri9J7cRrTvBeu3TohjOR6wNKrOmK7ooi1/Km47aunJlGn409G5q561T4es+HISBXXXHUC/kSxy6SChGua/YLkZtCfOhWyHpzil6X6doPxgzf6XHS3dlf95d/x66/MfI31bpbo5113PaHgN/OXmtx6uj4n0bbKEcHROrXyf1uagRKpfne30139K6b+3QRwjr9UjLYiilzF7HcmmqraXVTcX9y6KKt+v6tMnrFZZeHiwzwNX52ajqtFqBjjvBzmNoLa3EkrBIKom5L8cYOuefrrVknKJ3dIr2gs+7X+0h0x0AgEkj3QEAmBrSHQCAqSHdAQCYGtIdAICpId0BAJga0h0AgKkh3QEAmBrSfaTSRRQtxjKHw4M4beLgWfbQt/xblvlnAO2Q7iNFunfvtInzrEgX1dRIFyOIkssFRhRFnfz/7/00Om3i+34BwM2Q7iN179XyGBWZftrElYN72sS3Dvd0YUZ6urj6DLj702gE/xbgPpHuI3X31fIIpYv8kLoO7s1jpJe+g7s/jW7+bwHuFeneD31qVq1yylqP2kKz5rUmdA2olq3a2/rT6OcV9qUvyRu45eLAcGi8r2yF8uBkf/cTRWbhnJPlOmNkwMMrhXuLYjhfsf16qwtOmzhabLJF5Zka9E/p5wQg3YGWSPcenDZxWUcZ3a1mbWlU6NYdxsBGl1Tv+zdh7sv8yxzMFHrfs92+tCMQfIO15ZT2Srvt7uqYd7+C4Q6v+PrbFUNYat4DOG1i498QxZtTGb1hZ2JvJ8AohkMAd4h0751e7/mrabt27CjdnduotIfsImoLA9tO7falLpX6YogqvLjt7jhonoM93OG9Kt39Z4rzNKruyyiGVZ7wdO/tBOizWweYKtK9D5Vu0dp0r1S4HaS7WRDz/kCVp4itXnTovrSn9Fp1Owvh6Khu1HZXnR7e1unuLYZ/d44rtsvzWqe7txjXngB0zQPtkO6d0/o5lVI3bLt7CyVu+/pxWOH7UpfKOw3/4FPrnvmiJM6O+Tb33c2Vrzy89mlzdTH8T+2j7e4txpUnAOEOtES6d851n7U+3fUu20sjKKBO1XcmDoEyakmpoVhXG2d7ESvc4H3pMdD7/VVfx7yr0EYBhzq8lTsExSfi2hVDKIrjvnvZh1ST7sOeAKQ70BLp3gO9Yz5rlgSku94qzUc1BbWYtLbsItXXsm4PWFWkffMgcJSWJ13a7MsRZoGXNK2UMZE6vsrGGyMDH16jZ6JybBoXQ9kn46lmT8HpPtQJQLoDLZHugFLEyEjxbwFaIt0BpRQfvRolvokWaIt0B3KXDmQyfgzMbwYA0BDpDgDA1JDuAABMDekOAMDUkO4AAEwN6Q4AwNSQ7pbz5nkVv52Nx47JbLmcH87OFd6T5WyZ//ieAwDAkEh303EXrXb2x2v96f5x2M6WyfsgRQMAINBDpvv5La5GuFJKqXRXabiL3pPlLDm6tv+8oRkPALiRx0v34y5aeSK8cSqfX7eudFcq3a2i1WrhWAIAQO8eK91Pb89C6J7enqOdueyYFPfU10f349qP0UWf7atRTwAAAJ14oHRPd6tIapofF97gP66tdM952+6X5W/xamVfMQAA0LMHSffz5nnlGC6nc46nuyxrme5KZRcN0fMbX5YNABjMg6S7UjVtd9cH4Uq03QEA9+SB0l0J991rxtO1Sndh+B4AAH16rHRXyh266U5uYTdOd8bMAwBu6PHSXVU/7+4dT6d/D13+Y2S5J935vDsA4KYeMt1Np7dnRr0BAKaEdJfH0wEAcH9IdwAApoZ0BwBgakh3AACmhnQHAGBqSHcAAKaGdAcAYGpI94tjMlsu5wf3R+P0r7XxPWec9gv1KVIvJ6VS9SlST9JEOnhET5H6tOh/N6n6FKl900V9+rW5zX5xp9q9U54i9SlWv4IXdVhjk+4X/nT/OGytudvrpckyqpk8rpm2G3yJ8xMoq8tebvetPS+x+hTlPx1cZJzUZy5WrndSnyP1edP7fvYLbx0nLOrVfjHIZU1zvFPGqN07RVjLs6jDGvsh093+Jtoa70ntNK8VY0r37AS6VR2qVH4e6zXpy+LqktyowTc16UDXfMV52GhRr261XwnvlNFq904RLq08i9w1dqtvN3+8dG88dVvIJO4Vo0n3p8sJdMO67KmH1uGvze0uViZksN7pJ3/zUVjUq1vtV8A7ZbRavlOa35Dy1dgtZiZ7rHR3zwB7TIp76sZEcNrj2k9NF/15s11GS+tnq190pUm5yCyKuW6e5fUbbHMg1Gf9OtT6M7shVPyYvZfZbaHsRz/5spMyew9kP3ullFy5tCqG3m/p7MB0dmy+xOopzRcVv9TXpAMeqOLd/uRaq/rCiypAfl2+YpRLw6t+oYTygaoct5KwSOQ8GrXH8Mk8ber3yzuFd0qx9NYXSVl+hTdNHyjd090q6nwSd+/O3E3t82arPX4+xFrAy61z99J0EVXEm/qq0rpsNP8UGhDGuBK9qyq7hxSXS4uNSM2RtsXwLjVvZek3rop3dfYe/rxR+0VAnTXggSpqseyZRl1v3aLTiiG/Lm8xLqo9Onod54gfXwnFAyW0e9o0ifxHo90xlPBO4Z1yWT38ndKj81u8kucrLz1Iup83z6uo5l77AOl+PsTVdvzlaWmyjJaJr4iddvVbrQRreJFvaKj1NGPQR+V+Yf5WFEf0tCtGsbtqw6v6Diy6uYqtFb9k1/Ky4Q6UPla2suuXuLLByyLhdUnF0PYe3jstlFA+UN0OqROORrtjKOCdoninXFYfzX2c42K1CpnX9EHSXalRtN2PSaWP3Xja6bD19b13mu7We9u+ss7eV5WuyyfhQtU35ESss9oVo9jd3nzMUZEVj1R/UeopoGN2uANVqZjKXVeOobXI97qkYljHJ4y3hHUHqsshdcLRaHcMRbxTFO8U1fid0iPa7j7u++65gdLd2zo3CnrYOu7Wd9Yzr1+HZheqzmqleintO7+9LTCxzmpTjOKR6u4qFVlRqvL5qfZLQDfacAeq0jgo/zQ3qBdDel3t6iOtFi5+9N5LdwnrDlSXQ+r8R0MqobiWgHcK7xQ38Z3Sl4ZDwh8r3ZUSDlCn6X46bF1Bbt53F1T68D0bbEOrR6w7WBbrnqhw80xunFm3YPX3dotiOB+xNqjMeqToeSt++bUxuwov79W9Z4O9HyhhUJJVjLhcJL+u2gHYwvdsXFVCVxNNb14HLhKK4TwagSXMqvWgdOedwjvl8oSbD6ljzHwY8/Pu+vfQ5T9G/rZKd3Osu57T9hj4y7/Lerw6Kt63wRbK8SCx+nVSn4v3W+WCdK+v5lta93UZ+hBW9yDVRsVQSpmdaeXSVFtLezcWN9iKKsOuO1L3jgY7UFYby/GnWYxiAJT0uuoOY6M6Sy6h90BZSyuVvrBIKonraLQ7hjLeKbxT1BjSnc+7AwAARboDADA9pDsAAFNDugMAMDWkOwAAU0O6AwAwNaQ7AABTQ7oDDyxdBE07BODekO4jlS6iaDGWWQswdumi8h3Ep02cfTVxcRqli8r3FJ82se80u6xP+KOQf/V15ZwIONkcpyj6RbqPFOk+dqdN7Kmsqt/+XzzP/LeaFV5ltQZVYbqIzPOlKF2xR+uMsvZmn2uOK4HhFZnhKmELvKk6cdrEDU82pRynKPpGuo8UFdHY+dNdeIL+b7UD9Jp/eaXqLHrc89Z59bLiUh07d1n74vpnv6R0cfX7gTdVN+yzQz7Zyidx9IdFuo8UFdHYXZfulfbPdf/yyr705lS8Sc0O+CLcvR3zN0/3XvoOeFN1wz47xJPNtxJ6R7r3Q+/31E7p7CJXW1it34XeUs9+rGpb+9Po2RT25Wj0lYtDqsMhi9HgGBZH/rSJo8UmK0a5sqefOrD+vybdnet2nD2Xl+SobrN/SNbIcr+EkAL2+V+Wwr1FMcwH7bPDfkL4aeMx9bdD9ewQTjbcDOneg9Mmtu6t6pVW+adRhVmNucCqXqpH/Jsw92X+ZY6bcTQxb10M4Rh6j3xWocabU/GLViypGIL26b5xV4CV++7dVJLu9nmxM//QAWff6jD/ZfGf0K4YwlKzz/i0iS8lEk8bweTfDt6LL2GUJgZHuvfOvtXqftvbb/qO0t25jUrsCHeDw/rThiyG3DByl6pYvaysjD5ybzEErdPdF6q99Btn1W3RXHS3uPTHs8ec5Rjuv3xVuvsPovMIV/dlFMN32kge4u1QdACZD3lPNgyOdO9DpSOwNt0rVUwH6W4WxLw/UOUpYpghiyHuy3PkpepMLIbgmp55ZxXfQ7rnRbh0wDsuIRep0VrV1mvWdled/pdbp7u3GP7dOf5Nl+f1ke7eEt7T28F57tecbBgc6d45u668WdvdWyhx232ke6fF8O/Lf+TrqrM2tVAHo+qqLelOq8NLAYruUqtEp02s9UC7m6/OwteUt4P/suPwXFcM/1MHbrt7S3hHbwfX2VF3smF4pHvnXDfM6tNd73u7XHEHNiD1CwTvWsZ7TWoa1b27s71Yb9shi1FTnTmPvFhNB99pF15K6BPs/3hgp2ob5e6L36qHrnjY2rO3cTbYyVa5Q1B8Iq5dMYSimK9fe1JAuj/k26F6dtSfbBge6d4DvT/MHEQqXtSXfWL5eJeg94bWk5bd8rqsZfXKuSogV99bWLo7u5WHKYZ0DH1Hvq6a9hZDUOn1NFph7iXO/7iR9sKxakS7WNTLWvYbyDvyXLoMfLIZR8T6n7cohrJPkFPNnoLT/cHeDvbZIZ1suB3SHXhMqfAV83Srwo+z4z6Q7sBjSj3fU3dZSAUOp5a3sjA00h2Aw6WDlYxHIb/jwDlxF0h3AACmhnQHAGBqSHcAAKaGdAcAYGpIdwAApoZ0t5w3z6v47Ww8dkxmy+X8cHau8J4sZ8v8x/ccAACGRLqbjrtotbM/yelP94/DdrZM3gcpGgAAgR4y3c9vcTXClVJKpbtKw130nixnydG1/ecNzXgAwI08Xrofd9HKE+GNU/n8unWlu1LpbhWtVgvHEgAAevdY6X56exZC9/T2HO3MZcekuKe+Prof136MLvpsX416AgAA6MQDpXu6W0VS0/y48Ab/cW2le87bdr8sf4tXK/uKAQCAnj1Iup83zyvHcDmdczzdZVnLdFcqu2iInt/4XmYAwGAeJN2Vqmm7uz4IV6LtDgC4Jw+U7kq4714znq5VugvD9wAA6NNjpbtS7tBNd3ILu3G6M2YeAHBDj5fuqvp5d+94Ov176PIfI8s96c7n3QEAN/WQ6W46vT0z6g0AMCWkuzyeDgCA+0O6AwAwNaQ7AABTQ7oDADA1pDsAAFNDugMAMDWkOwAAU3MX6e760NoxmS2X84P7k2z6t9D4ngMAwFTdQ7o7Z2/zp/vHYWtNtQ4AwEMZTbrb3w5bSnfNvm3mPeHbYQEAD20c6S5Mp9Y4lZnZBQDw6G6f7t5ZWYul1uxtx6S4p27M26Y9rv0YXfTZvvjeWQDAtN043dPdKhInVvfN3tZyznWVdQbI870CAHDfbpju583zyjFcTuccT3dZ1jLdlcouGpgXDgAwVWNuu8uzt9F2BwDAbcT33WvG07VKd2H4HgAAU3H7dFfKHbrpTm5hN053xswDAB7EONJdVT/v7h1Pp38PXf5jZLkn3fm8OwDgYYwm3U2nt2dGvQEA0M44010eTwcAACTjTHcAANAe6Q4AwNSQ7gAATA3pDgDA1JDuAABMDekOAMDUtE730A+tvSe1c7oAAIAutU13afY2A+kOAMDAxHS3vx22lO5Cv21m0HTn62YBAJDSXZhOrUmIDtx2Z6oYAADc6e6dlbVYqs3e9nHYzraHD/M5Rahnv3wctvmML9Yzj4l7MphjMtsePtRxfVlqTAfnW0srPF9kCwB4WI50T3erSJxY3Z697ZjMlsm78Zzz63Y5P5xVMaVbnsHH9TJ/XGWXBeWK5txueX5vX8/2M6W1yv2/xSt5AlkAACbLSvfz5nlVM1yuOp7ufJhncXs+zPM8Lidft3rmtT/LK4DLlrWrhGNSRLsytiyuZRZ0sVox0RwA4AE1bbs7Pwh3XC+3r2f1cdiuk2R+OBePKCndy1537UdPd3dmS2uVxaTtDgB4XA3vu7vH02207CQAAAChSURBVJ1ft8v18fy6Td7Vcb09fBSt+bp0X/vyV0x371r5U/zjAQEAeADNxsynO3eD+D1ZzpNkfhlGt06SYvScP92tO+jW3n3pLq7FmHkAABp+3r0ynu4iGxKfN6mzAXGXCBfSvVjRMQDen+7SWnzeHQCARt9Vd3p7ZpAaAADjF57uoV8sDwAAbos54gAAmBrSHQCAqSHdAQCYGtIdAICp+R+i7yb5zT1n1QAAAABJRU5ErkJggg==" alt="" />
2. 定义sql片段
aaarticlea/png;base64,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" alt="" />
3. 引用sql片段
aaarticlea/png;base64,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" alt="" />
------------------------------------------foreach---------------------------------
向sql传递数组或List,mybatis使用foreach解析,如下:
1. 通过pojo传递list
1.1 需求:
传入多个id查询用户信息,用下边两个sql实现:
两种方法:
SELECT * FROM USER WHERE id=1 OR id=10 OR id=16
SELECT * FROM USER WHERE id IN(1,10,16)
1.2 方法:
在pojo中定义list属性ids存储多个用户id,并添加getter/setter方法
aaarticlea/png;base64,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" alt="" />
1.3 mapper.xml
修改上面的sql片段
<!-- 定义sql片段
id:sql片段的唯 一标识 经验:是基于单表来定义sql片段,这样话这个sql片段可重用性才高
在sql片段中不要包括 where
-->
<sql id="query_user_where">
<if test="userCustom!=null">
<if test="userCustom.sex!=null and userCustom.sex!=''">
and user.sex = #{userCustom.sex}
</if>
<if test="userCustom.username!=null and userCustom.username!=''">
and user.username LIKE '%${userCustom.username}%'
</if>
<if test="ids!=null">
<!-- 使用 foreach遍历传入ids
collection:指定输入 对象中集合属性
item:每个遍历生成对象中
open:开始遍历时拼接的串
close:结束遍历时拼接的串
separator:遍历的两个对象中需要拼接的串
-->
<!-- 使用实现下边的sql拼接:
AND (id=1 OR id=10 OR id=16)
-->
<foreach collection="ids" item="user_id" open="AND (" close=")" separator="or">
<!-- 每个遍历需要拼接的串 -->
id=#{user_id}
</foreach> <!-- 实现 “ and id IN(1,10,16)”拼接 -->
<!-- <foreach collection="ids" item="user_id" open="and id IN(" close=")" separator=",">
每个遍历需要拼接的串
#{user_id}
</foreach> --> </if>
</if>
</sql>
引用sql片段:
<!-- 用户信息综合查询
#{userCustom.sex}:取出pojo包装对象中性别值
${userCustom.username}:取出pojo包装对象中用户名称
-->
<select id="findUserList" parameterType="cn.itcast.mybatis.po.UserQueryVo"
resultType="cn.itcast.mybatis.po.UserCustom">
SELECT * FROM USER
<!--
where可以自动去掉条件中的第一个and
-->
<where>
<!-- 引用sql片段 的id,如果refid指定的id不在本mapper文件中,需要前边加namespace -->
<include refid="query_user_where"></include>
<!-- 在这里还要引用其它的sql片段 -->
</where> </select>
1.4 另外一个sql的实现:
aaarticlea/png;base64,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" alt="" />
2. 传递单个List
传递List类型在编写mapper.xml没有区别,唯一不同的是只有一个List参数时它的参数名为list。
2.1 Mapper.xml
<select id="selectUserByList" parameterType="java.util.List" resultType="user">
select * from user
<where>
<!-- 传递List,List中是pojo -->
<if test="list!=null">
<foreach collection="list" item="item" open="and id in("separator=","close=")">
#{item.id}
</foreach>
</if>
</where>
</select>
2.2 Mapper接口
public List<User> selectUserByList(List userlist) throws Exception;
2.3 测试
Public void testselectUserByList()throws Exception{
//获取session
SqlSession session = sqlSessionFactory.openSession();
//获限mapper接口实例
UserMapper userMapper = session.getMapper(UserMapper.class);
//构造查询条件List
List<User> userlist = new ArrayList<User>();
User user = new User();
user.setId(1);
userlist.add(user);
user = new User();
user.setId(2);
userlist.add(user);
//传递userlist列表查询用户列表
List<User>list = userMapper.selectUserByList(userlist);
//关闭session
session.close();
}
3. 传递单个数组(数组中是pojo):
3.1 Mapper.xml
<!-- 传递数组综合查询用户信息 --> <select id="selectUserByArray" parameterType="Object[]" resultType="user"> select * from user <where> <!-- 传递数组 --> <if test="array!=null"> <foreach collection="array" index="index" item="item" open="and id in("separator=","close=")"> #{item.id} </foreach> </if> </where> </select>
sql只接收一个数组参数,这时sql解析参数的名称mybatis固定为array,如果数组是通过一个pojo传递到sql则参数的名称为pojo中的属性名。
index:为数组的下标。
item:为数组每个元素的名称,名称随意定义
open:循环开始
close:循环结束
separator:中间分隔输出
3.2 Mapper接口:
public List<User> selectUserByArray(Object[] userlist) throws Exception;
3.3 测试:
Public void testselectUserByArray()throws Exception{ //获取session SqlSession session = sqlSessionFactory.openSession(); //获限mapper接口实例 UserMapper userMapper = session.getMapper(UserMapper.class); //构造查询条件List Object[] userlist = new Object[2]; User user = new User(); user.setId(1); userlist[0]=user; user = new User(); user.setId(2); userlist[1]=user; //传递user对象查询用户列表 List<User>list = userMapper.selectUserByArray(userlist); //关闭session session.close(); }
4. 传递单个数组(数组中是字符串类型):
4.1 Mapper.xml
<!-- 传递数组综合查询用户信息 --> <select id="selectUserByArray" parameterType="Object[]" resultType="user"> select * from user <where> <!-- 传递数组 --> <if test="array!=null"> <foreach collection="array"index="index"item="item"open="and id in("separator=","close=")"> #{item} </foreach> </if> </where> </select>
如果数组中是简单类型则写为#{item},不用再通过ognl获取对象属性值了。
4.2 Mapper接口:
public List<User> selectUserByArray(Object[] userlist) throws Exception;
4.3 测试:
Public void testselectUserByArray()throws Exception{ //获取session SqlSession session = sqlSessionFactory.openSession(); //获限mapper接口实例 UserMapper userMapper = session.getMapper(UserMapper.class); //构造查询条件List Object[] userlist = new Object[2]; userlist[0]=”1”; userlist[1]=”2”; //传递user对象查询用户列表 List<User>list = userMapper.selectUserByArray(userlist); //关闭session session.close(); }
附一个比较复查的动态SQL:根据不同的查询条件进行查询与排序
<select id="getDepartmentInfoByCondition" resultType="map"
parameterType="map">
SELECT
depart.departmentid,
depart.updepartmentId,
depart.departmentname,
depart.departmenttype,
depart.departprojectnames,
(SELECT
departmentName
FROM
department
WHERE
departmentId = depart.upDepartmentId) AS
upDepartName,
depart.employeeName,
depart.sort,
depart.phone,
(SELECT
COUNT(employeeId)
FROM
employee_in
WHERE departmentId =
depart.departmentId) AS perNum,
IFNULL((SELECT SUM(empInMinusNum) FROM
emplyin_breakrules, employee_in
WHERE
emplyin_breakrules.empInEmployeeId = employee_in.employeeId AND
employee_in.departmentId = depart.departmentId
<if test="fstarttime != null">
and empInBreakTime >= #{fstarttime}
</if>
<if test="fendtime != null">
and empInBreakTime <= #{fendtime}
</if>
),0) AS totalMinus
FROM
department depart
<where>
<include refid="query_department_where"></include>
</where>
ORDER BY
<if test="fstarttime != null or fendtime != null">
totalMinus desc
</if>
<if test="fstarttime == null and fendtime == null">
sort DESC
</if> <include refid="query_department_limit"></include>
</select> <!--查询部门的条件 -->
<sql id="query_department_where">
<if test="updepartmentid!=null">
and updepartmentid=#{updepartmentid}
</if>
<if test="departmentId != null">
AND departmentId like '${departmentId}%'
</if>
<if test="departmentname!=null">
and departmentname like '%${departmentname}%'
</if>
<if test="1 == 1">
and departmentid !=''
</if>
</sql>
<sql id="query_department_limit">
<if test="index!=null">
LIMIT #{index},#{currentCount}
</if>
</sql>
总结:
动态 SQL
MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。
通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中。
动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多的元素需要来了解。MyBatis 3 大大提升了它们,现在用不到原先一半的元素就可以了。MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素。
- if
- choose (when, otherwise)
- trim (where, set)
- foreach
if
动态 SQL 通常要做的事情是有条件地包含 where 子句的一部分。比如:
<select id="findActiveBlogWithTitleLike"
resultType="Blog">
SELECT * FROM BLOG
WHERE state = ‘ACTIVE’
<if test="title != null">
AND title like #{title}
</if>
</select>
这条语句提供了一个可选的文本查找类型的功能。如果没有传入“title”,那么所有处于“ACTIVE”状态的BLOG都会返回;反之若传入了“title”,那么就会把模糊查找“title”内容的BLOG结果返回(就这个例子而言,细心的读者会发现其中的参数值是可以包含一些掩码或通配符的)。
如果想可选地通过“title”和“author”两个条件搜索该怎么办呢?首先,改变语句的名称让它更具实际意义;然后只要加入另一个条件即可。
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
<if test="title != null">
AND title like #{title}
</if>
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</if>
</select>
choose, when, otherwise
有些时候,我们不想用到所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。
还是上面的例子,但是这次变为提供了“title”就按“title”查找,提供了“author”就按“author”查找,若两者都没有提供,就返回所有符合条件的BLOG(实际情况可能是由管理员按一定策略选出BLOG列表,而不是返回大量无意义的随机结果)。
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND author_name like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>
trim, where, set
前面几个例子已经合宜地解决了一个臭名昭著的动态 SQL 问题。现在考虑回到“if”示例,这次我们将“ACTIVE = 1”也设置成动态的条件,看看会发生什么。
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG
WHERE
<if test="state != null">
state = #{state}
</if>
<if test="title != null">
AND title like #{title}
</if>
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</if>
</select>
如果这些条件没有一个能匹配上将会怎样?最终这条 SQL 会变成这样:
SELECT * FROM BLOG
WHERE
这会导致查询失败。如果仅仅第二个条件匹配又会怎样?这条 SQL 最终会是这样:
SELECT * FROM BLOG
WHERE
AND title like ‘someTitle’
这个查询也会失败。这个问题不能简单的用条件句式来解决,如果你也曾经被迫这样写过,那么你很可能从此以后都不想再这样去写了。
MyBatis 有一个简单的处理,这在90%的情况下都会有用。而在不能使用的地方,你可以自定义处理方式来令其正常工作。一处简单的修改就能得到想要的效果:
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG
<where>
<if test="state != null">
state = #{state}
</if>
<if test="title != null">
AND title like #{title}
</if>
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</if>
</where>
</select>
where 元素知道只有在一个以上的if条件有值的情况下才去插入“WHERE”子句。而且,若最后的内容是“AND”或“OR”开头的,where 元素也知道如何将他们去除。
如果 where 元素没有按正常套路出牌,我们还是可以通过自定义 trim 元素来定制我们想要的功能。比如,和 where 元素等价的自定义 trim 元素为:
<trim prefix="WHERE" prefixOverrides="AND |OR ">
...
</trim>
prefixOverrides 属性会忽略通过管道分隔的文本序列(注意此例中的空格也是必要的)。它带来的结果就是所有在 prefixOverrides 属性中指定的内容将被移除,并且插入 prefix 属性中指定的内容。
类似的用于动态更新语句的解决方案叫做 set。set 元素可以被用于动态包含需要更新的列,而舍去其他的。比如:
<update id="updateAuthorIfNecessary">
update Author
<set>
<if test="username != null">username=#{username},</if>
<if test="password != null">password=#{password},</if>
<if test="email != null">email=#{email},</if>
<if test="bio != null">bio=#{bio}</if>
</set>
where id=#{id}
</update>
这里,set 元素会动态前置 SET 关键字,同时也会消除无关的逗号,因为用了条件语句之后很可能就会在生成的赋值语句的后面留下这些逗号。
若你对等价的自定义 trim 元素的样子感兴趣,那这就应该是它的真面目:
<trim prefix="SET" suffixOverrides=",">
...
</trim>
例如:
<!-- 拼装查询积分组装条件 -->
<trim prefix="having" prefixOverrides="AND">
<if test="mixMinus!=null">
and
<include refid="selectMinus"></include>
>#{mixMinus}
</if>
<if test="maxMinus!=null">
and
<include refid="selectMinus"></include>
<#{maxMinus}
</if>
<!-- 如果选择进入黑名单扣分大于12 -->
<if test="isBlack!=null">
and
<include refid="selectMinus"></include>
>12
</if>
</trim>
注意这里我们忽略的是后缀中的值,而又一次附加了前缀中的值。
foreach
动态 SQL 的另外一个常用的必要操作是需要对一个集合进行遍历,通常是在构建 IN 条件语句的时候。比如:
<select id="selectPostIn" resultType="domain.blog.Post">
SELECT *
FROM POST P
WHERE ID in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</select>
foreach 元素的功能是非常强大的,它允许你指定一个集合,声明可以用在元素体内的集合项和索引变量。它也允许你指定开闭匹配的字符串以及在迭代中间放置分隔符。这个元素是很智能的,因此它不会偶然地附加多余的分隔符。
注意 你可以将任何可迭代对象(如列表、集合等)和任何的字典或者数组对象传递给foreach作为集合参数。当使用可迭代对象或者数组时,index是当前迭代的次数,item的值是本次迭代获取的元素。当使用字典(或者Map.Entry对象的集合)时,index是键,item是值。
到此我们已经完成了涉及 XML 配置文件和 XML 映射文件的讨论。下一部分将详细探讨 Java API,这样才能从已创建的映射中获取最大利益。
bind (可以防止SQL注入)
bind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。比如:
<select id="selectBlogsLike" resultType="Blog">
<bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
SELECT * FROM BLOG
WHERE title LIKE #{pattern}
</select>
Multi-db vendor support
一个配置了“_databaseId”变量的 databaseIdProvider 对于动态代码来说是可用的,这样就可以根据不同的数据库厂商构建特定的语句。比如下面的例子:
<insert id="insert">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
<if test="_databaseId == 'oracle'">
select seq_users.nextval from dual
</if>
<if test="_databaseId == 'db2'">
select nextval for seq_users from sysibm.sysdummy1"
</if>
</selectKey>
insert into users values (#{id}, #{name})
</insert>
动态 SQL 中可插拔的脚本语言
MyBatis 从 3.2 开始支持可插拔的脚本语言,因此你可以在插入一种语言的驱动(language driver)之后来写基于这种语言的动态 SQL 查询。
可以通过实现下面接口的方式来插入一种语言:
public interface LanguageDriver {
ParameterHandler createParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql);
SqlSource createSqlSource(Configuration configuration, XNode script, Class<?> parameterType);
SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType);
}
一旦有了自定义的语言驱动,你就可以在 mybatis-config.xml 文件中将它设置为默认语言:
<typeAliases>
<typeAlias type="org.sample.MyLanguageDriver" alias="myLanguage"/>
</typeAliases>
<settings>
<setting name="defaultScriptingLanguage" value="myLanguage"/>
</settings>
除了设置默认语言,你也可以针对特殊的语句指定特定语言,这可以通过如下的 lang 属性来完成:
<select id="selectBlog" lang="myLanguage">
SELECT * FROM BLOG
</select>
或者在你正在使用的映射中加上注解 @Lang 来完成:
public interface Mapper {
@Lang(MyLanguageDriver.class)
@Select("SELECT * FROM BLOG")
List<Blog> selectBlog();
}
总结:动态sql(9个)
- if
- choose (when, otherwise)
- trim (where, set)
- foreach
bind
mybatis动态sql——(六)的更多相关文章
- MyBatis 动态SQL(十二)
动态条件查询 以下是我们数据库表 tb_user 的记录: 假设现在有一个需求,就是根据输入的用户年龄和性别,查询用户的记录信息.你可能会说,这太简单了,脑袋里立马蹦出如下的 SQL 语句: SELE ...
- mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句
mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...
- 9.mybatis动态SQL标签的用法
mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么 ...
- 自己动手实现mybatis动态sql
发现要坚持写博客真的是一件很困难的事情,各种原因都会导致顾不上博客.本来打算写自己动手实现orm,看看时间,还是先实现一个动态sql,下次有时间再补上orm完整的实现吧. 用过mybatis的人,估计 ...
- Mybatis动态SQL单一基础类型参数用if标签
Mybatis动态SQL单一基础类型参数用if标签时,test中应该用 _parameter,如: 1 2 3 4 5 6 <select id="selectByName" ...
- 超全MyBatis动态SQL详解!( 看完SQL爽多了)
MyBatis 令人喜欢的一大特性就是动态 SQL. 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的. MyBatis 动态 SQL 的出现, 解决了这个麻烦. My ...
- Mybatis动态SQL简单了解 Mybatis简介(四)
动态SQL概况 MyBatis 的强大特性之一便是它的动态 SQL 在Java开发中经常遇到条件判断,比如: if(x>0){ //执行一些逻辑........ } Mybatis应用中,S ...
- mybatis原理分析学习记录,mybatis动态sql学习记录
以下个人学习笔记,仅供参考,欢迎指正. MyBatis 是支持定制化 SQL.存储过程以及高级映射的持久层框架,其主要就完成2件事情: 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转 ...
- mybatis 动态sql和参数
mybatis 动态sql 名词解析 OGNL表达式 OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性, ...
- MyBatis动态SQL之一使用 if 标签和 choose标签
bootstrap react https://segmentfault.com/a/1190000010383464 xml 中 < 转义 to thi tha <if test=&qu ...
随机推荐
- Leetcode题库——47.全排列II
@author: ZZQ @software: PyCharm @file: permuteUnique.py @time: 2018/11/16 13:34 要求:给定一个可包含重复数字的序列,返回 ...
- 20190215面试-C#操作外设-多线程-shocket
百度了下,ic卡读卡器 文章;C# 读IC卡程序这个文章还不错. 从北京金木雨电子有限公司下载了,兼容IC卡 身份证阅读器的SDK资料,里面有介绍如何连接ic读卡器,对卡进行一些操作. MasterR ...
- ElasticSearch 2 (7) - 基本概念
ElasticSearch 2 (7) - 基本概念 摘要 ElasticSearch的一些基本核心概念,理解这些概念有助于ElasticSearch的学习 准实时NRT(Near Realtime) ...
- Web网络服务介绍
Web网络服务也叫WWW(World Wide Web),一般是指能够让用户通过浏览器访问到互联网中文档资源服务.目前提供WEB网络服务的程序有Apache .Nginx 和 IIS 等等,Web ...
- GS 服务器超时时间设置
工作中 遇到一个超时的问题 与徐庆同学沟通后 了解了下超时时间设置的地方 1.web.congfig问题: 常规路径 C:\Program Files\GenerSoft\bscw_local\web ...
- Android 四大组件和Intent
一.Android有四大组件(component):Activity.Service.BroadcastReceiver.ContentProvider. 1.Activity 通过startActi ...
- 微信小程序填坑之旅一(接入)
一.小程序简介 小程序是什么? 首先“程序”这两个字我们不陌生.看看你手机上的各个软件,那就是程序.平时的程序是直接跑在我们原生的操作系统上面的.小程序是间接跑在原生系统上的.因为它嵌入在微信中,受微 ...
- NOI&&NOIP知识点集萃
更新日志 \(update:2019-3-4\) 更新了自为风月马前卒的后缀数组(省选不到一个月了,我才开始学后缀数组怕是要凉凉) \(update:2019-2-21\) 更新了一篇李超线段树的讲解 ...
- 新版POI如何获取日期类型的cell的值
使用POI读取Excel值的同学,一定为日期类型抓狂过! POI对单元格日期处理很弱,没有针对的类型,日期类型取出来的也是一个double值,所以同样作为数值类型.即使使用cell.setCellTy ...
- C++实用整数快速输入输出模板(C++)
随便写一点放在这里,以后想蛇皮卡常就很方便啦 蒟蒻太懒了,也就暂时不搞什么封namespace之类的操作了 程序结束时记得flush一下. #include<cstdio> #define ...