MyBatis動態傳入WHERE子句表名和SELECT子句列名

文章來源:MyBatis動態傳入WHERE子句表名和SELECT子句列名


要在項目中實現動態傳入表名、列名,你需要將***Mapper.XML配置文件做如下修改:
1、添加屬性statementType="STATEMENT"
備註:statementType:STATEMENT(非預編譯)、PREPARED(預編譯)或 CALLABLE中的任意一個
這就告訴 MyBatis 分別使用Statement(STATEMENT),PreparedStatement(PREPARED)或CallableStatement(CALLABLE)。默認:PREPARED。

2、將SQL語句裏的所有變量取值都改成${xxxx},而不是#{xxx}
實例[mapper文件]:<select id="getMaxValueForColumn" parameterType="hashmap" resultType="integer" statementType="STATEMENT">
<![CDATA[
select max(${id}) from ${tabName}
]]>
</select>
java代碼:
public interface TestMappper {
/**
* 獲取指定表名指定列名的最大值
*/
public int getMaxValueForColumn(Map<String,Object) args);
}

public class Test {
@Autowired
TestMappper testMappper;
public void getMaxVal() {
Map<String,Object> args = new HashMap<String,Object>();
args.put("tabName", "t_student");
args.put("id", "n_age");
int maxVal = testMappper.getMaxValueForColumn(args);
System.out.println("max age=" maxVal);
}
}

3、使用${xxxx}方式傳入的數據直接顯示生成在sql中,對於字符串數據,需要手動加上引號。如下:
<select id="getMaxValueForColumn" parameterType="hashmap" resultType="integer" statementType="STATEMENT">
<![CDATA[
select * from ${tabName} where c_name=${name}
]]>
</select>
<!--
如果上面語句傳入tabName=t_student、c_name=zhangsan,則得到語句如下:
select * from t_student where c_name=zhangsan
明顯c_name=zhangsan這裏需要引號。
修改如下:在傳遞參數的時候就加上引號:
tabName=t_student
c_name=‘zhangsan’
這樣就可以了
-->



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章