1月13日——培训第44天

今天作逻辑层和表述层的封装,由于需求并不清楚,所以表是边作边完善的……

mybbs作为数据库,

讨论区要做成树状菜单,也就是sections这张表,sections和users是多对多的关系(masters),也就是版主。
用户和角色是多对一关系(user_role),  角色和权限是多对多关系(role_privilege)
sections里面要有
sectionId: Integer类型
sectionName: Varchar(40)
sectionEnglishName: Varchar(40)
sectionTable: varchar(50) :将来需要将该版面存到哪张表里面去
onlineAmount: Integer : 在线访问的人数
sectionCreateTime : Date&Time 创建时间


users:
userId : Integer
userName: Varchar(40)
password : varchar(16)
visitTimes : Integer   登陆的次数(访问次数)
visitTime : Date&Time 最近的访问时间
email : varchar     


roles:
roleId : Integer
roleName : varchar
notes  :  varchar


privilege:
privilegeId: Integer
privilegeName : varchar


====================================
在PowerDesigner中,CTRL和J的组合键可以打开生成数据库的界面。
可以选择从odbc里面生成数据库,也可以从odbc先连接上,然后生成数据库,
还可以先生成脚本,然后在命令行里面执行:
mysql -uroot -proot mybbs < mybbs.sql
===========================

新建包org.mybbs.service封装逻辑层
新建org.mybbs.vo封装实体类:

package org.mybbs.vo ;

public class SectionBean
{
 private Integer sectionId ;
 private String sectionName ;
 private String sectionEnglishName ;
 private String sectionTable ;
 private TimeStamp sectionCreateTime ;
 //然后加上它们的getter方法和setter方法
}

package org.mybbs.service;

public class SectionService//完成了对所有section的增删改的操作
{
 private SectionBean section ;
 private DBReader reader ;
 private DBWriter writer ;

 public SectionService()
 {
  reader = DBManager.getInstance().getDBReader();
  writer = DBManager.getInstance().getDBWriter();
 }

 public SectionBean getSection()
 {
  return this.section ;
 }

 public void setSection(SectionBean section)
 {
  this.section = section ;
 }

 public static ArrayList getAllSection() throws SQLException
 {
  String sql = "select * from sections" ;
  DBReader dbReader = DBManager.getInstance().getDBReader();
  ArrayList result = null ;
  result = dbReader.getData(sql,SectionBean.class) ;
  return result ;//利用了数据层的封装
 }

 public int delete() throws SQLException
 {
  return writer.setData("delete from sections where sectionId ="+section.getSectionId());
 }

 public int insert() throws SQLException
 {
  return writer.addData("sections",section);
 }

 public int update() throws SQLException
 {
  return writer.modifyData(section) ;//这个方法需要自己去完善!
 }
}

//其实应该把DBReader和DBWriter定义成为接口,而不是实际的类,这样逻辑和数据之间的依赖就更降低了,
//只要是接口,那么只要是接口的实现类都可以放到逻辑层中,逻辑层可以依赖于多个实现,而不是单一的

如下所示:
public interface DBWriter
{
 public int addData(String sql , Object obj) throws SQLException;
 public int addData(String sql , Object obj , String keyName) throws SQLException;
 public void modifyData(Object obj) throws SQLException;
 public int setData(Connection conn, String sql) throws SQLException;
 
}

然后就可以:
public DBWriterImpl implements DBWriter
{

}

 


//DBManager中要从配置文件中读取实现类的类名,
//由于DBWriter现在是接口了,所以要得到实现类的话,必须首先知道类名
public DBWriter getDBWriter()
{
 DBWriter writer = null ;

 try
 {
  String writerName = DBConfig.getWriterName() ;
  Class clazz = Class.forName(writerName);
  Class[] param = {DBManager.class} ;
  Constructor con = clazz.getConstructor(param);
  Object[] objs = {this} ;
  writer = (DBWriter)con.newInstance(objs) ;
 }
 catch(Exception e)
 {
  e.printStackTrace() ;
 }


 //writer = (DBWriter)Class.forName(DBConfig.getWriterName()).newInstance() ;
 //也可以像上面那么写(前提是DBWriter中必须有个无参的构造函数才可以!!!)
 return writer ;
}


============================
其他逻辑层可以自行去封装,下面进入表述层
将老师给的树状菜单和css样式拷贝进WebRoot中去。

将树状菜单改为jsp页面,然后要新建一个框架页面index.jsp……

   //左右结构的框架
 <frameset cols="22%,1%, *" frameborder="1">
  <frame src="tree.jsp" />
  <frame src="changeSize.html" />
  <frame src="" />
 </frameset>

在tree.jsp页面中引入css
<link type="text/css" rel="stylesheet" href="css/tree.css"/>

就可以使用那里面的样式了
别忘记引入核心标签库,这样就可以在tree.jsp上使用核心标签了。


<c:forEach var="row" items="${sections}"> //这个sections是个ArrayList集合,但是要先存储在某个作用域里才可以!
 <div>
  ${row.sectionName}
 </div>
</c:forEach>

具体实现要参考老师的源代码,这里只是记载一些关键的步骤

<%
 pageContext.setAttribute("sections",SectionService.getAllSection());//表述层中调用逻辑层的内容
%>


=============================================================

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值