请教大家帮我解释一段 JAVA 程序代码,越详细越好!谢谢大家!

// 查询部门列表
public Page<DepartmentVO> findPage(PageRequest pageRequest,
DepartmentVO department) {
//创建查询条件容器
Map<String, Object> values = new HashMap<String, Object>();
//创建SQL容器
StringBuilder sb = new StringBuilder();
//添加数据
sb.append("select t1.id as id,t1.dept_name as dept_name,case when t2.dept_name is null then '无' else t2.dept_name end as parent_dept_name,t1.parent_dept_id as parent_dept_id,ci.companynameforshort as companyName"
+ " from srp_depts t1 left join srp_depts t2 on t1.parent_dept_id=t2.id left join set_companyinfo ci on ci.id=t1.company where t1.isdel='0'");
Page<DepartmentVO> dept = null;
try {

//查询条件不为空
if (department != null) {
//判断查询条件是否为空
if (StringUtils.isNotBlank(department.getQuery_deptName())) {
//把查询条件加入sql容器(使用参数模式)
sb.append(" and t1.dept_name like:deptName");
//给查询参数赋值
values.put("deptName", "%" + department.getQuery_deptName()
+ "%");
}
if (StringUtils.isNotBlank(department.getQuery_parentDeptName())) {
sb.append(" and t2.dept_name like:parentDeptName");
values.put("parentDeptName", "%"
+ department.getQuery_parentDeptName() + "%");
}
}
sb.append(" order by t1.parent_dept_id desc ");
//获取page
dept= jdbcDao.queryForPage(pageRequest, sb.toString(),DepartmentVO.class, values);
} catch (Exception e) {
e.printStackTrace();
}
return dept;
}
我是JAVA新手,这是个BS架构的管理软件的查询功能方法,我只知道大概意思,但
比如Page<DepartmentVO> findPage(PageRequest pageRequest, DepartmentVO department)??。。

很多我都不明白,请大家帮帮我!谢谢大家!

1.Page<DepartmentVO>表示Page类是一个泛型类,类中变量类型全部与DepartmentVO表(类)中字段有关(或者说Page类中的变量时对DepartmentVO表中字段的描述)。这种泛型类定义的好处在于可以封装DepartmentVO类需要的字段,同时也可以包含自己的变量。这种情况通常用于对查询结果进行分页时提供前台查询条件参数和分页所需要的必要参数,以便在sql中填充查询条件参数。
2.findPage(PageRequest pageRequest, DepartmentVO department)这是上述泛型类中的分页查询的方法,参数包含分页工具类PageRequest和DepartmentVO类这两个类参数实质上是对泛型类所包含所有变量归属 更明确的说明和补充。通过这两个参数你可以方便的给sql赋值参数了。如:sql中department.getQuery_parentDeptName() 赋值部门名称。又如:
dept= jdbcDao.queryForPage(pageRequest, sb.toString(),DepartmentVO.class, values);传入pageRequest对象参数以方便分页设置参数。顺便讲下这个方法的四个参数:分页对象(提供分页参数),sb.toString()(sql语句),DepartmentVO.class(部门类编译后的bean对象,提供sql部门参数),values(提供sql条件查询所需要的实际的参数值)追问

谢谢您的回答,我觉的自己还是不太明白,因为涉及到的基础知识太多了,对于JAVA,我也是刚刚入门,我想知道您所说的这些,包括整个代码所涉及的知道,我应该去看些什么书,或什么资料才能达到很好的理解和认识呢。

追答

    java编程思想(Thinking in Java):涉及但这段代码所需要的java基础知识(java疯狂讲义)中的泛型类和为什么要设计泛型类。

    同时你还需要了解此项目的框架,代码组织结构。以方便你对业务处理的代码调用逻辑有更好的理解。常见框架(MVC)+常见技术(Servlet,Struts,Spring)等。

    对涉及到的数据库知识也需要把握,包含常见得sql表述方式,参数的添加方法,及底层查询结果集方法得掌握。DB2,ORICAL,SQL Server,mysql等。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-08
//给查询参数赋值
values.put("deptName", "%" + department.getQuery_deptName()
+ "%");
}
if (StringUtils.isNotBlank(department.getQuery_parentDeptName())) {
sb.append(" and t2.dept_name like:parentDeptName");
values.put("parentDeptName", "%"
+ department.getQuery_parentDeptName() + "%");
}
}
sb.append(" order by t1.parent_dept_id desc ");

这个就是拼sql查询语句..增加%是模糊查询
//获取page
查询返回带分页的实体
dept= jdbcDao.queryForPage(pageRequest, sb.toString(),DepartmentVO.class, values);
} catch (Exception e) {
e.printStackTrace();
}
return dept;
}

Page<DepartmentVO> findPage(PageRequest pageRequest, DepartmentVO department)

这个就是自己写的分页查询啊.返回一个Page类型的里面应该有DepartmentVO实体集合及分页信息.这个是自己封装好的方法...你传对参数.就会返回你要的实体.追问

另外 findPage(PageRequest pageRequest,DepartmentVO department)
这段的话,PageRequest有两个?难道第二个PageRequest的类型是第一个PageRequest,怎么解释呢,DepartmentVO department这连个又是什么意思,如果是引用类或变量也有.预算符啊,很纠结这些。

追答

.....这是基础的声明变量类型啊...声明一个pageRequest类型为PageRequest 的变量...这个pageRequest自己随意想取什么名都行的...

第2个回答  2013-10-08
每一步的注释都已经写的很清楚了啊
把你不明白的具体问题写出来 具体说说
第3个回答  2013-10-08
Page<DepartmentVO> findPage(PageRequest pageRequest, DepartmentVO department)

这个很简单,如下例

public int sum(int a,long b,String c){
......
}

这里方法定义很明显,首先方法返回值类型为int即,public后面的int;方法名为sum;

再看方法参数,即括号里面的内容,一共3个参数,a为int型,b为long型,c为String类型

继续看你这些方法
Page<DepartmentVO> findPage(PageRequest pageRequest, DepartmentVO department)

方法返回值:Page<DepartmentVO> ,返回封装了DepartmentVO的page对象,这你可以看看泛型。

方法名:findPage

方法参数:PageRequest pageRequest, 参数1类型为PageRequest,用pageRequest来标识,这个标识可以随便改,你可以改成a,b等
DepartmentVO department,参数2类型为DepartmentVO,用department来标识,这个标识可以随便改,你可以改成a,b等

所以,你的方法也可以改成
Page<DepartmentVO> findPage(PageRequest a, DepartmentVO b){
..
}

方法参数类型正确即可,后面的只是标识,不违反编译错误下可随心所欲定义。追问

非常非常感谢你的这么详细的回答,我刚刚才看到,感觉你这么一说原来模糊的东西一下都明白了,再次非常感谢!我问题还会向您请教!

相似回答