(总结)ibatis 动态传入表名和列名 规格严格

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

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

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

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

不多说了,代码如下

代码
 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 
12     public static void main(String[] args) {
13         /*
14          * Test test = new Test(); test.date = new
15          * Timestamp(System.currentTimeMillis()); test.name = "fffff"; try {
16          * long num = (Long) EntityManager.getSqlMapper().insertArgs(
17          * "insertOperation", "fffff", new
18          * Timestamp(System.currentTimeMillis())); logger.info("ID is " + num);
19          * } catch (SQLException e) { e.printStackTrace(); }
20          */
21         // try the dynamic table dealation
22         HashMap<String, Object> map = new HashMap<String, Object>();
23         // set the query value 
24         map.put("ID""dizhuang");
25         // set the col1 to be selected
26         map.put("col1""*");
           // set the table name
27         map.put("tablePrefix""testsocevent");
28         // set the col name which you use
           map.put("col2""NAME");
29         // map.put("ID", 1000);
30         // map.put("id", "1005");
31         try {
32             // why args is error?
33             Test test = (Test) EntityManager.getSqlMapper().queryForObject(
34                 "getTest", map);
35             logger.info("id : " + test.id);
36             logger.info("time :" + test.date);
37             logger.info("name : " + test.name);
38         } catch (SQLException e) {
39             logger.error(e.getMessage(), e);
40             // e.printStackTrace();
41         }
42     }
43 }
  // ibatis sql
  <select id="getTest" parameterClass="java.util.HashMap"
    resultClass="com.neusoft.soc.eventcenter.test.Test"
    remapResults="true">
    SELECT
        $col1$
    FROM
        $tablePrefix$
    WHERE
      $col2$ = #ID#
   </select>
 
原文地址:https://www.cnblogs.com/diyunpeng/p/1646218.html