其实上移下移的思想分几步:

核心思想:交换两个记录的位置字段的值。

问题:如何根据当前记录,找到前一个或者后一个的记录的位置。

第一:在java类属性定义一个position位置字段,不同的位置position的值不同。

第二:前台页面显示移动的效果是查询的时候,根据position的升序查询显示出来的。所以要重写查询方法。

第三:当点击按钮的时候,可以获取该记录的id,根据id获取该记录的对象的position。然后通过查询语句获取前一个或者后一个记录

第四:如何保证在添加新的信息的时候,position的值不会重复。这里很巧妙:根据id的值来设置position的值。

package cn.itcast.oa.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

import cn.itcast.oa.base.DaoSupportImpl;

import cn.itcast.oa.domain.ForumManage;

import cn.itcast.oa.service.ForumManageService;

@Service

@Transactional

public class ForumManageServiceImpl extends DaoSupportImpl implements ForumManageService {

/*实现上下移动的操作,页面如何更新已经改过的信息呢,因为之前的findAll查询没有条件的,没有排序的,而我们这个列表是根据postion来进行排序展示的

子类继承父类的方法,可以重写父类的方法以实现自己的功能.子类重写了父类,就执行自己的方法了。

*/

@Override

public List findAll() {

return getSession().createQuery("FROM ForumManage ORDER BY position ").list();

}

//当添加一个新的记录时,position的值是不能重复的,这里的方法很巧妙,根据id来保存position的值,id为什么,position就是什么,这样子就不会重复了

@Override

public void save(ForumManage forum) {

super.save(forum);

//先保存了对象后,根据id来保存position的值,这样就不会重复了

forum.setPosition(forum.getId().intValue());

}

@Override

public void moveUp(Long id) {

/*jsp页面上的上移下移功能实现:

* 分析:上下移动每条记录是针对记录的位置进行的移动,所以这里我们在java类中的字段中设置一个position位置来记录每条记录的位置信息。

* 而想要交换两条记录,只要将这两条记录的位置信息交换,然后利用查询的时候order by来进行查询,就可以将两条记录来交换。

* 第一步:之前我们写的查询方法是无条件查询,这里的查询是有条件的查询,所以需要重写父的findAll方法,否则数据库改了,页面是不会改变的。

* (关于子类继承父类,这个可以联想生活中的父子关系,子类继承了父类的某个特点,将这个特点修改了下成了自己特有的,所以重写是先使用自己的特点)

* 第二步:当我们点击上下移动按钮时,这时候页面传递是改记录的id信息,根据id信息来获取当前的对象。

* 第三步:如何获取当前记录之前的或者之后的记录呢。这是问题的关键:即如何获取前一个或者后一个对象。

* 第四步:将第一步和第二步的对象position信息进行交换,然后更新到数据库。

* 子类继承父类,调用父类的方法:直接拿过来用即可,即在子类中直接写父类的方法就可以。比如我们要使用爸爸的东西,我们不用汇报,而使用别人的东西需要汇报说一声。这个汇报就是先声明一个对象

* */

//当前对象和前面一个或者后面一个对象的获取,当前对象通过id获取,后面一个对象通过查询语句获取

ForumManage forum= getById(id);

ForumManage other=null;

//这是查询上下对象的方法:select * from itcast_forumManage where position

other=(ForumManage) getSession().createQuery(//

"FROM ForumManage WHERE position < ? ORDER BY position DESC ")

.setParameter(0,forum.getPosition())

.setFirstResult(0)

.setMaxResults(1)

.uniqueResult();

//最上面的一个不能上移

if (other==null) {

return;

}

//获取到了前面一个对象后,得到该对象的位置,将两者的位置进行交换,注意这里需要用到第三方来转接

Integer temp=null;

temp=forum.getPosition();

forum.setPosition(other.getPosition());

other.setPosition(temp);

//交换之后,更新到数据库,

getSession().update(forum);

getSession().update(other);

}

//下移跟上移的原理是一样的

@Override

public void moveDown(Long id) {

//当前对象和前面一个或者后面一个对象的获取,当前对象通过id获取,后面一个对象通过查询语句获取

ForumManage forum= getById(id);

ForumManage other=null;

//这是查询上下对象的方法:select * from itcast_forumManage where position

other=(ForumManage) getSession().createQuery(//

"FROM ForumManage WHERE position > ? ORDER BY position ")

.setParameter(0,forum.getPosition())

.setFirstResult(0)

.setMaxResults(1)

.uniqueResult();

//最下面的一个不能下移

if (other==null) {

return;

}

//获取到了前面一个对象后,得到该对象的位置,将两者的位置进行交换,注意这里需要用到第三方来转接

Integer temp=null;

temp=forum.getPosition();

forum.setPosition(other.getPosition());

other.setPosition(temp);

//交换之后,更新到数据库,

getSession().update(forum);

getSession().update(other);

}

}

java中的命令怎么上移_web系统中上下移动功能的实现相关推荐

  1. java中解释命令_闲来无事可来了解下Java中Javadoc命令的用法

    [javadoc命令的用法] 1.java源文件里,注释以/**开始 并以*/结束,里面可以包含普通文件,HTML标记和javaDoc标记.这些将构成javaDoc文档. 2.javadoc命令只能处 ...

  2. java 中linux命令参数说明,java中linux命令参数说明

    java中linux命令参数说明 [2021-02-01 18:54:34]  简介: 建站服务器 这篇文章主要介绍了Apache中Virtual Host虚拟主机配置及rewrite模块中的重要参数 ...

  3. 如何在Java中解析命令行参数?

    在Java中解析命令行参数的好方法是什么? #1楼 我不建议使用Apache Common CLI库,因为它是非线程安全的. 它使用带有静态变量和方法的有状态类来进行内部工作(例如OptionBuil ...

  4. Java中的命令设计模式

    在本教程中,我们将学习命令模式,这是一种重要的行为设计模式. 它具有一些重要的应用程序,例如在文本编辑器中实现撤消/重做功能. 在命令设计模式中,有一个命令对象位于发送方和接收方对象之间. 发送者对象 ...

  5. java中的命令行参数_Java中的命令行参数

    java中的命令行参数 Command-line arguments in Java are used to pass arguments to the main program. If you lo ...

  6. java在dog中定义name变量,组合构造 冯跃峰 java中组合的应用(不相干的类共同完成一个功能)+构造器回顾...

    java中组合的应用(不相干的类共同完成一个功能)+构造器回顾:今天我们了解到java的组合.可以说java组合是非常的重要的.可以对类进行封装,将底层的内容封装起来.甚至于java的继承都没有其重要 ...

  7. java中如何删除文件或清除文件夹下的所有文件

    java中如何删除文件或清除文件夹下的所有文件呢?现实中如果一个java项目中涉及非常多的删除文件操作,我们最好单独写一个函数实现文件的删除操作,以下是函数的实现: // 删除文件 或者 清除文件夹下 ...

  8. JAVA中的命令模式实例教程

    原文链接  作者:Pankaj Kumar 译者:f0tlo <1357654289@qq.com> 命令模式是一种行为模式,因此,它处理的是对象的行为.命令模式为系统中不同的对象提供中性 ...

  9. java中的命令执行汇总

    一.Java中可执行命令的API: java.lang.Runtime#exec(java.lang.String) java.lang.Runtime#exec(java.lang.String, ...

最新文章

  1. dot3_bump_mapping
  2. 【转载】“error LNK1169: 找到一个或多个多重定义的符号”的解决方法
  3. jQuery将不再支持IE6/7/8
  4. tensorflow与keras的关系
  5. 阿里云日志添加要查询字段
  6. Android--Service完全解析,关于服务你所需知道的一切(下)
  7. 201632位matlab下载_【科研利器】带你get“研”途上的MATLAB入门篇
  8. zlog日志库的简单封装,以及给debug级别添加颜色显示
  9. Java SSH框架学习
  10. GB2312简体中文编码表
  11. 金蝶云系统服务器,金蝶云星空-文件服务器配置指南
  12. android手机自带浏览器无法识别apk文件
  13. Linux下的gpt分区
  14. Resource compilation failed. Check logs for details.
  15. hdu(杭电oj)第一页题目题解
  16. 自学unity,该不该阻止?
  17. unity 关闭所有日志输出
  18. 大数据毕设选题 - 机器学习餐厅销量预测(大数据 python)
  19. nacos和eruka的区别
  20. 考研数据结构之线性表(1.7)——练习题之分离单链表的奇数偶数(C表示)

热门文章

  1. 为什么不能在字符串上使用switch语句?
  2. gridview绑定数据mysql_【gridview控件】怎么绑定数据库并显示?
  3. 用回溯法求子集和的c++代码
  4. python解析dom,关于Python解析xml dom的简单应用
  5. mysql删除员工_MySQL误删数据救命指南:开发人员必收藏
  6. 华为 博士 实习_华科女博士年薪156入职华为!最新回应:在深圳也难买房…
  7. brave浏览器_升华拜克股票行情:Brave推出适用于PC和移动设备的以隐私为中心的广告拦截浏览器v1.0...
  8. 作为程序猿必须了解的生产者与消费者
  9. JavaScript:数据的存储
  10. c语言 0494-方程求根,C语言:作业一 选择结构.doc