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

时间:2022-02-24 07:42:17

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

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

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

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

不多说了,代码如下

(总结)ibatis 动态传入表名和列名(总结)ibatis 动态传入表名和列名代码
 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>