Mybatis可以通过在xml里面增加update来执行DDL,所以,我们在TaUserMapper.xml里面增加:
create temp table ${pvsTb} as select fa_login, fa_name, fa_status, fa_type, fa_create_by, fa_create_dt, fa_update_by,
fa_update_dt, fa_email, fa_passwd, fa_remark, fa_staff_id, fa_last_notify
from ta_user order by fa_login limit 10;
drop table if exists ${pvsTb}
select
*
from ${pvsTb} where fa_login=#{pvsLogin}
修改TaUserMapper接口,增加相应的接口方法, 用param注解的方式指定与xml一致的变量:
void createTempTable(@Param("pvsTb")String pvsTb);
void dropTable(@Param("pvsTb") String pvsTb);
Map selectFromTmpTable(@Param("pvsTb") String pvsTb,@Param("pvsLogin") String pvsLogin);
请注意有的地方用$,有的地方用#, $是直接替换, #是参考占位, ..... 如果$代入的是来往客户端的参数会有SQL注入风险.
JUnit测试, 先建立临时表tmp_1,再从这个临时表中查询caigou1的记录, 然后删除临时表:
@Test
public void testDynamicSql1(){
final String c_tmpTb="tmp_1";
SqlSession lvSess=MybatisUtils.getSession();
try
{
TaUserMapper lvUserMapper=lvSess.getMapper(TaUserMapper.class);
lvUserMapper.createTempTable(c_tmpTb);
Map lvMap= lvUserMapper.selectFromTmpTable(c_tmpTb,"caigou1");
System.out.println(lvMap);
lvUserMapper.dropTable(c_tmpTb);
}
finally{
MybatisUtils.closeSession(lvSess);
}
}