java—web之实现模糊查询数据库·学习笔记

前言:继实现了对员工信息的增删改后,需要实现“模糊查询”操作。鉴于之前三部分学的不是很透彻,本次学习第四部分决心做个笔记(便于以后copy~)

1.先前配置~:①一张员工信息表(图1.1)(数据库中的对应表+javabean里的Emp.java---包括:属性,有参无参构造,toString重写,getters,setters等其他需要的)

java—web之实现模糊查询数据库·学习笔记_第1张图片                       java—web之实现模糊查询数据库·学习笔记_第2张图片

    图1. 1 员工信息表(java)                                                                                        图1.2  用到的jar包

②java连接数据库,配置一些便于对数据库增删改查的文件(此处踏踏的配置包括如下:配置文件---druid.properties    jar包---mysql-connector-java-5.1.47.jar,druid-1.1.12.jar,commons-beanutils-1.9.4.jar,spring-jdbc-5.0.0.RELEASE.jar,commons-beanutils-1.9.4.jar等 (图1.2) )  以及一个utils包下的一个JdbcUtils.java    ③其他(等知道还缺啥的时候再补充~)

2.模糊查询

①写一个select.jsp,用于在前端页面显示查询要求(一个form表单),获取需要查询信息(通过name属性获取信息),在前端页面返回信息(form跳转至②的servlet,在servlet中对数据库模糊查询,将查询得到的内容返回给jsp页面(empList)并在表格table中显示)

②写servlet,接收jsp传来的信息,并分析attributes (此处模糊查询涉及三个参数,真正查询时可仅使用0,1,2或者三个参数)

③servlet将参数传给service层,service层再传给Dao层,在Dao层对应接口拼接sql语句并对数据库进行查询

                                 代码片段1:servlet的doGet方法:(doPost自动调用doGet,所以只需要在doGet里修改即可)

@WebServlet("/selectEmpByCondition")
public class selectEmpByCondition extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		
		/*
		 * select * from emp where empno=? and ename=? and job=?;
		 * key -String - 表单中标签的name属性  --条件 --empno,ename,job
		 * value -String[] -表单中标签输入的值  --参数 --? ? ?
		 */
		Map conditionMap = request.getParameterMap();
		
		EmpService empService=new EmpServiceImpl();
		List empList=empService.selectEmpByCondition(conditionMap);
	
		request.setAttribute("empList",empList);
		request.getRequestDispatcher("/WEB-INF/root/select.jsp").forward(request, response);
	}
}

                            代码片段2:dao层接口的 对数据库模糊查询 方法实现

private JdbcTemplate template = new JdbcTemplate(JdbcUtils.getDataSource());


@Override
	public List selectEmpByCondition(Map conditionMap) {
		String sql="select * from emp where 1=1";//便于 and 拼接 其他要查的信息(字符串)
		//用于拼接sql语句     StringBuilder拼接语句更安全些~
		StringBuilder builder =new StringBuilder(sql);
		
		Set keySet = conditionMap.keySet();

		for(String condition:keySet) {
			String value=conditionMap.get(condition)[0];
			if(value!=null&&!"".equals(value)) {
				builder.append(" and "+condition+" = ?");
				conditionList.add(value);//将value添加到ArrayList,template提供了一个好用的操作 :传入数组当参数
			}                            //当然,不嫌麻烦,也可以 " = "+"'"+value+"'"
		}
		sql=builder.toString();
//		List queryForList= template.query(sql, new BeanPropertyRowMapper(Emp.class));
		List queryForList= template.query(sql, new BeanPropertyRowMapper(Emp.class),conditionList.toArray());
		
		return queryForList;
	}

          (此处时准确查询,若想使用模糊查询,可通过修改builder.append() 里的内容 实现~)

你可能感兴趣的:(notes,#,java,#,DB,java,jsp,数据库)