在工做中有一個需求就是動態的對某張表作增刪查改,剛開始的思路是直接利用mybatis foreach標籤生成,可是在開發過程當中遇到一個問題就是必須得${}這種方式接收參數否則會報錯(具體什麼緣由請自行了解不作解釋),可是公司提倡儘可能不用這種方式(特別是參數),因此強迫症範了就想看看還有沒有什麼好的辦法。結果發現利用SQL語句構建器可以達到比較好的效果,因此就試了一下結果成功了。html
用的是mybatis版本3.1.1,mybatis3.2版本以上寫法有點不同java
/** * 新增 */ SqlBuilder.BEGIN(); String sequence = BaseUtil.getEuiSeq("SEQ_QC_POLICY", ""); SqlBuilder.INSERT_INTO("T_QC_POLICY"); SqlBuilder.VALUES("QC_POLICY_SNO", "#{id}"); SqlBuilder.VALUES("QC_POLICY_NAME", "#{name}"); Map<String,Object> values =new HashMap<>(); values.put("sql", SqlBuilder.SQL()); values.put("id", sequence); values.put("name", "zhangsan"); /* 查詢 SqlBuilder.SELECT("*"); SqlBuilder.FROM("T_QC_TASK"); SqlBuilder.WHERE("TASK_SNO=#{id}"); Map<String,Object> values =new HashMap<>(); values.put("sql", SqlBuilder.SQL()); values.put("id", 879347); */ WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); /* 此段代碼能夠忽略 String[] names = wac.getBeanDefinitionNames(); for(int i=0; i<names.length; i++){ System.out.println("---"+names[i]); }*/ SqlSessionFactory sf = (SqlSessionFactory)wac.getBean("sqlSessionFactory0"); SqlSessionTemplate sessionTemplate = new SqlSessionTemplate(sf); sessionTemplate.insert("abc", values);
因爲項目種進行了封裝因此沒辦法用spring註解生成SlqSessionTemplate對象,因此只能經過WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); 獲取上下文,spring
而後獲取到SqlSessionFactorysql
而後在經過SqlSessionFactory構造SqlSessionTemplate。session
接下來xml文件中的寫法就比較簡單了mybatis
<select id="abc" parameterType="java.util.HashMap" resultType="java.util.HashMap"> ${sql} </select>
參考:http://www.mybatis.org/mybatis-3/zh/index.htmlui