当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

多条件参数查询防SQL注入分页写法

发表于: 2011-07-16   作者:citygu   来源:转载   浏览次数:
摘要: 先附上DAO方法:有两个方法构成。一个查询一页内的数据记录,一个查询记录总数。 map里存放这查询条件和参数值 还有第几页,一页多少行 @Override @SuppressWarnings("unchecked") public List selectStudentsList(Map map) { /** *对方法功能的描述 *@param参数1

先附上DAO方法:有两个方法构成。一个查询一页内的数据记录,一个查询记录总数。

map里存放这查询条件和参数值 还有第几页,一页多少行

@Override
	@SuppressWarnings("unchecked")
	public List selectStudentsList(Map map) {
		/**
		*对方法功能的描述
		*@param参数1
		*@param参数2
		*@return 返回类型
		*@throws这个方法所抛出的异常
		*/
		StringBuffer sb=new StringBuffer("SELECT s.NO_ as return1,u.NAME_ as return2,u.SEX_ as return3,sub.SHORT_TITLE_ as return4,g.NAME_ as return5,c.NAME_ as return6 FROM users_ u,login_ l, students_ s LEFT JOIN spe_subject_ sub ON s.PRO_ID_ = sub.ID_ LEFT JOIN grade_ g ON s.GRADE_ = g.ID_ LEFT JOIN classes_ c ON s.CLASS_ID_ = c.ID_ WHERE s.NO_=u.ID_ AND l.ID_=s.NO_ ");
		Vector vector=new Vector();
		if(map.get("no")!=null){
			sb.append(" and s.NO_ like ?");
			vector.add("%"+(String)map.get("no")+"%");
		}
		if(map.get("name")!=null){
			sb.append(" and u.NAME_ like ?");
			vector.add("%"+(String)map.get("name")+"%");
		}
		if(map.get("sex")!=null){
			sb.append(" and u.SEX_=?");
			vector.add((String)map.get("sex"));
		}
		if(map.get("proId")!=null){
			sb.append(" and s.PRO_ID_=?");
			vector.add((String)map.get("proId"));
		}
		if(map.get("grade")!=null){
			sb.append(" and s.GRADE_=?");
			vector.add((String)map.get("grade"));
		}
		if(map.get("classId")!=null){
			sb.append(" and s.CLASS_ID_ =?");
			vector.add((String)map.get("classId"));
		}
		sb.append(" and (l.ACCOUNT_STATUS_!='5' or l.ACCOUNT_STATUS_ is NULL)");
		sb.append(" order by s.NO_ asc limit "+(Integer)map.get("begin")+","+(Integer)map.get("size"));
//		System.out.println(sb.toString());
		List list=getJdbcTemplate().queryForList(sb.toString(),vector.toArray());
		List resList=new ArrayList();
		for(Map imap:(List<Map>)list){
			ReturnBean rb=new ReturnBean();
			rb.setReturn1((String)imap.get("return1"));
			rb.setReturn2((String)imap.get("return2"));
			rb.setReturn3((String)imap.get("return3"));
			rb.setReturn4((String)imap.get("return4"));
			rb.setReturn5((String)imap.get("return5"));
			rb.setReturn6((String)imap.get("return6"));
			resList.add(rb);
		}
		return resList;
	}
 
@Override
	@SuppressWarnings("unchecked")
	public int selectStudentsLength(Map map) {
		StringBuffer sb=new StringBuffer("SELECT count(s.NO_) FROM users_ u,login_ l, students_ s  WHERE s.NO_=u.ID_ AND l.ID_=s.NO_ ");
		Vector vector=new Vector();
		if(map.get("no")!=null){
			sb.append(" and s.NO_ like ?");
			vector.add("%"+(String)map.get("no")+"%");
		}
		if(map.get("name")!=null){
			sb.append(" and u.NAME_ like ?");
			vector.add("%"+(String)map.get("name")+"%");
		}
		if(map.get("sex")!=null){
			sb.append(" and u.SEX_=?");
			vector.add((String)map.get("sex"));
		}
		if(map.get("proId")!=null){
			sb.append(" and s.PRO_ID_=?");
			vector.add((String)map.get("proId"));
		}
		if(map.get("grade")!=null){
			sb.append(" and s.GRADE_=?");
			vector.add((String)map.get("grade"));
		}
		if(map.get("classId")!=null){
			sb.append(" and s.CLASS_ID_ =?");
			vector.add((String)map.get("classId"));
		}

		sb.append(" and (l.ACCOUNT_STATUS_!='5' or l.ACCOUNT_STATUS_ is NULL)");
		return getJdbcTemplate().queryForInt(sb.toString(),vector.toArray());
	}

 查询的业务方法:查询结果会包装到PageInfo的Bean中

@Override
	public PageInfo findStudentsToPage(Map map) {
		PageInfo pageInfo=new PageInfo();
		pageInfo.setPageIndex((Integer)map.get("pageIndex"));
		map.put("begin", (pageInfo.getPageIndex()-1)*pageInfo.getPageSize());
		map.put("size", pageInfo.getPageSize());
		pageInfo.setPageList(studentsDAO.selectStudentsList(map));
		pageInfo.setTotalNum(studentsDAO.selectStudentsLength(map));
		pageInfo.countPageNum();
		return pageInfo;
	}
 

 

多条件参数查询防SQL注入分页写法

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
多数人知道SQL注入,也知道SQL参数化查询可以防止SQL注入,可为什么能防止注入却并不是很多人都知道
很多人都知道SQL注入,也知道SQL参数化查询可以防止SQL注入,可为什么能防止注入却并不是很多人都知
很多人都知道SQL注入,也知道SQL参数化查询可以防止SQL注入,可为什么能防止注入却并不是很多人都知
  在做项目中,我们经常遇到复杂的查询方法,要根据用户的输入,判断某个参数是否合法,合法的话
原文: 必须知道的SQL编写技巧,多条件查询不拼字符串的写法   在做项目中,我们经常遇到复杂的查询
首先,我详细描述下文章标题里面多条件分页查询的细节具体指什么? 多条件分页查询是我们常用的功能
Hql查询条件的参数绑定 3. 参数绑定:   Hibernate中对动态查询参数绑定提供了丰富的支持,那么什
参数: 通常情况下,Mybatis的mapper文件中Select、Inser、Update和Delete只接收一个参数,并用para
extjs 4.2 分页和根据查询条件分页 废话不多说直接上代码: Ext.onReady(getPageList); function ge
虽然说ASP.NET属于安全性高的脚本语言,但是也经常看到ASP.NET网站由于过滤不严造成注射.由于ASP.NET
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号