Mybatis笔记 : 动态生成临时表并引用..
Mybatis可以通过在xml里面增加update来执行DDL,所以,我们在TaUserMapper.xml里面增加:<update id="createTempTable">create temp table ${pvsTb} as select fa_login, fa_name, fa_status, fa_type, fa_crea
·
Mybatis可以通过在xml里面增加update来执行DDL,所以,我们在TaUserMapper.xml里面增加:
<update id="createTempTable" >
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;
</update>
<update id="dropTable" >
drop table if exists ${pvsTb}
</update>
<select id="selectFromTmpTable" resultType="java.util.HashMap">
select
*
from ${pvsTb} where fa_login=#{pvsLogin}
</select>
修改TaUserMapper接口,增加相应的接口方法, 用param注解的方式指定与xml一致的变量:
void createTempTable(@Param("pvsTb")String pvsTb);
void dropTable(@Param("pvsTb") String pvsTb);
Map<String,Object> 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<String,Object> lvMap= lvUserMapper.selectFromTmpTable(c_tmpTb,"caigou1");
System.out.println(lvMap);
lvUserMapper.dropTable(c_tmpTb);
}
finally{
MybatisUtils.closeSession(lvSess);
}
}
更多推荐
已为社区贡献60条内容
所有评论(0)