一、两个内置参数
不只是方法传递过来的参数可以被用来判断,取值。
mybatis默认还有两个内置参数:
(1)_parameter:代表整个参数
单个参数:_parameter就是这个参数
多个参数:参数会被封装为一个map;_parameter 就是代表这个 map
(2)_databaseId:如果配置了databaseIdProvider标签。
_databaseId:就是代表当前数据库的别名(如mysql,Oracle)
若在 mybatis 配置文件中配置了 databaseIdProvider , 则可以使用 “_databaseId”变量, 这样就可以根据不同的数据库厂商构建特定的语句
二、测试
在接口中声明方法:
public List<Employee> getEmpsTestInnerParameter(Employee employee);
在对应的 xml 中配置:
<!--
public List<Employee> getEmpsTestInnerParameter(Employee employee);
-->
<select id="getEmpsTestInnerParameter" resultType="Employee">
<if test="_databaseId==‘mysql‘">
select * from tbl_employee
<if test="_parameter!=null"> <!-- 先通过_parameter判断传递的参数中是否有值-->
where last_name = #{_parameter.lastName}
</if>
</if>
<if test="_databaseId==‘oracle‘">
select * from employees
<if test="_parameter!=null">
where last_name = #{lastName}
</if>
</if>
</select>
在核心配置文件 mybatis-config.xml 中动态切换数据库
<environments default="dev_mysql"> 切换mysql或Oracle数据库环境
<environment id="dev_mysql">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
<environment id="dev_oracle">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${orcl.driver}" />
<property name="url" value="${orcl.url}" />
<property name="username" value="${orcl.username}" />
<property name="password" value="${orcl.password}" />
</dataSource>
</environment>
</environments>
<databaseIdProvider type="DB_VENDOR">
<!-- 为不同的数据库厂商起别名 -->
<property name="MySQL" value="mysql"/>
<property name="SQL Server" value="sqlserver"/>
<property name="DB2" value="db2"/>
<property name="Oracle" value="oracle" />
</databaseIdProvider>