欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

mybatis mapper.xml中如何根据数据库类型选择对应SQL语句

时间:2023-01-02 09:22:31|栏目:JAVA代码|点击:

mapper.xml根据数据库类型选择对应SQL语句

1、spring-database.xml文件中配置

  <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>

2、mapper.xml文件中配置

    <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语句。

mapper.xml动态SQL语句用法

用于实现动态SQL的元素主要有

if

用于判断  示例

<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

  • 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) 

where

    
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>

set

<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>

choose(when、otherwise)

相当于Java中switch语句 当when有条件满足的时候,就跳出choose

<choose>
	<when test ="条件1"> …</when>
	<when test ="条件2"> …</when>
	<when test ="条件3"> …</when>
	…
	<otherwise>…</otherwise>
</choose>	

foreach

迭代一个集合,通常用于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>

上一篇:java中容器(顶层容器和中间容器)的布局管理器详解

栏    目:JAVA代码

下一篇:java的依赖倒置原则你了解多少

本文标题:mybatis mapper.xml中如何根据数据库类型选择对应SQL语句

本文地址:http://www.codeinn.net/misctech/222786.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有