一、MyBatis动态SQL的两个内置参数
_parameter:
_databaseId:
接口代码:
//内置参数的测试
public List<Employee> getEmpsTestInnerParamter(Employee employee);
xml代码:
<!--两个内置参数: 不只是方法传递过来的参数可以被用来判断,取值。。。 mybatis默认还有两个内置参数: _parameter:代表整个参数 单个参数:_parameter就是这个参数 多个参数:参数会被封装为一个map;_parameter就是代表这个map _databaseId:如果配置了databaseIdProvider标签。 _databaseId 就是代表当前数据库的别名 --> <select id="getEmpsTestInnerParamter" resultType="emp"> <if test="_databaseId=='mysql'"> select * from tbl_employee <if test="_parameter != null"> where last_name=#{lastName} </if> </if> <if test="_databaseId=='oracle'"> select * from employees <if test="_parameter != null"> where last_name=#{lastName} </if> </if> </select>
全局配置文件mybatis-config.xml:
<!-- databaseIdProvider:支持多数据库厂商 type:作用就是得到数据库厂商的标识,mybatis就能根据数据库厂商的标识来执行不同的sql。 --> <databaseIdProvider type="DB_VENDOR"> <!-- 为不同的数据库厂商起别名 --> <property name="MySQL" value="mysql"/> <property name="Oracle" value="oracle"/> <property name="SQL Server" value="sqlserver"/> </databaseIdProvider>
_parameter相当于传入的参数employee,判断employee是否为空,若不为空则执行where条件。
即简单一句话,有值才会执行,当为null,就成了查所有。
二、bind绑定
在增删改查的标签中还可以写bind标签。
<select id="getEmpsTestInnerParamter" resultType="emp"> <!-- bind:可以将OGNL表达式的值绑定到一个变量中,方便后来引用这个变量的值 --> <bind name="_lastName" value="'%'+lastName+'%'"/> <if test="_databaseId=='mysql'"> select * from tbl_employee <if test="_parameter != null"> where last_name like #{_lastName} </if> </if> </select>
把传来的参数拼接后绑定一个变量。或者直接使用 '%${lastName}%'拼接(不安全)。
三、sql标签
抽取可重用的sql片段,方便后面引用。
<!--抽取可重用的sql片段,方便后面引用 1、sql抽取:经常将要查询的列名,或者插入用的列名抽取出来方便引用 2、include来引用已经抽取的sql 3、include还可以自定义一些property,sql标签内部就能使用自定义的属性,然后${}取值,#{}不能用。 --> <sql id="insertColumn"> last_name,email,gender,d_id </sql>
引用:在需要该sql片段的地方引用
<include refid="insertColumn"></include>