s2sh整合中精确查询功能实现
目前我正在做使用struts2,spring,hibernate三大框架的项目,在这个开发过程中我需要写一个根据条件进行查询功能,在此我将条件查询分为精确查询和模糊查询。
精确查询是指根据某一个数据库已存在的值进行查询,例如根据用户的名字进行查询
模糊查询是指根据某个字段的某个字母或数字进行查询,例如根据用户的名字当中的某个字进行查询。首先我们需要搭建开发环境,引入一些必要的类库等操作。由于我主要想介绍根据条件查询的操作,所以搭建开发环境,引入类库等操作在此省略。
下面是我写的精确查询的实际案例:
precision searches.jsp的代码如下 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'list.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.6.js"> </script> <script type="text/javascript"> /**加载整个文档*/ $(document).ready(function() { }); function findByName() { //获取id=”uname”文本框中的name的值 var name = $("#uname").val(); //判断文本框中是否有值 若为空 则弹出红色提示内容:用户名不能为空;以及该文本框变为红色。若不为空则执行submit提交查询 if (name == "") { $("#uname").css("border-color", "red"); $("#msg").html("<font color='red'>用户名不能为空</font>"); } else { $("#suser").submit(); } } //文本框中获取焦点时 不显示任何提示信息 function styleChanage() { $("#uname").css("border-color", ""); $("#msg").html(""); } </script> </head> <body> <h1> 精确查询操作 </h1> <h3> 唯一性:在用户注册过程中 强调的用户注册的用户名必须唯一 </h3> <div> <form action="${pageContext.request.contextPath}/csdn/user_findByName" id="suser" method="post"> <input type="text" name="user.name" id="uname" onfocus="styleChanage()" /> <span id="msg"></span> <input type="button" value="精确查询" onclick="findByName()"/> </form> </div> <table> <thead> <tr> <th> 序号 </th> <th> 用户名 </th> <th> 密码 </th> <th> 注册时间 </th> <th> 操作 </th> </tr> </thead> <!—在tbody中将查询结果显示出来--> <tbody> <tr> <td> <s:property value="#request.user.id" /> </td> <td> <s:property value="#request.user.name" /> </td> <td> <s:property value="#request.user.pass" /> </td> <td> <s:date name="#request.user.rdate" format="yyyy-MM-dd"></s:date> <br> </td> <td> <s:url id="edit" action="user_edit" namespace="/csdn"> <s:param name="user.id"> <s:property value="#request.user.id" /> </s:param> </s:url> <s:url id="del" action="user_delete" namespace="/csdn"> <s:param name="user.id"> <s:property value="#request.user.id" /> </s:param> </s:url> <s:a href="%{edit}">修改</s:a> | <s:a href="%{del}">删除</s:a> </td> </tr> </tbody> </table> </body> </html>
解析:在以上页面中主要是看form表单中的内容,当点击精确查询时执行onclick="findByName()"事件,在该事件中获取你要查询内容的值即你输入到文本框中的值,然后判断你是否已经输入查询内容,若没有输入则显示用户名不能为空 文本框变色等提示,若已经输入,则执行onfocus="styleChanage()"获取文本框焦点时操作即文本框不显示颜色同时也不会有提示信息 然后执行submit操作提交到action中执行findByName()方法.
UserAction.java public class UserAction extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; private UserServiceImpl userServiceImpl; public UserServiceImpl getUserServiceImpl() { return userServiceImpl; } /* 依赖注入方式 */ public void setUserServiceImpl(UserServiceImpl userServiceImpl) { this.userServiceImpl = userServiceImpl; } private List<User> users; private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public List<User> getUsers() { return users; } public void setUsers(List<User> users) { this.users = users; } /* 精确查询 */ public String findByName() { user = userServiceImpl.findByName(user.getName()); return "findByName"; } }
解析:此action主要是根据页面提交的查询条件即用户名进行查询
struts-user.xml文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <package name="dxl" extends="json-default" namespace="/csdn"> <global-results> <result name="input">/index.jsp</result> </global-results> <action name="user_*" class="userAction" method="{1}"> <result name="findByName">/WEB-INF/user/precision searches.jsp</result> </action> </package> </struts>
解析:该文件使用通配符形式返回结果,若成功查询则从新跳转到页面显示查询结果。
UserServiceImpl.java public class UserServiceImpl implements UserService { private UserDaoImpl userDaoImpl; /*依赖注入*/ public void setUserDaoImpl(UserDaoImpl userDaoImpl) { this.userDaoImpl = userDaoImpl; } public User findByName(String name) { return userDaoImpl.findByName(name); } } UserDaoImpl.java public class UserDaoImpl extends HibernateDaoSupport implements UserDao{ /* 根据用户名查询用户信息 */ public User findByName(String name) { List list = getHibernateTemplate().find("from User where name=? ", name); if (list.size() > 0) { User user = (User) list.get(0); return user; } return null; } }
解析:userDaoImpl为底层实现类,将借助HibernateTemplate模板从User类中根据页面传来的name的值查询 若查询结果大于0则返回该用户信息,否则返回null。
总结:以上是我整理的整个精确查询操作的流程,下面的文章总结中我将介绍模糊查询操作,以及模糊查询操作的分页操作。