mysql mybatis 临时表_Mybatis笔记 : 动态生成临时表并引用..

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);

}

}


版权声明:本文为weixin_39613692原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。