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: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: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>

时间: 2024-08-29 17:24:01

springJDBC一对多关系,以及Java递归,jsp递归的实现的相关文章

MyBatis之级联——一对多关系

上次我们讲到了MyBatis的一对一关系的表示,简单回顾一下一对一关系就是一个学生只有一个学生证.那么什么是一对多关系呢?一个学生有多个课程这就是一对多的关系.我们结合上一章中的学生和学生证,在此基础上新增一个课程表和课程成绩表.学生对应课程表是一对多的关系,在学生确定的情况下课程表对应课程成绩是一对一的关系.我们先来看看我们所假设的场景数据结构的设计. 数据库的ER图如下(因为对数据库还处于菜鸟阶段--所以可能ER图绘制有误,但不影响我们讲解MyBatis一对多关系的级联): 再看看数据库的物

Mybatis框架中实现一对多关系映射

学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢? 其实很简单 首先我们照常先准备前期的环境(具体解释请  参考初识Mybatis进行增.删.改.查 blogs )这里我就直接上代码了 主配置文件:Configuration.xml <?xml version="1.0" encoding="UTF-8" ?&

Hibernate中双向的一对多关系

何为双向,双向的意思就是你我之间可以互相通信(customer(1)和order(n)) 也就是说customer可以访问order,order也可以访问customer 二者构成了双向的关系 在Hibernate中如何实现双向的一对多关系呢?? 步骤: I在1的一端(也就是customer)添加n端(order)的集合列表,并添加get和set方法 package com.jeremy.hibernate.app.example.both; import java.util.HashSet;

菜鸟学习Hibernate——一对多关系映射

Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生.如图: Hibernate中如何来映射这两个的关系呢? 下面就为大家讲解一下: 1.创建实体类Classes和实体类Student Classes.java package com.bjpowernode.hibernate; import java.util.Set; public class Classes { private int id; private String nam

MyBatis学习笔记(五)一对多关系

有了之前的student表,address表后,再加上一张表,grade年级表,一个年级对应多个学生,在查询grade表的时候,一并查询学生表. 一条grade数据对就多条学生数据,一对多关系. 一.首先完成从grade----> student的单向联结. 1.建表mybatis_grade. [html] view plain copy package com.skymr.mybatis.model; import java.util.List; public class Grade { p

hibernate学习(5)——一对多关系表达

一对多实现 1. 实现类 package com.alice.hibernate02.vo; import java.util.HashSet; import java.util.Set; public class Customer { private Integer id; private String name; // 一对多:一个客户(当前客户) 拥有 [多个订单] // * 需要容器存放多个值,一般建议Set (不重复.无序) // * 参考集合:List.Map.Array等 // *

mybatis 中一对多关系简单应用

1:应用场景 主要需要实现是一个实体类中存在一个字段,该字段为一个集合,集合存放的是另外一个实体类类型 如教室类(Class)中有一个学生类(student)的集合,即表示一个教室中 存在多个学生 项目保存路径: D:\海同\mybatis\9.16\FirstMybatis 2:相关代码 创建数据库中表语句 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20) ); CREATE TABLE

使用annotation配置hibernate(2):一对多关系配置

数据表结构 单向一对多 Student.java 1 @Entity 2 @Table(name = "student") 3 public class Student { 4 @Id 5 @Column(name = "id") 6 @GenericGenerator(name = "generator",strategy = "native") 7 @GeneratedValue(generator = "gen

hibernate实体xml一对多关系映射

单向一对多关系映射: 一个房间对应多个使用者,也就是Room實例知道User實例的存在,而User實例則沒有意識到Room實例. 用户表: package onlyfun.caterpillar; public class User { private Long id; private String name; public User() {} public Long getId() { return id; } public void setId(Long id) { this.id = id