2012-07-16 4 views
0

MyBatis 3.1.1은 매번 교체 할 때 prepared statement params, 또는 $ {...}에 대해 # {...}을 허용합니다.MyBatis : "컴파일 타임"매퍼 매개 변수 대체, 준비된 stmt를 유지하지만 테이블 이름을 구성 가능하게 만드시겠습니까?

SQL 문을 매개 변수화하는 데 사용할 수있는 내용이 누락되었지만 여전히 준비된 문을 유지합니다. 즉 구성 중에 교체하십시오.

어떻게하면됩니까? 어쩌면 일부 SQL 조각을 사용하고 있습니까?

업데이트 :

내가 발견은 :

<sql id="userColumns"> id,username,password </sql> 
<select id="selectUsers" parameterType="int" resultType="hashmap"> 
    SELECT <include refid="userColumns"/> some_table WHERE id = #{id} 
</select> 

${...}이 그 안에 사용할 수있는 경우 http://www.mybatis.org/core/sqlmap-xml.html#sql 이 그것을 것입니다 참조하십시오.

답변

1

나는 ... 나는 그것을 발견

<sql id="userColumns"> id,username,password </sql> 

그리고

<select id="selectUsers" parameterType="int" resultType="hashmap"> 
    SELECT <include refid="userColumns"/> 
    FROM some_table 
    WHERE id = #{id} 
</select> 

그래서 나는 그에서 $ {...}를 사용합니다 생각하고 거기에 저를 얻어야한다.

<sql> 이후 http://www.mybatis.org/core/sqlmap-xml.html#sql

+0

그래서 이것은 효과가 없었습니다.'$ {...} '는 SQL 조각이 사용될 때 단순히 그대로 유지되고 확장됩니다. –

1

내 프로젝트에는이 경우 매우 간단한 해결책이 있습니다.

데이터 개체에 TABLENAME이라는 문자열이 있습니다. 개체를 만들 때 tablename을 초기화합니다. 그리고 sqls에는 tablename enquoutet이 있습니다. 데이터 객체의

:

String TABLENAME; 
public String getTABLENAME() {return TABLENAME;} 
public void setTABLENAME(String tablename) {this.TABLENAME = TABLENAME;} 

SQL을에서 :

<delete id="simpleDelete" parameterClass="Integer"> 
    delete from ${jdbc.schema}.$TABLENAME$ 
    WHERE ID = #ID# 
</delete> 

이 최선의 해결책 인 경우 나도 몰라,하지만 그것은 아주 잘 작동합니다. 나는 더 나은 해결책을 위해 열려 있습니다.