MyBatis动态匹配搜索
程序员文章站
2024-03-05 16:44:19
...
问题描述:前端页面一个搜索框中用户,输入查询的数据。那么问题来了,比如,不确定用户输入的是姓名,手机号,工号,车牌号,车架号,二维码,地址等。那么在不确定用户到底输入值是什么的情况下,如何将查询结果返回到前端页面?
解决问题的方法:用Mybatis 的 动态Sql 拼接。
现在给出相关代码:
controller 层代码,注意这里传的是一个对象Car
@RequiresPermissions("admin:car:list")
@RequestMapping(value="/car/list",method=RequestMethod.POST,produces="application/json;charset=UTF-8")
@ResponseBody
public PageDataResult loadData(Integer page, Integer rows,String key){
Car car = new Car();
if(StringUtils.isNotEmpty(key))
{
car.setUsername("%"+key+"%");
car.setJobnumber("%"+key+"%");
car.setCarnumber("%"+key+"%");
car.setUsermobile("%"+key+"%");
car.setChejianumber("%"+key+"%");
car.setRcode("%"+key+"%");
}
PageDataResult result = car_Service.getItemList(page, rows, car);
List<Car> List = (List<Car>)result.getRows();
result.setRows(List);
return result;
}
service 层代码
/**
* 分页插件
* @param page
* @param rows
* @param key
* @return
*/
PageDataResult getItemList(int page, int rows,Car car);
serviceImpl层代码:
public PageDataResult getItemList(int page, int rows, Car key) {
// TODO Auto-generated method stub
// CarExample example = new CarExample();
// Criteria criteria = example.createCriteria();
// //对车辆号码进行模糊查询
// criteria.andUsermobileLike("%"+key+"%");
//分页处理
PageHelper.startPage(page, rows);
// carMapper.selectByContiditions(key);
// List<Car> list = carMapper.selectByExample(example);
List<Car> list = carMapper.selectByContiditions(key);
//创建一个返回值对象
PageDataResult result = new PageDataResult();
result.setRows(list);
//取记录总条数
PageInfo<Car> pageInfo = new PageInfo<>(list);
result.setTotal(pageInfo.getTotal());
return result;
}
dao 层代码:
List<Car> selectByContiditions(Car key);
Mapper.xml 代码:
<!-- 多条件查询 selectByContiditions -->
<select id="selectByContiditions" resultType="java.util.Map">
SELECT
<include refid="Base_Column_List" />
FROM
cx_car
WHERE
1 = 1
AND
kdgs = '顺丰'
<if test="username != null">
and username like #{username}
</if>
<if test="jobnumber != null">
or jobnumber like #{jobnumber}
</if>
<if test="carnumber != null">
or carnumber like #{carnumber}
</if>
<if test="usermobile != null">
or usermobile like #{usermobile}
</if>
<if test="chejianumber != null">
or chejianumber like #{chejianumber}
</if>
<if test="rcode != null">
or rcode like #{rcode}
</if>
GROUP BY
carnumber
ORDER BY
id DESC
</select>
至此,Mybatia动态拼接Sql完成。
对比,单个字段的模糊查询:
Controller层代码:
@RequiresPermissions("admin:carnote:list")
@RequestMapping(value="/carnote/list",method=RequestMethod.GET)
public ModelAndView list(Integer page, Integer rows,String key,ModelMap map){
try {
key = new String(key.getBytes("iso-8859-1"), "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
map.put("key", key);
map.put("pageSize", this.pageSize);
return new ModelAndView("/admin/carnote/list",map);
}
@RequiresPermissions("admin:carnote:list")
@RequestMapping(value="/carnote/list",method=RequestMethod.POST,produces="application/json;charset=UTF-8")
@ResponseBody
public PageDataResult loadData(Integer page, Integer rows,String key){
PageDataResult result = carNoteService.getItemList(page, rows, key);
List<CarNote> List = (List<CarNote>)result.getRows();
result.setRows(List);
return result;
}
Service 层:
/**
* 分页插件
* @param page
* @param rows
* @param key
* @return
*/
PageDataResult getItemList(int page, int rows,String key);
ServiceImpl 代码:
public PageDataResult getItemList(int page, int rows, String key) {
// TODO Auto-generated method stub
CarNoteExample example = new CarNoteExample();
Criteria criteria = example.createCriteria();
criteria.andTitleLike(key+"%");
//分页处理
PageHelper.startPage(page, rows);
List<CarNote> list = carNoteMapper.selectByExample(example);
//创建一个返回值对象
PageDataResult result = new PageDataResult();
result.setRows(list);
//取记录总条数
PageInfo<CarNote> pageInfo = new PageInfo<>(list);
result.setTotal(pageInfo.getTotal());
return result;
}
Dao 层代码:
List<CarNote> selectByExample(CarNoteExample example);
Mapper.xml 代码
<select id="selectByExample" resultMap="BaseResultMap" parameterType="com.happydeer.pojo.CarNoteExample" >
select
<if test="distinct" >
distinct
</if>
<include refid="Base_Column_List" />
from cx_note
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
order by id desc
</select>
至此对比完毕。
动态拼接实现了多条件搜索功能。
《end》