1. 程式人生 > >Mybatis like 模糊查詢問題

Mybatis like 模糊查詢問題

大家好,我只是IT行業的一隻菜鳥,最近做的專案要求用Mybatis技術,在做一個模糊查詢的時候,遇到點麻煩,經過1天的研究,反覆嘗試,終於找到問題所在,藉此機會與大家分享一下,謝謝!

Mybatis配置如下:

  <select id="getAll" resultMap="OaEmplyeeInfoResultMap"
  parameterType="com.deppon.oa.module.oaEmplyeeInfo.domain.OaEmplyeeInfo">
  <![CDATA[
   SELECT 
  ]]>
  <include refid="select_param" />
  <![CDATA[
   FROM OM_EMPLOYEE 
  ]]>
  <where>
      <if test="empcode!=null">
    AND EMPCODE = #{empcode}
      </if>
   <if test="empname!=null">
    AND EMPNAME LIKE #{empname}

      </if>
   
  </where>
 </select>

Dao層如下:

public List<OaEmplyeeInfo> getAllByName(OaEmplyeeInfo oaEmplyeeInfo,String empname){
  List<OaEmplyeeInfo> list=null;
  Map map=new HashMap();
  map.put("empname", empname);
  list=(List<OaEmplyeeInfo>) getSqlSession().selectList("com.deppon.oa.module.oaEmplyeeInfo.domain.OaEmplyeeInfo.getAll", map);
  return list;
 }

測試程式碼如下:

public void testQuery(){
  List<OaEmplyeeInfo> fos=null;
   fos = oaEmplyeeInfoDao.getAllByName(null,"王");
  for(OaEmplyeeInfo li:fos){
   System.out.println(li.getEmpname());
  }
  Assert.assertNotNull(fos.get(0).getCardno());
 }

發現怎麼都查不出來資料,最後查詢資料才得知:

原來Mybatis用like進行模糊查詢的時候,配置與所用的資料庫有關係,總結了下,具體如下:

1、mysql :LIKE CONCAT('%',#{empname},'%' ) 或者 LIKE CONCAT('%',‘${empname}’,'%' )

2、oracle:LIKE '%'||#{empname}||'%'

我用的是oracle  把配置檔案改為:

<select id="getAll" resultMap="OaEmplyeeInfoResultMap"
  parameterType="com.deppon.oa.module.oaEmplyeeInfo.domain.OaEmplyeeInfo">
  <![CDATA[
   SELECT 
  ]]>
  <include refid="select_param" />
  <![CDATA[
   FROM OM_EMPLOYEE 
  ]]>
  <where>
      <if test="empcode!=null">
    AND EMPCODE = #{empcode}
      </if>
   <if test="empname!=null">
    AND EMPNAME LIKE '%'||#{empname}||'%'
      </if>
   
  </where>
 </select>

執行測試,查詢OK