mybatis利用example檔案進行異表欄位模糊查詢

Lelontar發表於2017-02-13

1.首先建立一個po表


po表中 新增不是本表的資料

例如

public class UserInfoPo extends UserInfo {


    private String deptId;//部門id


    private String uid;//使用者id


    private String dept;//部門


    private String position;//部門的職位


public String getDeptId() {
return deptId;
}

}


在example檔案中新增 模糊查詢用到的欄位


public class UserInfoExample {

private String position;//部門的職位

}


在xml檔案中

對映欄位

<resultMap id="BaseResultMap1" type="com.integral.po.UserInfoPo" extends="BaseResultMap">
 
  <result column="uid" property="uid" jdbcType="VARCHAR" />
  <result column="dept" property="dept" jdbcType="VARCHAR" />
  <result column="position" property="position" jdbcType="VARCHAR"/>
 
  </resultMap>


並且寫出sql


<select id="selectUserByExample" resultMap="BaseResultMap1" parameterType="com.integral.entity.UserInfoExample" >
    select u.*,d.* from t_userinfo u,t_user_dept d
    <!-- <if test="_parameter != null" >
      <include refid="Example_Where_Clause" />
    </if> -->
    where u.id = d.uid 
    <if test="position != null" > <!--此處的position 與 example和po中的欄位一致--> 
        and d.position like #{position,jdbcType=VARCHAR}

<!--d.position  是欄位名字 -->
    </if>    
   
    <if test="orderByClause != null" >
      order by ${orderByClause}
    </if>
  </select>


在mapper檔案中


寫出方法:

/**
     * 根據部門的模糊查詢獲取所有使用者
    * @description:     
    * @author:xuzn   
    * @date:2017-2-13 上午9:41:52      
    * @modify:
    * @param example
    * @return   
    * @version:    
    *
     */
    List<UserInfoPo> selectUserByExample(UserInfoExample example);



在serviceImpl中  方法如下:


/**
* 模糊查詢獲取使用者
*/
@Override
public List<UserInfoPo> selectUserByExample(UserInfoPo po) {
UserInfoExample example = new UserInfoExample();
Criteria criteria = example.createCriteria();

//判斷 欄位是否為空    由po獲取傳過來的資料
if(StringUtils.hasText(po.getPosition())){

//example檔案中 將 position賦值
example.setPosition("%"+po.getPosition()+"%");
}

List<UserInfoPo> list = userInfoMapper.selectUserByExample(example);
if (list.size()>0) {
return list;
}else {
return null;
}
}



controller層 方法 如下:


@RequestMapping("selectUserByExample")
@ResponseBody
public LBResult selectUserByExample(UserInfoPo po,
HttpServletRequest request,
HttpServletResponse response) {

List<UserInfoPo> list = userInfoService.selectUserByExample(po);
try {
if (list.size()>0) {
return LBResult.build(400, "成功", list);
}else {
return LBResult.build(404, "失敗");
}
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage());
return LBResult.build(500, ExceptionUtil.getStackTrace(e));
}
}

相關文章