Pengantar iBatis:
Ibatis adalah proyek open source dari Apache dan solusi pemetaan O/R. Fitur terbesar dari iBatis adalah kompak dan cepat untuk memulai. Jika Anda tidak memerlukan terlalu banyak fungsi kompleks, iBatis adalah solusi paling sederhana yang dapat memenuhi kebutuhan Anda dan cukup fleksibel. Sekarang Ibatis telah berganti nama menjadi Mybatis.
Situs web resmi adalah: http://www.mybatis.org/
1. Parameter input adalah nilai tunggal
<delete id = "com.fashionfree.stat.accesslog.deletememberAccessLogsBefore" parameterclass = "long"> hapus dari mandorAccessLog di mana accessTimestamp = # value # </delete> <delete id = "com.fashionfree.stat.accesslog.deletleteercercer =" com.fashionfree.stat.accesslog.deletLete> deleteCer = "com.fashionfree.stat.accesslog.deletLeteercacs =" com.fashionfree.stat.accesslog.deletLetEccess = "com.fashion" AccessTimestamp = # Value # </delete>
2. Parameter input adalah objek
<insert id = "com.fashionfree.stat.accesslog.memberaccesslog.insert" parameterclass = "com.fashionfree.stat.accesslog.model.memberaccesslog> masukkan ke dalam mavorAccessLog (accessLogid, marganId, clientip, httpmethod, actionid, AccessId, AccordId, Accords, Access -Access - #AccessLogid #, #MemberID #, #ClientIP #, #httpmethod #, #actionId #, #requestUrl #, #accessTimestamp #, #extend1 #, #extend2 #, #extend3 #) </masukkan <masukkan id = "com.fashionfree.stat.accesslog.memberaccslog.insert" parameterClass="com.fashionfree.stat.accesslog.model.MemberAccessLog> insert into MemberAccessLog ( accessLogId, memberId, clientIP, httpMethod, actionId, requestURL, accessTimestamp, extend1, extend2, extend3 ) values ( #accessLogId#, #memberId#, #clientIP#, #httpMethod#, #actionId#, #requestUrl #, #accessTimestamp #, #extend1 #, #extend2 #, #extend3 #) </insert>
3. Parameter input adalah java.util.hashmap
<select id="com.fashionfree.stat.accesslog.selectActionIdAndActionNumber" parameterClass="hashMap" resultMap="getActionIdAndActionNumber"> select actionId, count(*) as count from MemberAccessLog where memberId = #memberId# and accessTimestamp > #start# and accessTimestamp <= #end# group by actionId </select><select id = "com.fashionfree.stat.accesslog.selectactionIdandActionNumber" parameterclass = "hashmap" resultMap = "getactionIdandActionNumber"> Pilih ActionId, count (*) sebagai penghitungan dari anggota ACCACCESSLOG di mana MemberID = # MemberID # dan AccessTimestAMP> # start # dan AccessTamp <= = # endk # dan AccessTimestamp> Mulai # dan AccessTamp <= = #
4. Parameter input berisi array
<masukkan id = "updateStatusBatch" parameterclass = "hashmap"> Perbarui status set pertanyaan = # status # <dynamic prepend = "where pouctionId in"> <isnotnull properti = "actionIds"> <iterate property = "ActionIds" Open = "(close =") "konjungsi =", "> # acticids [] </dynamics [ISNID> </ISNOULT </ISNOLT =", "> #ICTICEIDS [] </dynamic </dynamls = id="updateStatusBatch" parameterClass="hashMap"> update Question set status = #status# <dynamic prepend="where questionId in"> <isNotNull property="actionIds"> <iterate property="actionIds" open="(" close=")" conjunction=","> #actionIds[]# </iterate> </isNotNull> </dynamic> </insert>Deskripsi: ActionIDS adalah nama array yang dilewati; Gunakan tag dinamis untuk menghindari kesalahan sintaks pernyataan SQL saat array kosong; Gunakan tag isNotnull untuk menghindari kesalahan parsing iBatis saat array nol
5. Parameter lewat hanya berisi satu array
<pilih id = "com.fashionfree.stat.accesslog.model.statmemberaction.selectactionIdsofmodule" resultClass = "hashmap"> SELECT MODULEID, actionID dari statmemberaction <dynamic prepend = "di mana moduleID di"> <iterate Open = "(" dekat = ")", ",", " </pilih> <pilih id = "com.fashionfree.stat.accesslog.model.statmemberaction.selectactionIdsofmodule" resultClass = "hashmap"> ModuleID, actionId dari statmemberaction <dynamic prepend = "Where ModuleId di"> <iterate Open = "(" close = ") ModuleID </pilih>Catatan: Perhatikan bahwa tidak ada item ParameterClass di tag pilih
Juga: Anda juga dapat memasukkan array ke dalam hashmap di sini, tetapi menambah overhead ekstra dan tidak disarankan untuk menggunakannya.
6. Biarkan Ibatis menguraikan parameter secara langsung ke dalam string
<Pilih id = "com.fashionfree.stat.accesslog.selectsumDistinctCountofAccessMemberNum" parameterclass = "hashmap" resultClass = "int"> PILIHAN (MANGING MEMBANTID) DARI MANGGERACCESSLOG DI MANA ACCESSTIMESTAMP> = # start # dan AccessTimestamp < # end # dan Actices in $ ActionId> id = "com.fashionfree.stat.accesslog.selectsumdistinctCountofaccessMemberNum" parameterclass = "hashmap" resultClass = "int"> PILIHAN (anggota berbeda) dari MemberAccessLog di mana AccessTimestamp> = # start # dan AccessTampamp < # # end dan Actions in $ ActionStry
Catatan: Ada risiko injeksi SQL saat menggunakan metode ini, dan tidak disarankan untuk menggunakannya.
7. PagredQuery
<pilih id = "com.fashionfree.stat.accesslog.selectMemberAccessLogby" parameterclass = "hashmap" resultMap = "magricescesslogmap"> <incled refid = "selectAllsql"/> <incert refid = "whereesql"/<incerted refid = "pagarql"/<certed = "whereesql"/<incerted refid = "pagarql"/<certed = "wheresql"/<incled refid = "pagarql"/<certing = "whereSQL"/<incerted refid = "pagarql"/<certing = "whereSQL"/<incled refid = "pagarql"/<certing = "whereSQL"/<incerted refid = "pagarql"/<cerst id="com.fashionfree.stat.accesslog.selectMemberAccessLogBy.Count" parameterClass="hashMap" resultClass="int"> <include refid="countSql"/> <include refid="whereSql"/> </select> <sql id="selectAllSql"> select accessLogId, memberId, clientIP, httpMethod, actionId, requestURL, accessTimestamp, extend1, extend2, extend3 from MemberAccessLog </sql> <sql id="whereSql"> accessTimestamp <= #accessTimestamp# </sql> <sql id="countSql"> select count(*) from MemberAccessLog </sql> <sql id="countSql"> select count(*) from MemberAccessLog </sql> <sql id="whereSql"> accessTimestamp <= #accessTimestamp# </sql> <sql id="countSql"> select count(*) from MemberAccessLog </sql> <sql id="pageSql"> <dynamic> <isNotNull property="startIndex"> <isNotNull property="pageSize"> limit # startIndex #, # pageSize # </SeSnotnull> </SeTnotnull> </nynynic> </sql> <pilih id = "com.fashionfree.stat.accesslog.selectmemberaccessLogby" ParameterClass = "hashMap" resultMap = "magristmembercessLogby" Parameterclass = "hashMap" resultMap = "magGGANCACCESSLOGMAP"> <Parameterclass = "HashMap" refid="whereSql"/> <include refid="pageSql"/> </select> <select id="com.fashionfree.stat.accesslog.selectMemberAccessLogBy.Count" parameterClass="hashMap" resultClass="int"> <include refid="countSql"/> <include refid="whereSql"/> </select> <sql ID = "SelectAllSQL"> Pilih AccessLogid, MemberID, ClientIP, HTTPMethod, ActionID, REQUESTURL, ACCESTIMESTAMP, EXTENTER1, EXTENT2, EXTEST3 DARI MANGGERACCESSLOG </sql> </sql ID = "wheresql"> AccessTampamp <= # accessTampamp #/sql (/sql "> <" sqql = "sql =" sql = "sql =" sql = "sql =" sql = "sql =" sql = "sql =" sql = "sql =" sql = "sql =" sql = "sql =" sql = "sql =" sql = "sql =" sql = "sql =" sql = "sql"> </sql " MemberAccessLog </sql> <sql id = "pagesql"> <dynamic> <sentnotnull properti = "startIndex"> <isnotnull properti = "pagesize"> Batas # startIndex #, # pagesze # </isNotnull> </isNotnull> </dinamis> </sql>
Catatan: Dalam contoh ini, kodenya harus:
Hashmap hashmap = hashmap baru (); hashmap.put ("AccessTimestamp", Somevalue); PagedQuery ("com.fashionfree.stat.accesslog.selectmemberaccesslogby", hashmap);Metode PagredQuery pertama -tama mencari pernyataan yang dipetakan bernama com.fashionfree.stat.accesslog.selectmemberaccesslogby.count untuk melakukan kueri SQL, dengan demikian mendapatkan jumlah catatan com.fashionfree.stat.accesslog.selectmemberaccessLogby kueri, dan kemudian melakukan pagredlog. (com.fashionfree.stat.accesslog.selectmemberaccesslogby). Untuk proses tertentu, silakan merujuk ke kode yang relevan di kelas Utils.
8. Pernyataan SQL berisi lebih besar dari tanda> dan kurang dari tanda <1. Tulis lebih besar dari tanda dan kurang dari tanda sebagai:> <misalnya:
<delete id = "com.fashionfree.stat.accesslog.deletememberAccessLogsBefore" parameterclass = "long"> hapus dari anggota AccessLog di mana AccessTimestamp <= # value # </celete> xml Code <delete ID = "com.fashionfree.stat.accesslog.delete =" delete = "com.fashionfree.stat.accesslog.delete =" delete = "com.fashionfree.stat.accesslog. MemberAccessLog di mana AccessTimestamp <= # value # </belete>
Tempatkan karakter khusus di area CDATA XML:
<delete id = "com.fashionfree.stat.accesslog.deletememberAccessLogsBefore" parameterclass = "long"> <! [Cdata [hapus dari mandorAccessLog di mana AccessTimestamp <= # value #]] </belete> <delete id = "com.fashionfree.stat.access." parameterclass = "long"> <! [cdata [hapus dari magersaccesslog di mana accessTimestamp <= # value #]]> </delete>
Disarankan untuk menggunakan metode pertama, tulislah sebagai <dan> (xml tidak menguraikan konten dalam cdata, jadi jika cdata berisi tag dinamis, itu tidak akan berfungsi)
9. Sertakan dan tag SQL mengatur pernyataan SQL umum bersama untuk berbagi mudah:
<sql id = "selectbasicsql"> Pilih samplingTimestamp, onlinenum, tahun, bulan, minggu, hari, jam dari OnlinememberNum </sql> <sql id = "wheresqlbefore"> di mana samplingTimestamp <= # samplingTimestamp # </sql> sql> id = "com.fashionfree.accesslog.selectonlinemembernumsbeforesamplingTimestamp" parameterclass = "hashmap" resultClass = "onlinemembernum"> <termasuk refid = "selectbasicsql" /> <termasuk refid = "di mana -manaqlbefore"> < /selecticql " /> <incerted" whatseSqlBefore " /Pilihan SamplingTimestamp, Onlinenum, Tahun, Bulan, Minggu, Hari, Jam Dari OnlinemnuNum </sql> <sql id = "wheresqlBefore"> di mana samplingTimestamp <= # samplingTampamp # </sql> <pilih id = "com.fashionfree.accesslog.selog. parameterclass = "hashmap" resultClass = "onlinemembernum"> <include refid = "selectbasicsql" /> <include refid = "wheresqlbefore" /> </ pilih>
Catatan: Tag SQL hanya dapat digunakan untuk referensi dan tidak dapat dianggap sebagai pernyataan yang dipetakan. Seperti pada contoh di atas, ada elemen SQL bernama SelectBasicsql, dan salah untuk mencoba menggunakannya sebagai pernyataan SQL untuk mengeksekusi:
sqlmapclient.queryforlist ("selectbasicsql"); ×10. Pilih catatan secara acak
<sql id = "randomsql"> order by rand () limit # number # </sql>
Pilih catatan nomor secara acak dari database (hanya untuk MySQL)
11. Bidang jahitan di SQL Group dengan mengelompokkan
<sql id = ”selectgroupby> pilih a.answerercategoryId, a.answererid, A.answerername, A.questioncategoryid, a.score, a.answerednum, a.correctnum, a.answerseconds, a.createdTampamp, a.laspuestyAptionApprovedTamping, a. categoryName FROM AnswererCategory a, QuestionCategory q WHERE a.questionCategoryId = q.questionCategoryId GROUP BY a.answererId ORDER BY a.answererCategoryId </sql><sql id=”selectGroupBy> SELECT a.answererCategoryId, a.answererId, a.answererName, a.questionCategoryId, a.score, a.answeredNum, A.Correctnum, A.Answerseconds, A.CreatedTimestamp, a.lastquestionprovedTiMestamp, a.lastmodified, group_concat (q.categoryName) sebagai kategorike dari kategori questerCategory q di mana a.questionCategoryid = Q.QuesTionCaterCatercory </sql>
Catatan: Fungsi grup_concat MySQL digunakan dalam SQL
12. Urutkan dalam urutan di
①mysql:
<sql id = "groupbyinarea"> pilih ModuleID, Modulename, Status, LastModifierID, LastModifiedName, LastModified dari StatModule di mana moduleID dalam (3, 5, 1) memesan dengan instr (', 3,5,', ','+ltrim (moduleid)+') </sq = Modulename, status, lastmodifierid, lastmodiedName, lastmodified dari statmodule di mana moduleid dalam (3, 5, 1) memesan oleh instr (', 3,5,1,', ','+ltrim (moduleid)+',') </sql>②SQLServer:
<sql id = "groupbyinarea"> pilih ModuleID, Modulename, Status, LastModifierID, LastModifiedName, LastModified dari StatModule di mana ModuleID dalam (3, 5, 1) pesanan oleh charindex (','+ltrim (ModuleID)+',', ',', '3,5,') </sqora ") </sql </sqly> ModuleID, Modulename, Status, LastModifierID, LastModifiedName, LastModified dari StatModule di mana moduleID dalam (3, 5, 1) memesan oleh Charindex (','+ltrim (moduleID)+',', ', 3,5,1,') </sql>Deskripsi: Hasil kueri akan dikembalikan dalam urutan moduleID dalam daftar dalam (3, 5, 1).
Mysql: instr (str, substr)
SQLServer: CharIndex (substr, str) Mengembalikan posisi kejadian pertama dari substring dalam string str ltrim (str) mengembalikan string str, karakter ruang boot (kiri) dihapus
13.RESULTMAP HasilMap bertanggung jawab untuk memetakan nilai kolom dari hasil kueri SQL ke dalam nilai atribut biji java
<resultMap id = "getActionIdandActionNumber"> <hasil kolom = "actionId" properti = "actionId" jdbctype = "bigint" javatype = "long"/<column column = "count" properti = "count" jdbctype = "int" javatype = "int"/</resultnumber </hancur code </"get" get "get" get "get" get "get" get "get" get "get" get "get" properti = "actionId" jdbctype = "BigInt" javatype = "long"/> <result column = "count" properti = "count" jdbctype = "int" javatype = "int"/> </resultMap>
Penggunaan HasilMap disebut pemetaan hasil eksplisit, yang sesuai dengan ClassClass (pemetaan hasil inline). Keuntungan terbesar dari menggunakan Class adalah sederhana dan nyaman. Itu tidak memerlukan hasil yang ditentukan untuk ditampilkan. Ibatis menentukan keputusan berdasarkan refleksi. HasilMap dapat memberikan otentikasi konfigurasi yang lebih ketat dengan menentukan JDBCTYPE dan JAVATYPE.
14.Typealias
<Typealias alias = "MemberonLineduration" type = "com.fashionfree.stat.accesslog.model.memberonlineduration" /> <yypealias>
Memungkinkan Anda untuk mendefinisikan alias untuk menghindari input berulang dengan nama yang terlalu panjang
15.Remap
<select id="testForRemap" parameterClass="hashMap" resultClass="hashMap" remapResults="true"> select userId <isEqual property="tag" compareValue="1"> , userName </isEqual> <isEqual property="tag" compareValue="2"> , userPassword </isEqual> from UserInfo </select> <select id="testForRemap" parameterClass="hashMap" resultClass="hashMap" remapResults="true"> select userId <isEqual property="tag" compareValue="1"> , userName </isEqual> <isEqual property="tag" compareValue="2"> , userPassword </isEqual> from UserInfo </select>
Dalam contoh ini, set hasil yang berbeda akan diperoleh sesuai dengan nilai tag parameter. Jika tidak ada atribut RemapResult = "true", Ibatis akan menyimpan hasil yang ditetapkan selama kueri pertama. Pemetaan set hasil tidak akan dilakukan di waktu berikutnya (masih harus dalam proses), tetapi set hasil yang di -cache akan digunakan.
Oleh karena itu, jika dalam contoh di atas Remapresult adalah properti palsu default, dan suatu program ditulis seperti ini:
HashMap <string, integer> hashMap = new HashMap <string, integer> (); hashmap.put ("tag", 1); sqlclient.queryforlist ("testforremap", hashmap); hashmap.put ("tag", 2); sqlclient.queryforlist ("testforremap", hashmap); Kode Java
HashMap <string, integer> hashMap = new HashMap <string, integer> (); hashmap.put ("tag", 1); sqlclient.queryforlist ("testforremap", hashmap); hashmap.put ("tag", 2); sqlclient.queryforlist ("testforremap", hashmap);Program akan melaporkan kesalahan saat menjalankan kueri kueri terakhir. Alasannya adalah bahwa iBatis menggunakan set hasil dari kueri pertama, dan set hasil dari dua kali pertama dan terakhir berbeda: (userid, nama pengguna) dan (userid, userpassword), yang mengarah ke kesalahan. Jika remapResult = properti "true" digunakan, iBatis akan melakukan pemetaan set hasil setiap kali kueri dieksekusi, sehingga menghindari kesalahan (akan ada banyak overhead).
16. Atribut prepend dari tag dinamis ditambahkan sebagai awalan ke konten hasil. Ketika konten hasil label kosong, atribut prepend tidak akan berfungsi.
Ketika atribut prepend ada dalam tag dinamis, atribut prepend pertama dari subtitle bersarangnya akan diabaikan. Misalnya:
<sql id = "whereesql"> <dynamic prepend = "where"> <isnotnull properti = "userid" prepend = "bogus"> userid = # userid # </isnotnull> <isNoTempty properti = "username" prepend = "dan"> Username = # UserName #/isNoTempty> </Sq </Sqly </Sqly name #/isNoTemplan> </Sq </sq </sqly name #/isNoTempty> </sq </sqly name #/iSnoTemplan> </sq </sq </iSnoTempty> </sq </sqlyname #/iSnoTempt id = "whereesql"> <dynamic prepend = "where"> <isnotnull properti = "userid" prepend = "bogus"> userid = # userid # </ isnotnull> <isnotempty properti = "username" prepend = "dan"> username = # username #/isNoTemplan> <///SQUCICE </sqUs = # squName # </isNoTempty> <///</dynamicy> </squal> </squRame> squName # </isNoTempty> </dynamicy> </dynamicy> <//squRame> </squRame>
Dalam contoh ini, tag dinamis berisi dua sub-label <sheTnull> dan <shotempty>. Menurut prinsip -prinsip yang dijelaskan di atas, jika atribut palsu prepend = "bogus" tidak ada dalam tag <seTnotnull> untuk menghapus dinamis, dan dan dalam tag <shoTempty> akan diabaikan, menyebabkan kesalahan sintaks SQL.
Catatan: Ketika tag dinamis tidak memiliki atribut prepend, atribut prepend pertama dari tag anaknya tidak secara otomatis diabaikan.
Di atas adalah 16 pernyataan SQL bahwa iBatis digunakan untuk memperkenalkan kepada Anda. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!