抽取数据库查询抽取和分页抽取和数据回显问题

来源:互联网 发布:找数据 编辑:程序博客网 时间:2024/06/03 16:56

通过基础的数据库操作,在后期学习中多次使用从而方法不满足,抽取成工具
先是进行了条件查询,从而引出QueryHelper的工具类
QueryHelper:(为防止操作失误,选择传入类对象并赋予别名)
1.对问题进行分析即两个模块,①获取到hql语句②获取参数值

2.对①进行细分 第一步 from子句必须有,放入构造方法。      第二步 where子句 (1.n)写入方法addCondition(String condition, Object... params) {}②同时导入参数(查询字段)if (parameters == null) {parameters = new ArrayList<Object>();}if (params != null) {for (Object param : params) {parameters.add(param);}      第三步 order By .. desc/asc 排序方式addOrderByProperty(String property, String order) {}使用方式:    QueryHelper queryHelper = new QueryHelper(Info.class, "i");//确定查询的对象类型if (info != null) {if (StringUtils.isNotBlank(info.getTitle())) {info.setTitle(URLDecoder.decode(info.getTitle(),"utf-8"));//重定向回来,条件处于被浏览器加密。揭秘呈现在浏览器上queryHelper.addCondition("i.title LIKE ?","%" + info.getTitle() + "%"); //查询Info对应表的title字段,采用模糊查询的方式}}queryHelper.addOrderByProperty("i.createTime",QueryHelper.ORDER_BY_DESC);      //添加排序的依据和排序方式 已createTime列为标准排序 方式为降序pageResult = infoService.getPageResult(queryHelper,getPageNo(),getPageSize());//下面会说到

下午
上午遗留问题:查询条件的回显问题
1.在页面跳转addUI.action和editUI.action时遗失查询条件
2.跳转回listUI.action时。丢失查询条件

解决方式:① Action 中维护一个 strName的String 对象;在进行增加和编辑时 保存需要的内容 如: strName = user.getName(); //在进行数据库操作前
② 在配置文件中当页面返回请求是list时 进行重定向。

<result name="list" type="redirectAction">//类型重定向<param name="actionName">role_listUI</param>//跳转的action <param name="role.name">${strName}</param>//保存查询条件的内容 并赋予给该显示的地方<param name="encode">true</param>//为防止中文乱码问题,请求提交进行密保即%155%等 格式   </result>为了防止当前页数为5 而查询出来结果显示错误。在查询方法内加入$("#pageNo").val(1);!!

问题:页面查询出来结果需要进行分页
创建PageResult类 变量有 totalCount//结果总数 pageNo//当前页数 pageSize//页面大小 totalpageCount页面总数 items页面列表(数据保存处)
配个上午的QueryHelper 查询出筛选后的内容 即query 返回一个PageResult对象 页面通过 pageResult.items 获取列表 再进行遍历即可。

if(pageNo<1) pageNo = 1;//设置开头query.setFirstResult((pageNo-1)*pageSize);//设置每页最大数量query.setMaxResults(pageSize);//设置返回的列表List items = query.list();//获取总数Query countQuery = getSession().createQuery(queryHelper.getCountHql());if (parameters!=null) {for (int i = 0; i < parameters.size(); i++) {countQuery.setParameter(i, parameters.get(i));}} Long totalCount = (Long)countQuery.uniqueResult();return new PageResult(totalCount, pageNo, pageSize, items);可以获取结果,编队JSP进行抽取在列表页面添加标签<jsp:include page="/common/pageNavigator.jsp"></jsp:include>。在JSP中可以不只一个代码块在抽取的列表下 进行<script type="text/javascript">代码块执行方法

值得注意的是如何在抽取的JSP中被调用的JSP访问正确的action 可以在原有界面定义 list_url 常量 在公共页面只需调用document.forms[0].action = list_url;即可

课下作业:对原有系统进行改造。把User 和 Role 进行相同的查询与操作!

原创粉丝点击