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

通过基础的数据库操作,在后期学习中多次使用从而方法不满足,抽取成工具
先是进行了条件查询,从而引出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 进行相同的查询与操作!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值