项目中需要根据不同的表名和列名生成不同的select语句,我想ibatis这里也应该是用预编译的形式存储????
不太了解具体原理,反正我知道在用oci库的时候,是可以的;用sprinf("sql","xx","xx"),一下,就可以了。oci库肯定是用预编译的形式干的!
于是,我上网查了查,感觉类似的问题有,可没给出一个完整的例子。想了一想,既然你能动态传入map,map里面存储了相应的查询值,那你
ibatis肯定也能传入其他元数据信息吧。测试了一下,可以!OK,搞定了:)
不多说了,代码如下
代码
<select id="getTest" parameterClass="java.util.HashMap"
resultClass="com.neusoft.soc.eventcenter.test.Test"
remapResults="true">
SELECT
$col1$
FROM
$tablePrefix$
WHERE
$col2$ = #ID#
</select>
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 " , " * " );
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
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 }
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
resultClass="com.neusoft.soc.eventcenter.test.Test"
remapResults="true">
SELECT
$col1$
FROM
$tablePrefix$
WHERE
$col2$ = #ID#
</select>