您好,登錄后才能下訂單哦!
這篇“mybatis mapper.xml中怎么根據數據庫類型選擇對應SQL語句”文章,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要參考一下,對于“mybatis mapper.xml中怎么根據數據庫類型選擇對應SQL語句”,小編整理了以下知識點,請大家跟著小編的步伐一步一步的慢慢理解,接下來就讓我們進入主題吧。
<bean id="vendorProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="properties"> <props> <prop key="DB2">db2</prop> <prop key="Oracle">oracle</prop> <prop key="MySQL">mysql</prop> </props> </property> </bean> <bean id="databaseIdProvider" class="org.apache.ibatis.mapping.VendorDatabaseIdProvider"> <property name="properties" ref="vendorProperties"/> </bean>
對于sessionFactory的配置,主要是標紅的語句一定要有,其它按照自己原有的配置走。
<!-- sessionFactory 將spring和mybatis整合 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="databaseIdProvider" ref="databaseIdProvider" /> <property name="configLocation" value="classpath:mybatis-config.xml" /> <property name="mapperLocations" value="classpath*:/com/sunyard/cop/IF/mybatis/mapping/*.xml" /> <property name="plugins"> <array> <bean class="com.github.pagehelper.PageInterceptor"> <property name="properties"> <!--使用下面的方式配置參數,一行配置一個,后面會有所有的參數介紹 --> <value> helperDialect=oracle reasonable=true supportMethodsArguments=true params=count=countSql autoRuntimeDialect=true </value> </property> </bean> </array> </property> </bean>
<select id="selectByUserNo" databaseId="mysql" parameterType="java.lang.String" resultMap="UserResultMap"> select * from SM_USERS_TB </select> <select id="selectByUserNo" parameterType="java.lang.String" resultMap="UserResultMap"> select * from SM_USERS_TB </select>
若寫上databaseId = "mysql",則在數據源為mysql類型時,自動執行該SQL語句,若不寫databaseId ,且同時存在相同ID的SQL語句,則只要是非mysql數據庫的數據源,都會調用該條SQL語句。
用于實現動態SQL的元素主要有
用于判斷 示例
<update id="upda" parameterType="User"> update smbms_user <set> <!--修改時可以判斷userCode是否是空的如果不為空就把數據庫中這一列的值更改掉 如果為空就不修改這一列數據庫這一列的值也不會為Null--> <if test="userCode!=null and userCode!=''"> userCode=#{userCode}, </if> <if test="userName!=null and userName!=''"> userName=#{userName}, </if> <if test="userPassword!=null and userPassword!=''"> userPassword=#{userPassword}, </if> <if test="gender!=null and gender!=''"> gender=#{gender}, </if> <if test="phone!=null and phone!=''"> phone=#{phone}, </if> <if test="address!=null and address!=''"> address=#{address}, </if> <if test="userRole!=null and userRole!=''"> userRole=#{userRole}, </if> <if test="createdBy!=null and createdBy!=''"> createdBy=#{createdBy}, </if> </set> where id=#{id} </update>
trim
屬性 prefix suffix prefixOverrides suffixOverrides 更靈活地去除多余關鍵字 替代where和set
if+trim
使用if+trim替代if+set進行更新用戶表數據,效果一樣的 如下:
<update id ="modify" parameterType="User"> update smbms_user <trim prefix="set" suffixOverrides="," suffix="where id = #{id}"> <if test="userCode != null">userCode = #{userCode},</if> <if test="userName!= null">userCode = #{userName },</if> <if test="userPassword!= null">userPassword=#{userPassword },</if> </trim> </update>
其中:
prefix
表示有一個if成立則插入where語句
suffix
表示后綴,插入到最后,與perfix正好相反
suffixOverrides="xxx"
表示如果最后生成的sql語句多一個xxx,則自動去掉
prefixOverrides
的意思是去掉前綴,和suffixOverrides的使用正好相反
這里如果任意一個<if>條件為true,<trim>元素會插入WHERE,并且移除緊跟where后面的(and或or)
SELECT u.*,r.roleName,r.roleCode FROM smbms_user u INNER JOIN smbms_role r ON u.userrole=r.id <where> <!-- where相當于 select * from pet where id=1 中的where一樣 --> <if test="usercode !=null and usercode !=''"> AND userCode LIKE CONCAT('%',#{usercode},'%') </if> <if test="userrole!=0"> AND userRole=#{userrole} </if> <if test="gender!=null and gender!=0"> AND gender=#{gender} </if> </where>
<update id="upda" parameterType="User"> update smbms_user <set><!-- 與修改時搭配使用我們修改set的sql語句的‘,'的最后一列會被自動省略 --> <if test="userCode!=null and userCode!=''"> userCode=#{userCode}, </if> <if test="userName!=null and userName!=''"> userName=#{userName}, </if> <if test="userPassword!=null and userPassword!=''"> userPassword=#{userPassword}, </if> <if test="gender!=null and gender!=''"> gender=#{gender}, </if> <if test="phone!=null and phone!=''"> phone=#{phone}, </if> <if test="address!=null and address!=''"> address=#{address}, </if> <if test="userRole!=null and userRole!=''"> userRole=#{userRole}, </if> <if test="createdBy!=null and createdBy!=''"> createdBy=#{createdBy}, </if> </set> where id=#{id} </update>
相當于Java中switch語句 當when有條件滿足的時候,就跳出choose
<choose> <when test ="條件1"> …</when> <when test ="條件2"> …</when> <when test ="條件3"> …</when> … <otherwise>…</otherwise> </choose>
迭代一個集合,通常用于in條件 屬性 item index collection:必須指定 list array map-key open separator close
<select id="getUserName" resultType="User" parameterType="java.util.List"> select * from smbms_user where userCode in <foreach collection="list" open="(" close=")" item="userCode" separator=","> #{userCode} </foreach> </select>
以上是“mybatis mapper.xml中怎么根據數據庫類型選擇對應SQL語句”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。