springJDBC一对多关系,以及Java递归,jsp递归的实现
maven编译,springMVC+spring+springJDBC框架。
要实现的功能是一个文件夹下,可能显示n个文件夹,每个文件夹下又可能显示n个文件夹。。。。
前台效果:
controller中的方法如下:
@RequestMapping(value="/index",method=RequestMethod.GET)
public String getIndex(HttpServletRequest request,@RequestParam(required=false) Integer isHidden){
if(isHidden==null) isHidden = 1;//1 showHidden
request.setAttribute("list", cwInfoService.getAllCwInfo(isHidden));
return "/jsp/coursewareSelectAll";
}
pojo类如下:
package org.sakaiproject.courseware.pojo;
import java.util.Date;
import java.util.List;
/**
* 描述:课件信息
* @author Promise
* Date:2015-08-04
*/
public class CwInfo {
/**主键*/
private Integer cwId;
/**课件名称*/
private String cwName;
/**课件路径*/
private String cwPath;
/**创建人*/
private String createUser;
/**创建时间*/
private Date createTime;
/**修改时间*/
private Date updateTime;
/**修改人*/
private String updateUser;
/**父级编号*/
private Integer parentId;
/**工具编号*/
private String toolId;
/**课件描述*/
private String cwContent;
/**是否隐藏 0隐藏 1显示*/
private Integer isHidden;
/**包含有cwinfo对象的集合*/
private List<CwInfo> cwInfo; //重点是我添加了一个属性,用于存放子课件信息的parentId等于父课件信息的cwId用的集合
public List<CwInfo> getCwInfo() {
return cwInfo;
}
public void setCwInfo(List<CwInfo> cwInfo) {
this.cwInfo = cwInfo;
}
public Integer getIsHidden() {
return isHidden;
}
public void setIsHidden(Integer isHidden) {
this.isHidden = isHidden;
}
public Integer getCwId() {
return cwId;
}
public void setCwId(Integer cwId) {
this.cwId = cwId;
}
public String getCwName() {
return cwName;
}
public void setCwName(String cwName) {
this.cwName = cwName;
}
public String getCwPath() {
return cwPath;
}
public void setCwPath(String cwPath) {
this.cwPath = cwPath;
}
public String getCreateUser() {
return createUser;
}
public void setCreateUser(String createUser) {
this.createUser = createUser;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public String getUpdateUser() {
return updateUser;
}
public void setUpdateUser(String updateUser) {
this.updateUser = updateUser;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public String getToolId() {
return toolId;
}
public void setToolId(String toolId) {
this.toolId = toolId;
}
public String getCwContent() {
return cwContent;
}
public void setCwContent(String cwContent) {
this.cwContent = cwContent;
}
}
dao中,我用springJDBC操作数据库如下:
package org.sakaiproject.courseware.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.sakaiproject.courseware.dao.CwInfoDao;
import org.sakaiproject.courseware.pojo.CwInfo;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository
public class CwInfoDaoImpl implements CwInfoDao {
@Resource(name="jdbcTemplate")
private JdbcTemplate jdbcTemplate;
@SuppressWarnings("unchecked")
public List<CwInfo> findCwInfo(Integer cwId,Integer isHidden){
String sql = "select * from cw_info where parent_id="+cwId;
if(isHidden==1) sql=sql+" and is_hidden="+isHidden;
List<CwInfo> list = jdbcTemplate.query(sql, new cwMapper());
for (int i = 0; i < list.size(); i++) {
List<CwInfo> cwList = this.findCwInfo(list.get(i).getCwId(),isHidden); //这里实现了查询的递归方法
list.get(i).setCwInfo(cwList);
}
return list;
}
@Override
@SuppressWarnings("unchecked")
public List<CwInfo> getAllCwInfo(Integer isHidden){
String sql = "select * from cw_info where parent_id=0";
if(isHidden==1) sql=sql+" and is_hidden="+isHidden;
List<CwInfo> countList = jdbcTemplate.query(sql,new cwMapper());
for (int i = 0; i < countList.size(); i++) {
List<CwInfo> cwList = this.findCwInfo(countList.get(i).getCwId(),isHidden);
countList.get(i).setCwInfo(cwList);
}
return countList;
}
class cwMapper implements RowMapper { //springJDBC要实现的类,查询用的
@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
CwInfo cw = new CwInfo();
cw.setCreateTime(rs.getDate("create_time"));
cw.setCreateUser(rs.getString("create_user"));
cw.setCwContent(rs.getString("cw_content"));
cw.setCwId(rs.getInt("cw_id"));
cw.setCwName(rs.getString("cw_name"));
cw.setCwPath(rs.getString("cw_path"));
cw.setParentId(rs.getInt("parent_id"));
cw.setToolId(rs.getString("tool_id"));
cw.setUpdateTime(rs.getDate("update_time"));
cw.setUpdateUser(rs.getString("update_user"));
cw.setIsHidden(rs.getInt("is_hidden"));
return cw;
}
}
前台jsp页面,我用的是一个jsp页面,嵌套另一个jsp页面,如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div name="spreadContent">
<c:forEach items="${list.cwInfo }" var="list">
<tr class="odd">
<td headers="expansion">
${list.cwName }
</td>
</tr>
<c:if test="${not empty list.cwInfo }">
<c:set var="list" value="${list.cwInfo}" scope="request" /> //传参用这种方式传递
<c:import url="courseContent.jsp" /> //重点是这里包含本页面,本页面就叫做courseContent.jsp,这是递归jsp页面
</c:if>
</c:forEach>
</div>
主要的jsp页面如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<body>
<table>
<div id="content-content">
<c:if test="${not empty list }">
<c:forEach items="${list }" var="list">
<tr class="odd">
<td headers="checkboxes">
${list.cwName }
</td>
</tr>
<c:if test="${not empty list.cwInfo }">
<c:set var="list" value="${list.cwInfo}" scope="request" /> //传参用这种方式传递
<c:import url="courseContent.jsp" /> //重点是这里调用了jsp的递归jsp方法
</c:if>
</c:forEach>
</c:if>
</div>
</c:forEach>
</c:if>
</div>
</table>
</form>
</div>
</body>
<script type="text/javascript" src="/library/js/jquery/jquery-1.9.1.min.js">
</script>
</html>
springJDBC一对多关系,以及Java递归,jsp递归的实现的更多相关文章
- 【Java EE 学习 45】【Hibernate学习第二天】【对象的三种状态】【一对多关系的操作】
一.对象的三种状态. 1.对象有三种状态:持久化状态.临时状态.脱管状态(游离状态) 2.Session的特定方法能使得一个对象从一个状态转换到另外一个状态. 3.三种状态的说明 (1)临时状态:临时 ...
- Mybatis框架中实现双向一对多关系映射
学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...
- hibernate学习(5)——一对多关系表达
一对多实现 1. 实现类 package com.alice.hibernate02.vo; import java.util.HashSet; import java.util.Set; publi ...
- 菜鸟学习Hibernate——一对多关系映射
Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生.如图: Hibernate中如何来映射这两个的关系呢? 下面就为大家讲解一下: 1.创 ...
- hibernate一对多关系配置
一. 表信息 公司表 cId cName cAdress Null Null Null 表t_company 员工表 sId sName sAge cId Null Null Null Nul ...
- MyBatis之级联——一对多关系
上次我们讲到了MyBatis的一对一关系的表示,简单回顾一下一对一关系就是一个学生只有一个学生证.那么什么是一对多关系呢?一个学生有多个课程这就是一对多的关系.我们结合上一章中的学生和学生证,在此基础 ...
- hibernate框架学习笔记8:一对多关系案例
两个实体类:客户与联系人,一个客户可以有多个联系人 客户类: package domain; import java.util.HashSet; import java.util.Set; //客户实 ...
- JAVA记录-JSP内容
JSP(JavaServer Pages )是什么? JavaServer Pages(JSP)是一种支持动态内容开发的网页技术它可以帮助开发人员通过利用特殊的JSP标签,其中大部分以<%开始并 ...
- 【笔试题】Java 中如何递归显示一个目录下面的所有目录和文件?
笔试题 Java 中如何递归显示一个目录下面的所有目录和文件? import java.io.File; public class Test { private static void showDir ...
随机推荐
- Java编程思想学习(六) 多态
1.Java语言的三大特性:继承.封装和多态. 继承:复用类的一种方法,可以简省很多代码: 封装:通过合并特征和行为来创建新的数据类型.[这种“数据类型”跟Java本身提供的8大“基本数据类型”的地位 ...
- poj 1006 中国剩余定理解同余方程
其实画个图就明白了, 该问题就是求同余方程组的解: n+d≡p (mod 23) n+d≡e (mod 28) n+d≡i (mod 33) #include "iostream" ...
- HDU 1060 Left-most Digit
传送门 Leftmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- UvaLive 5026 Building Roads
传送门 Time Limit: 3000MS Description There is a magic planet in the space. There is a magical country ...
- android jni
1, java.lang.UnsatisfiedLinkError: Couldn't load xxxxx: findLibrary returned null 当 apk 是被放到 /system ...
- MyEclipse使用SVN进行项目版本控制
一.搭建SVN服务器. 例如,使用VisualSVN Server,下载后安装. (1)在Repositories(版本库)上右击,新建Repository,选择Regular FSFS reposi ...
- MySQL的表分区详解
这篇文章主要介绍了MySQL的表分区,例如什么是表分区.为什么要对表进行分区.表分区的4种类型详解等,需要的朋友可以参考下 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysq ...
- Android 实现卫星菜单(精简版)
MainActivity.java public class MainActivity extends AppCompatActivity { private ArcDemo mArc; privat ...
- Unity Shaders Vertex & Fragment Shader入门
http://blog.csdn.net/candycat1992/article/details/40212735 三个月以前,在一篇讲卡通风格的Shader的最后,我们说到在Surface Sha ...
- 锋利的jQuery-3--用js给多选的checkbox或者select赋值
单选的select: <select id="single"> <option>Single</option> <option>Si ...