一、内置参数说明
MyBatis有两个内置参数,分别是_parameter、_datebaseId,也就是说这两个参数是不需要我们定义也可以直接拿来使用的。
_parameter:代表整个参数,如果传入的是单个参数或对象,那么_parameter就可以代表这个参数或对象,如果传入的是多
个参数,那么_parameter代表的就是一个map(MyBatis会默认将参数封装为map)
_datebaseId:代表我们当前使用的数据库别名,前提是我们配置了databaseIDProvider标签
databaseIDProvider标签用于配置多个数据库,配置信息如下:
<environments default="dev_mysql">
<environment id="dev_mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<environment id="dev_oracle">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle" />
</databaseIdProvider>
二、应用场景的说明
1._parameter
传入参数:
/**
* 多个参数查询user集合
*
* @param list
* @return
*/
@SuppressWarnings("unchecked")
List<User> getUsersByListParam(@Param("list") List list);
接口传入的参数是一个list,一般情况下我们可以直接使用list来获取这个参数,但是使用_parameter.list也可以达到同样的效果
<select id="getUsersByListParam" resultType="com.xuyong.entity.User">
select * from user
<foreach collection="_parameter.list" item="item" open="where user_id in(" close=")" separator=",">
#{item}
</foreach>
</select>
2._databaseId
当前默认开启的是mysql,当更换数据库时,如果能够正确的使用_databaseId,就可以避免再去修改Sql。
<select id="selectUserById" resultType="com.xuyong.entity.User">
<if test="_databaseId == 'mysql'">
select * from user
<where>
user_id = #{id}
</where>
</if>
<if test="_databaseId == 'oracle'">
select * from user
<where>
user_id = #{id}
</where>
</if>
</select>
或者直接使用databaseId属性:
<select id="selectUserById" resultType="com.xuyong.entity.User" databaseId="mysql">
select * from user
<where>
user_id = #{id}
</where>
</select>