后端多字段在一个搜索框下的模糊搜索实现

后端多字段在一个搜索框下的模糊搜索实现

之前因为项目需求(虽然最后因为可能影响性能把这个功能砍掉了),记录一下。给有需要的人可以参考参考思路。这个牺牲了性能,数据量太多的话不建议使用。
我将数据库每条数据拿出来依次拼接,去除字段名称,形成一个大的字符串,通过用户输入的字段去匹配字段,形成了在一个搜索框下模糊搜索所有想搜索的字段功能,可以通过删减或增加从数据库提取出来的字段来进行模糊搜索的字段范围,代码贴在下面供参考。
mhsearch是前台传过来的搜索框输入的字符串,fw是用作query的查询

	@Transactional(rollbackFor = Exception.class)
	@Override
	public IPage<EaPersonDto> pageSearch(FindWrapper<EaPersonVo> fw, String mhSearch) {

		if (null != mhSearch) {
			List<EaPersonDto> list = this.list();
			List<Long> listUserId = new ArrayList<>();
			for (int i = 0; i < list.size(); i++) {
				String a = null;
				if (null != list.get(i).getEaPersonVo().getName()) {
					a = a + list.get(i).getEaPersonVo().getName().toString();
				}
				if (null != list.get(i).getEaPersonVo().getCard()) {
					a = a + list.get(i).getEaPersonVo().getCard().toString();
				}
				if (null != list.get(i).getEaPersonVo().getMob()) {
					a = a + list.get(i).getEaPersonVo().getMob().toString();
				}
				if (null != list.get(i).getEaPersonVo().getResponsibility()) {
					if (0 == list.get(i).getEaPersonVo().getResponsibility()) {
						a = a + "监考";
					}
					if (1 == list.get(i).getEaPersonVo().getResponsibility()) {
						a = a + "巡考";
					}
				}
				if (null != list.get(i).getEaPersonVo().getStatus()) {
					a = a + list.get(i).getEaPersonVo().getStatus().toString();
				}
				if (null != list.get(i).getEaPersonVo().getType()) {
					a = a + list.get(i).getEaPersonVo().getType().toString();
				}
				if (null != list.get(i).getEaPersonVo().getWork()) {
					a = a + list.get(i).getEaPersonVo().getWork().toString();
				}
				if (null != list.get(i).getEaPersonVo().getHome()) {
					a = a + list.get(i).getEaPersonVo().getHome().toString();
				}
				if (null != list.get(i).getEaPersonVo().getNbCard()) {
					a = a + list.get(i).getEaPersonVo().getNbCard().toString();
				}
				a = a.replace(", name=", "");
				a = a.replace(", card=", "");
				a = a.replace(", mob=", "");
				a = a.replace(", status=", "");
				a = a.replace(", type=", "");
				a = a.replace(", work=", "");
				a = a.replace(", home=", "");
				a = a.replace(", nbcard=", "");
				if (a.indexOf(mhSearch) != -1) {
					listUserId.add(list.get(i).getEaPersonVo().getUserId());
				}
			}
			if (0 != listUserId.size()) {
				fw.in("user_id", listUserId);
			} else {
				return null;
			}
		}
		IPage<EaPersonDto> page = this.page(fw);
		return page;
	}

性能方面会有所影响,数据大的话搜索会比较慢,数据量不过几千条的话也看不出什么影响

好的,我会尽力回答你的问题。首先,你需要在后端使用SpringBoot和SSM框架,编写一个Controller接受前端传来的关键字,然后调用Service层进行模糊查询操作,最后将查询结果返回给前端。 以下是一些实现步骤: 1. 定义实体类和DAO层接口,与数据库表对应。 ``` @Entity @Table(name = "table_name") public class EntityName { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String field1; private String field2; private String field3; private String field4; private String field5; private String field6; private String field7; private String field8; private String field9; // getter和setter方法 } public interface EntityNameDAO { List<EntityName> findByKeyword(String keyword); } ``` 2. 在Service层中编写模糊查询方法。 ``` @Service public class EntityNameServiceImpl implements EntityNameService { @Autowired private EntityNameDAO entityNameDAO; @Override public List<EntityName> findByKeyword(String keyword) { return entityNameDAO.findByKeyword(keyword); } } ``` 3. 在Controller层中编写接口,接收前端传来的关键字,并调用Service层进行模糊查询操作。 ``` @RestController @RequestMapping("/api") public class EntityNameController { @Autowired private EntityNameService entityNameService; @GetMapping("/search") public List<EntityName> search(@RequestParam("keyword") String keyword) { return entityNameService.findByKeyword(keyword); } } ``` 4. 在前端编写页面,包含搜索框和显示查询结果的表格。 ``` <form id="search-form"> <input type="text" name="keyword" placeholder="请输入关键字"> <button type="submit">搜索</button> </form> <table> <thead> <tr> <th>字段1</th> <th>字段2</th> <th>字段3</th> <th>字段4</th> <th>字段5</th> <th>字段6</th> <th>字段7</th> <th>字段8</th> <th>字段9</th> </tr> </thead> <tbody id="search-result"></tbody> </table> ``` 5. 在前端编写JavaScript代码,使用Ajax发送搜索请求,并将查询结果显示在表格中。 ``` $(function() { $('#search-form').submit(function(e) { e.preventDefault(); var keyword = $('input[name="keyword"]').val(); $.ajax({ url: '/api/search?keyword=' + keyword, type: 'GET', success: function(data) { var html = ''; $.each(data, function(index, item) { html += '<tr>'; html += '<td>' + item.field1 + '</td>'; html += '<td>' + item.field2 + '</td>'; html += '<td>' + item.field3 + '</td>'; html += '<td>' + item.field4 + '</td>'; html += '<td>' + item.field5 + '</td>'; html += '<td>' + item.field6 + '</td>'; html += '<td>' + item.field7 + '</td>'; html += '<td>' + item.field8 + '</td>'; html += '<td>' + item.field9 + '</td>'; html += '</tr>'; }); $('#search-result').html(html); } }); }); }); ``` 以上是一个简单的JavaWeb查询系统的实现步骤,你可以根据自己的需求进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值