Введение в ибатис:
Ibatis - это проект с открытым исходным кодом Apache и решение для картирования O/R. Самой большой особенностью ибати является то, что он компактен и быстро начинается. Если вам не нужно слишком много сложных функций, ibatis является самым простым решением, которое может соответствовать вашим требованиям и быть достаточно гибким. Теперь Ибатис был переименован в Mybatis.
Официальный веб -сайт: http://www.mybatis.org/
1. Входной параметр - это единственное значение
<delete id = "com.fashionfree.stat.accesslog.deletememberaccesslogsbefore" parameterclass = "long"> удалить из memanaccesslog, где accesstimeStamp = # value # </delete> <delete id = "com.fashionfree.stat.accesslog.deletememberaccesslogsbefore 'parametercefore -emelete -emelete -state. Memberaccesslog, где accesstimestamp = # value # </delete>
2. Входной параметр является объектом
<insert id = "com.fashionfree.stat.accesslog.memberaccesslog.insert" parameterclass = "com.fashionfree.stat.accesslog.model.memberaccesslog> вставьте в memberaccesslog (accesslogid, extred -astlect1, extemend, extemend, extemend. extend3) values ( #accesslogid #, #memberid #, #clientip #, #httpmethod #, #actionid #, #requesturl #, #accesstimestamp #, #extend1 #, #extend2 #, #extend3 #) </insert> <sinsert id = "com.fashionfree.stat.accesslog.meversembercsess> 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. Входной параметр - это java.util.hashmap
<select id = "com.fashionfree.stat.accesslog.selectActionIdAndActionNumber" parameterClass = "hashMap" resultMap = "getActionIdAndActionNumber"> select ActionId, count (*) как count от memberaccesslog, где kemberId = # memberId # и accesstimeMp> # # # accest # # ecкативный 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>
4. Входные параметры содержат массивы
<insert 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> <insert id = "updateStatusBatch" parameterClass = "hashmap"> Обновление набор вопросов Состояние = # Статус # <dynamic prepend = "где вопрос"> <isnotnull property = "actionids"> <iterate = "actionids" open = "(" close = ")" concunction = ","> #ActionIDS [] # </iTurate> <//isNOTNULL> <//#ActionIDS [] # </iterate> <//isnotull> <//iterate>Описание: ActionIds - это название прошедшего массива; Используйте динамический тег, чтобы избежать ошибок синтаксиса оператора SQL, когда массив пуст; Используйте тег ISNOTNULL, чтобы избежать ошибок ибатиса, когда массив нулевой
5. Передача параметров содержит только один массив
<select id = "com.fashionfree.stat.accesslog.model.statmemberaction.selectActionIdsOfModule" resultClass = "hashmap"> select moduleid, actionid from statmemberaction <dynamic precend = "где moduleid в"> <iterate open = "(" close = ")" concunction = "," # # [] # </ # </ # </ # </ # </ # </> </itere open = "(" close = ")") ". </select> <select id = "com.fashionfree.stat.accesslog.model.statmemberaction.selectActionIdsOfModule" resultClass = "hashmap"> select moduleid, actionId из StateMemberAction <Dynamic Prepend = ", где модульид в"> <tithate open = "(" close = ")" confination = ","> # # # [> # # # [> # # [> # # # [> # # [> # [> # dynewert open = ". moduleid </select>ПРИМЕЧАНИЕ. Обратите внимание, что в теге нет элемента класса параметров.
Также: вы также можете поместить массив в хэшмату, но он добавляет дополнительные накладные расходы и не рекомендуется использовать его.
6. Позвольте Ибатису анализировать параметры непосредственно в строки
<select id = "com.fashionfree.stat.accesslog.selectsumdistinctCountofAccessMemberNum" parameterClass = "hashmap" resultClass = "int"> SELECT COUNT (Constrant MemberID) из memberAccesslog, где AccessTimeSt> = # Start # и AccessTimeMp id = "com.fashionfree.stat.accesslog.selectsumdistinctCountofAccessMemberNum" parameterClass = "hashmap" resultClass = "int"> выберите Count (различный MemberID) из memberAccesslog, где AccessTimeMest> = # # # and accesstimemp < # end # and actionId in actionIdString $ </select> # # # # incementamp < # and actionId in actionIdString $ </select>
Примечание. При использовании этого метода существует риск инъекции SQL, и его не рекомендуется использовать его.
7. PAGEDQUERY
<select id = "com.fashionfree.stat.accesslog.selectmemberaccesslogby" parameterclass = "hashmap" resultmap = "memberaccesslogmap"> <includ refid = "selectallsql"/> <include refid = "где whereSql"/> <include = "pagesql"/> </select> id = "com.fashionfree.stat.accesslog.selectmemberaccesslogby.count" parameterclass = "hashmap" resultclass = "int"> <includ refid = "countsql"/> <include Refid = "где wheneSql"/> </select> <sql id = "selectalsql" ActionId, requestUrl, AccessTimeStamp, extend1, extend2, extend3 от memberAccesslog </sql> <sql id = "wheneSql"> accessTimeStAmp <= # accessTimeStamp # </sql> <sql id = "counttsql"> select (*) Out memberaccesslog </sql> <sql id = "countts quarts quarts quarts quarts quarts quarts qualdts" Memberaccesslog </sql> <sql id = "wheneSql"> accessTimeStamp <= # accessTimeStamp # </sql> <sql id = "countsql"> select count (*) из memberaccesslog </sql> <sql id = "pagesql"> <synamic> <isnotnull. Property = "pagesize"> Limit # startIndex #, # pageize # </isnotnull> </isnotnull> </dynamic> </sql> <select id = "com.fashionfree.stat.accesslog.selectmemberaccesslogby" parameterclass = "hashmap" recordmap = "kemporgcesslagby" RefID = "selectAllSQL"/> <incluct refiD = "wheneSql"/> <include refid = "pagesql"/> </select> <select id = "com.fashionfree.stat.accesslog.selectmemberaccesslogby.count" parameterclass = "hashmap" resultclass = "int"> <включает refid = "countts qu 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 (*) из memberaccesslog </sql> <sql id = "pagesql"> <dynamic> <isnotnull property = "startIndex"> <ISnotNull Property = "PageSize"> Limit # startIndex #, # pagesize # </isnotnull> </iSnotNul
Примечание. В этом примере код должен быть:
Hashmap hashmap = new hashmap (); hashmap.put ("accesstimestamp", somevalue); PageDquery ("com.fashionfree.stat.accesslog.selectmemberaccesslogby", Hashmap);Метод PagegeCecery сначала ищет сопоставленное заявление под названием com.fashionfree.stat.accesslog.selectmemberaccesslogby.count для выполнения sql Query, получая тем самым количество записей com.fashionfree.stat.accesslog.selectmembercesslogby Query, а затем выполняет необходимый Pagl Quer (com.fashionfree.stat.accesslog.selectmemberaccesslogby). Для конкретного процесса, пожалуйста, обратитесь к соответствующему коду в классе UTILS.
8. Оператор SQL содержит больше, чем знак> и меньше, чем знак <1. Напишите больше, чем знак, и меньше, чем знак как:> <Например:
<delete id = "com.fashionfree.stat.accesslog.deletememberaccesslogsbefor от memberaccesslog, где accesstimestamp <= # value # </delete>
Поместите специальные персонажи в области CDATA XML:
<delete id = "com.fashionfree.stat.accesslog.deletememberaccesslogsbefore" parameterclass = "long"> <! [cdata [delete from memberaccesslog, где accesstimestamp <= # value #]]> </delete> <delete id = "com.fashionfree.cesslog.meletembercccccccccccccccccccccccccccc ParameterClass = "long"> <! [cdata [Delete From Memanccesslog, где accesstimeStamp <= # value #]]> </delete>
Рекомендуется использовать первый метод, написать его как <и> (XML не проанализирует контент в CDATA, поэтому, если CDATA содержит динамические теги, он не будет работать)
9. Включить и теги SQL организуют общие заявления SQL вместе для легкого обмена:
<sql id = "selectbasicsql"> select smplingtimestamp, onlinemum, год, месяц, неделя, день, час от Onlinemembernum </sql> <sql id = "где whereSfore"> где smplingtimestamp <= # samplingtimestamp # </sql> id = "com.fashionfree.accesslog.selectonlinemembernumsbeforeSamplingTimeStamp" parameterClass = "hashmap" resultClass = "onlinemembernum"> <include refid = "selectbasicsql" /> incule Refid = "где samplingTimestamp,onlineNum,year, month,week,day,hour from OnlineMemberNum </sql> <sql id="whereSqlBefore"> where samplingTimestamp <= #samplingTimestamp# </sql> <select id="com.fashionfree.accesslog.selectOnlineMemberNumsBeforeSamplingTimestamp" ParameterClass = "hashmap" resultClass = "onlinemembernum"> <includ refid = "selectbasicsql" /> <include refid = "wheneSqlBefore" /> < /select>
ПРИМЕЧАНИЕ. Теги SQL могут использоваться только для справки и нельзя рассматривать как отображенные операторы. Как и в приведенном выше примере, существует элемент SQL с именем SelectBasicsQL, и неправильно пытаться использовать его в качестве оператора SQL для выполнения:
sqlmapclient.queryforlist ("selectbasicsql"); ×10. Случайно выберите записи
<sql id = ”randomsql”> order by rand () лимит # номер # </sql>
Случайно выберите записи номеров из базы данных (только для MySQL)
11. Поля стежков в SQL Group путем группировки
<sql id = ”SelectGroupby> Select A.AnsWererCategoryId, A.Answererid, A.Answerername, A.QuestionCategoryid, A.Score, A.Answerednum, A.Corcretnum, A.Answerseconds, A.CreatedTimeStamp, A.LastQuestionApprovedApmap Answercategory A, Вопрос Q, где a.questioncategoryid = Q.QuestionCategoryid Group By A.AnsWererID по порядку A.AnsWererCategoryId </sql> <sql id = ”SelectGroupby> Select A.AnsWererCategoryId, a.Answerererid, a.Answerername, a.questionCategoryId, A.ScoreRIDN, A.ScoreRemerN, A.ScorernNAMER, A.ScorernNAME, A.ScorernNAME, A.ScorernNAME, A.Scorredn. A.Answerseconds, A.CreatedTimeStamp, A.LastQuestionApprovedTimeStamp, A.LastModified, Group_Concat (Q.CategoryName) в качестве категории от ответа
Примечание: функция MySQL Group_Concat используется в SQL
12. Сортировать в порядке в
①mysql:
<SQL ID = ”GroupByInarea»> SELECT MODULEID, MODULENAME, статус, LastModifierID, LastModifiedName, LastModified из StatModule, где модульид в (3, 5, 1) порядок от instr (', 3,5,1,', ','+ltrim (moduleId)+',') </sql> <sqlInered ’) Модульенамен, статус, Lastmodifierid, LastModifiedName, LastModified из StatModule, где модулид в (3, 5, 1) порядок по instr (', 3,5,1,', ','+ltrim (moduleid)+',') </sql>②sqlserver:
<SQL ID = ”GroupByinarea»> Select Moduleid, Modulename, Status, LastModifierId, LastModifiedName, LastModified из StatModule, где модульид в (3, 5, 1) порядок от Charindex (','+ltrim (moduleId)+',', ', 3,5,1,') </sql> <sqlId)+',', ', 3,5,1,') </sql> <sqlidea)+',', 3,5,1, ') <,'+ltrim (moduleid)+' Moduleid, Modulename, Status, LastModifierId, LastModifiedName, LastModified из StatModule, где модульид в (3, 5, 1) порядок Charindex (','+ltrim (moduleid)+',', ', 3,5,1,') </sql>Описание: Результаты запроса будут возвращены в порядке модулиида в списке (3, 5, 1).
MySQL: instr (str, substr)
SQLServer: Charindex (substr, str) возвращает первое положение вхождения подстроения в строковой str ltrim (str) Возвращает строку Str, его загрузочный (левый) пространственный символ удаляется
13. Resultmap ResultMap отвечает за сопоставление значений столбцов наборов SQL -запроса набора результатов в значениях атрибутов бобов Java
<resultMap id = "getActionIdandActionNumber"> <result column = "actionId" property = "actionId" jdbctype = "bigint" javatype = "long"/> <result column = "count" = "count" jdbctype = "int" javatype = "int"/> resultmap> xml code <recoutmape = "gateDIdD indAction indActiond column = "actionId" Property = "actionId" jdbctype = "bigint" javatype = "long"/> <result column = "count" property = "count" jdbctype = "int" javatype = "int"/> </resultMap>
Использование ResultMap называется явным отображением результатов, которое соответствует Crotlec.class (встроенное отображение результатов). Самым большим преимуществом использования результата является то, что он прост и удобен. Это не требует отображения указанного результата. Ибатис определяет решение, основанное на размышлении. ResultMap может обеспечить более строгую аутентификацию конфигурации, указав JDBCTYPE и Javatype.
14.Typealias
<typealias alias = "memberOnledurienduration" type = "com.fashionfree.stat.accesslog.model.memberonlineduration" /> <typealias>
Позвольте вам определить псевдоним, чтобы избежать повторного ввода чрезмерно длинных имен
15. РЕМА
<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>
В этом примере различные наборы результатов будут получены в соответствии со значением тега параметра. Если нет атрибута remapresults = "true", ибатис будет кэшировать результат, набор на первом запросе. Картирование набора результатов не будет выполнено в следующий раз (оно все равно должно быть в процессе), но будет использоваться кэшированный набор результатов.
Следовательно, если в приведенном выше примере RemapResult является ложном свойством по умолчанию, и программа написана так:
HashMap <String, Integer> hashmap = new HashMap <String, Integer> (); hashmap.put ("Tag", 1); sqlclient.queryforlist ("testforremap", hashmap); hashmap.put ("Tag", 2); sqlclient.queryforlist ("testforremap", hashmap); Код 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);Программа сообщит об ошибке при выполнении последнего запроса запроса. Причина в том, что Ибатис использует набор результатов первого запроса, а наборы результатов первого и последнего двух раз отличаются: (userid, username) и (userid, userpassword), что приводит к ошибке. Если используется свойство remapresults = "true", ibatis будет выполнять отображение набора результатов каждый раз, когда запрос выполняется, тем самым избегая ошибок (будет много накладных расходов).
16. Атрибут Prevend динамического тега добавляется в качестве префикса к содержимому результату. Когда содержимое результата метки пустое, атрибут Prepend не будет работать.
Когда атрибут Prevend существует в динамическом теге, первый атрибут Prevend его вложенных субтитров будет игнорироваться. Например:
<sql id = "wheneSql"> <dynamic preechend = "где"> <isnotnull property = "userId" presend = "Bogus"> userId = # userId # </isNotnull> <isNotempty Property = "userNam id = "wheneSql"> <dynamic preepend = "где"> <isnotnull property = "userId" preepend = "bogus"> userId = # userId # </isnotnull> <isNotempty property = "username" Precend = "и"> username = # username # </isnotempty> </dynamic> </sql>
В этом примере динамический тег содержит два суббота <isnotnull> и <isnotempty>. В соответствии с принципами, описанными выше, если False Attribute Prepend = «Fogus» не находится в теге <isnotnull>, чтобы удалить динамику, а и в теге <isnotempty> будет игнорироваться, что приведет к ошибкам SQL Syntax.
ПРИМЕЧАНИЕ. Когда динамический тег не имеет атрибута Prepend, первый атрибут Prepend его дочернего тега не игнорируется автоматически.
Вышеуказанное представляет собой 16 операторов SQL, которые ibatis использует для вас. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!