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

目录

  • mapper.xml根据数据库类型选择对应SQL语句
    • 1、spring-database.xml文件中配置
    • 2、mapper.xml文件中配置
  • mapper.xml动态SQL语句用法
    • if
    • trim
    • where
    • set
    • choose(when、otherwise)
    • foreach

mapper.xml根据数据库类型选择对应SQL语句
1、spring-database.xml文件中配置
db2oraclemysql

对于sessionFactory的配置,主要是标红的语句一定要有,其它按照自己原有的配置走。
【mybatis|mybatis mapper.xml中如何根据数据库类型选择对应SQL语句】 helperDialect=oraclereasonable=truesupportMethodsArguments=trueparams=count=countSqlautoRuntimeDialect=true


2、mapper.xml文件中配置
select * from SM_USERS_TB select * from SM_USERS_TB

若写上databaseId = "mysql",则在数据源为mysql类型时,自动执行该SQL语句,若不写databaseId ,且同时存在相同ID的SQL语句,则只要是非mysql数据库的数据源,都会调用该条SQL语句。

mapper.xml动态SQL语句用法 mybatis|mybatis mapper.xml中如何根据数据库类型选择对应SQL语句
文章图片

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

if
用于判断示例
update smbms_useruserCode=#{userCode},userName=#{userName},userPassword=#{userPassword},gender=#{gender},phone=#{phone},address=#{address},userRole=#{userRole},createdBy=#{createdBy},where id=#{id}


trim
  • trim 属性 prefix suffix prefixOverrides suffixOverrides 更灵活地去除多余关键字 替代where和set
  • if+trim 使用if+trim替代if+set进行更新用户表数据,效果一样的 如下:
update smbms_user userCode = #{userCode}, userCode = #{userName }, userPassword=#{userPassword },

其中:
  • prefix表示有一个if成立则插入where语句
  • suffix表示后缀,插入到最后,与perfix正好相反
  • suffixOverrides="xxx"表示如果最后生成的sql语句多一个xxx,则自动去掉
  • prefixOverrides的意思是去掉前缀,和suffixOverrides的使用正好相反
这里如果任意一个条件为true,元素会插入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 AND userCode LIKE CONCAT('%',#{usercode},'%')AND userRole=#{userrole}AND gender=#{gender}


set
update smbms_useruserCode=#{userCode},userName=#{userName},userPassword=#{userPassword},gender=#{gender},phone=#{phone},address=#{address},userRole=#{userRole},createdBy=#{createdBy},where id=#{id}


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


foreach
迭代一个集合,通常用于in条件 属性 item index collection:必须指定 list array map-key open separator close
select * from smbms_user where userCode in#{userCode}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    推荐阅读