澳门皇冠金沙网站▎在线官网
做最好的网站

Struts2 crud功能实现澳门皇冠金沙网站,在线官网

2019-11-03 作者:网络服务   |   浏览(184)

javaEE 分页功能最终代码优化(二)

上次进行了分页代码的优化,但是不足之处就是在Action层中写hql语句,如果hql语句比较复杂,例如条件查询,会有一些参数的判断,是非常容易出错的。下面对分页查询进一步优化,将会变得非常简单。

下面我们就完成一个带条件的查询,如下图,可以选择部门、按照姓名、按照账号进行条件查询,同时分页。

澳门皇冠金沙网站,在线官网 1

一:还是先看简单的,jsp界面代码的进一步抽取。

(1)之前已经把公共的页码显示的代码抽取出去了,但是每个界面还是要写一段javascript代码,来指定对应的xxx.action

澳门皇冠金沙网站,在线官网 2

其实也可以直接定义一个form,

澳门皇冠金沙网站,在线官网 3

然后得到form,提交form即可,所以以后直接写个form标签,指定action即可

澳门皇冠金沙网站,在线官网 4

我们要完成条件查询,将内容放在form标签内,提交表单在Action层就得到对应的属性值了

澳门皇冠金沙网站,在线官网 5

二:下面就是解决在Action层写hql语句的问题,可以定义一个QueryHelper类,将来通过这个类来拼接hql语句和传递参数列表,处理好之后作为参数传递给PageBean处理即可(关于PageBean请看上一篇博客)

(1)需要拼接from(必须要有的语句)、where、orderby语句,定义这三个属性,还有需要得到对应的参数列表

澳门皇冠金沙网站,在线官网 6

(2)定义构造函数,在Action层new一个对象的时候就传递from语句的参数(就是类名)

澳门皇冠金沙网站,在线官网 7

(3)拼接where语句,Action层需要传递条件和参数列表,注意这里的参数是可变参数,因为是不确定的,具体看下面注释。

刚刚定义属性的时候对whereClause和orderByClause初始化为空字符串,所以第一次调用此方法拼接是from xxx where xxx.yyy=?,下面再调用就是where xxx.yyy=?and xxx.zzz=?

还有这里方法的类型都是QueryHelper类型的,return this;表示返回类的对象,这样就可以接着调用自己的方法增加条件了,不用一个语句一个语句的分开写了(具体看下面Action层中的调用)

澳门皇冠金沙网站,在线官网 8

(3)下面一个方法的主要作用是判断是否要去拼接where语句,这么做的原因是因为界面的条件是多个,用户可能不全部选择,那么就需要在Action中判断了,if(xxx) 调用拼接;所以这么做就可以直接一路调用下来,不用在Action中if判断了

澳门皇冠金沙网站,在线官网 9

(4)同理orderby也是如此,这里就不列出了,此次条件查询不需排序。

得到hql语句的方法:

澳门皇冠金沙网站,在线官网 10

(5)得到查询总记录条数的hql语句和参数列表的语句:

澳门皇冠金沙网站,在线官网 11

三:

(1)在Action中,声明界面传递过来的属性,实现get、set方法

澳门皇冠金沙网站,在线官网 12

澳门皇冠金沙网站,在线官网 13

(2)构造一个QueryHelp对象,如下图:(就是这里可以通过"."就可以调用自己的方法了),

澳门皇冠金沙网站,在线官网 14

要得到PageBean对象将QueryHelp对象作为参数传递过去即可

澳门皇冠金沙网站,在线官网 15

(3)这里可以进一步优化,因为每个Action中都需要service调用getPageBean()方法,然后将得到的PageBean对象放到栈顶。所以可以将其抽取到QueryHepler类中,直接写个方法就完成此功能。

如下图:

澳门皇冠金沙网站,在线官网 16

所以这里直接一路下来就可以得到分页的信息并将其放到了栈顶。完毕。

澳门皇冠金沙网站,在线官网 17

 

四:总结

至此分页相关的代码优化基本差不多了,之后再写分页的操作将会非常的容易而且不易出错。

http://www.bkjia.com/Javabc/1116569.htmlwww.bkjia.comtruehttp://www.bkjia.com/Javabc/1116569.htmlTechArticlejavaEE 分页功能最终代码优化(二) 上次进行了分页代码的优化,但是不足之处就是在Action层中写hql语句,如果hql语句比较复杂,例如条件...

1.创建员工表:t_employee2.根据表结构创建实体类:Employee3.定义DAO接口:IEmployeeDAO4.定义DAO的实现类:EmployeeDAOImpl(暂不实现, 测试先行)5.定义对应的测试类:EmployeeDAOTest(编写对每个dao方法的测试代码)6:使用druid连接池抽取JdbcUtil和db.properties文件.7:编写通用的DAO操作模板JdbcTemplate.8:编写通用的结果集处理器:BeanHander/BeanListHandler.

01.集成Struts2框架02.编写EmployeeAction代码和JSP代码03.网页基本的CRUD测试通过04.完成高级查询操作05.完成分页查询操作

1.查询对象的封装(EmployeeQueryObject,QueryObject)该对象是用户提交的数据的封装,将高级查询和分页数据都封装到该对象中,方便数据的传递在该对象中提供sql条件字符串的拼接,和sql参数的存放2.分页结果对象的封装(PageResult)该对象是对页面中需要显示数据的封装(结果集数据和分页条相关的数据)3.高级查询+分页查询方法设计思考用户需要什么数据和用户应该要提供什么数据(方法的参数列表的定义)

项目结构划分

澳门皇冠金沙网站,在线官网 18

DAO暂时不进行叙述了我们把重点放在Struts2上

我们想对下面表格使用struts2进行CRUD+高级查询+分页查询

澳门皇冠金沙网站,在线官网 19

先把struts2引入项目中

<filter><filter-name>Struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>Struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>
  • 首先我们创建一个Action类

    public class EmployeeAction extends ActionSupport {private static final long serialVersionUID = 1L;private IEmployeeDAO dao = new EmployeeDAOImp();@Setter@Getterprivate Employee e;@Setter@Getterprivate EmployeeQueryObject qo =new EmployeeQueryObject(); @Override public String execute() throws Exception { PageResult result = dao.pageQuery; ActionContext.getContext().put("result", result);//跳转逻辑视图 return "list"; } //执行用户的删除操作 public String delete(){ dao.delete); return SUCCESS; } //编辑页面的跳转操作 public String input(){ if{ e=dao.get); } return "input"; }//执行保存更新操作 public String saveOrUpdate(){ if!=null){ dao.update; }else{ dao.save; } return SUCCESS; } }
    

domain模型

澳门皇冠金沙网站,在线官网 20

struts.xml

<struts><!--开发者模式 --><constant name="struts.devMode" value="true"></constant><constant name="struts.ui.theme" value="simple" /><package name="empPkg" extends="struts-default" namespace="/"> <action name="emp_*" method="{1}"> <result name="list" type="dispatcher"> /WEB-INF/views/employee/list.jsp </result> <result name="success" type="redirectAction"> emp </result> <result name="input"> /WEB-INF/views/employee/input.jsp </result> </action></package></struts>

list.jsp

<s:form role="form"> <s:hidden name="qo.currentPage" ></s:hidden> <div > <label for="exampleInputEmail2"></label> <s:textfield name="qo.username" placeholder="姓名" /> </div> <div > <label for="exampleInputEmail2"></label> <s:textfield name="qo.email" placeholder="邮箱" /> </div>

input.jsp

<s:form name="account_register" namespace="/" action="emp_saveOrUpdate" > <s:hidden name="e.id"></s:hidden> <div > <label for="account_register_account_username" >用户名</label> <div > <s:textfield name="e.username" placeholder="请输入用户名" /> </div> <div ></div> </div> <div > <label for="account.password" >密码</label> <div > <s:password name="e.password" showPassword="true" placeholder="请输入密码" /> </div>

我们需要理解的是以下逻辑:

本文由澳门皇冠金沙网站发布于网络服务,转载请注明出处:Struts2 crud功能实现澳门皇冠金沙网站,在线官网

关键词: