ibatis 动态传入表名

项目中需要根据不同的表名和列名生成不同的select语句,我想ibatis这里也应该是用预编译的形式存储????

不太了解具体原理,反正我知道在用oci库的时候,是可以的;用sprinf("sql","xx","xx"),一下,就可以了。oci库肯定是用预编译的形式干的!

于是,我上网查了查,感觉类似的问题有,可没给出一个完整的例子。想了一想,既然你能动态传入map,map里面存储了相应的查询值,那你

ibatis肯定也能传入其他元数据信息吧。测试了一下,可以!OK,搞定了:)

不多说了,代码如下

[java]
view plain
copy

  1. Java code :
  2. // just a releation to the table stored in db
  3. public class Test {
  4. public String name;
  5. public Timestamp date;
  6. public int id;
  7. }
  8. public class TestInsert {
  9. // logger class you can replace it to System.out.println
  10. static Log logger = LogFactory.getLog(TestInsert.class);
  11. public static void main(String[] args) {
  12. /*
  13. * Test test = new Test(); test.date = new
  14. * Timestamp(System.currentTimeMillis()); test.name = "fffff"; try {
  15. * long num = (Long) EntityManager.getSqlMapper().insertArgs(
  16. * "insertOperation", "fffff", new
  17. * Timestamp(System.currentTimeMillis())); logger.info("ID is " + num);
  18. * } catch (SQLException e) { e.printStackTrace(); }
  19. */
  20. // try the dynamic table dealation
  21. HashMap<String, Object> map = new HashMap<String, Object>();
  22. // set the query value
  23. map.put("ID", "dizhuang");
  24. // set the col1 to be selected
  25. map.put("col1", "*");
  26. // set the table name
  27. map.put("tablePrefix", "testsocevent");
  28. // set the col name which you use
  29. map.put("col2", "NAME");
  30. // map.put("ID", 1000);
  31. // map.put("id", "1005");
  32. try {
  33. // why args is error?
  34. Test test = (Test) EntityManager.getSqlMapper().queryForObject(
  35. "getTest", map);
  36. logger.info("id : " + test.id);
  37. logger.info("time :" + test.date);
  38. logger.info("name : " + test.name);
  39. } catch (SQLException e) {
  40. logger.error(e.getMessage(), e);
  41. // e.printStackTrace();
  42. }
  43. }
  44. // ibatis sql
  45. <select id="getTest" parameterClass="java.util.HashMap"
  46.   resultClass="com.neusoft.soc.eventcenter.test.Test"
  47.   remapResults="true">
  48.   SELECT
  49.   $col1$
  50.   FROM
  51.   $tablePrefix$
  52.   WHERE
  53. $col2$ = #ID#
  54. </select>
时间: 2024-08-03 10:53:39

ibatis 动态传入表名的相关文章

MyBatis,动态传入表名,字段名的解决办法

转载:http://luoyu-ds.iteye.com/blog/1517607 今天做项目,遇到的问题就是需求修改数据表的记录,而且字段名都不是固定的,也就是说是需要通过参数传入的, 本来这也不是什么难题,按照平常的JDBC,或者hibernate里也都好实现,可问题是现在项目用的mybatis这个持久层框架,按照我的刚开始的想法初使sql是这样的, 当我满心欢喜的运行才发现不行,遂百度之,办法种用尽,还是不行,有人给我说需要把字段那一项换成${field},这种办法来取,试之,无果,于是我

mybatis动态传入表名、列名

原文:http://luoyu-ds.iteye.com/blog/1517607 要实现动态传入表名.列名,需要做如下修改 添加属性statementType="STATEMENT" (可省略) 同时sql里的属有变量取值都改成${xxxx},而不是#{xxx} <delete id="deleteTableData" parameterType="java.util.Map" statementType="STATEMENT&

[转]MyBatis动态传入表名,字段名参数的解决办法

一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这种情况下,就需要构建sql来动态传入表名.字段名了.现在对解决方法进行下总结,希望对遇到同样问题的伙伴有些帮助. 动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态sql进行处理.下面让我们先

mysql 动态传入表名参数的存储过程写法

delimiter // create procedure oneKey(in newName varchar(250),in oldName varchar(250),in idNum INT) BEGIN SET @sqlStmt = CONCAT('insert into ',newName,' (`name`,`age`,`sex`,`major`,`pass`,`photo`) select `name`,`age`,`sex`,`major`,`pass`,`photo` from

MyBatis动态传入表名,字段名参数的解决办法

<select id="getSearchTableInfo" parameterType="java.util.HashMap"    resultType="TableProfile" statementType="STATEMENT">        select id as unid,name        from ${tb}    </select> AA statementType:STA

oracle使用execute immediate方式完成函数动态传入表名并操作 返回新的主键id值

CREATE OR REPLACE FUNCTION SEQ1 (v_bname in VARCHAR2) return NUMBER is v_bcount NUMBER; BEGIN execute immediate 'select count(*) from '||v_bname into v_bcount; dbms_output.put_line(v_bname||'------------------'||v_bcount); return(v_bcount+1); end SEQ

mybatis动态调用表名和字段名

一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这种情况下,就需要构建sql来动态传入表名.字段名了.现在对解决方法进行下总结,希望对遇到同样问题的伙伴有些帮助. 动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态sql进行处理.下面让我们先

ibatis动态的传入表名、字段名

ibatis动态的传入表名.字段名,主要传入表名和字段名的不一致. Java代码: Map<String,Object> params = new HashMap<String,Object>(); params.put("tableName", tableName); params.put("sidFieldName", sidFieldName); params.put("lastDateFiledName", las

Oracle中存储过程传入表名学习

Oracle中存储过程传入表名: 一.动态清除该表的数据 create or replace procedure p_deletetable(i_tableName in varchar2) as --定义变量存放动态的SQL语句 dynamic_drop_sql varchar2(500); begin dynamic_drop_sql :=  'DELETE  FROM ' || i_tableName ; --执行动态SQL语句 execute immediate dynamic_drop