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

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐