随着书签越来越多,查找起来费劲,做小网站来管理。下面就详细讲下我在做这个小案例的时候遇到的一些问题以及如何搭建的环境。
项目第一节:数据库设计
数据库设计,设想的方式有三种:范式设计 、 反范式设计 、文本搜索引擎lucen设计。
一.范式设计
考虑数据库设计中,有三张表:
网页信息表:id 、 网页名 、网页地址 、网页描述
标签表:标签id 、 标签名 、 标签下网页数量
多对多关系映射表: 映射表id 、 标签表 id 、 网页信息表id
表结构:
create table website(
wid varchar(20) primary key,
wname varchar(50),
whref varchar(100),
wdesc varchar(1000)
);
create table tag(
tid varchar(20) primary key,
tagname varchar(50),
tcount int(100)
);
create table tagweb(
twid varchar(20) primary key,
tid varchar(20),
wid varchar(20)
);
添加主外键约束:
alter table tagweb add constraint FK_Reference_tw_1 foreign key (tid)
references tag (tid) on delete restrict on update restrict;
alter table tagweb add constraint FK_Reference_tw_2 foreign key (wid)
references website (wid) on delete restrict on update restrict;
二 、反范式设计
考虑数据库设计中有两张表:
网页信息表: id 、 网页名称 、网页地址 、网页描述 、网页标签名称
标签表:标签id 、 标签名 、 标签下网页的数量
三 、lucent设计方案(单独开一篇再写这个)
项目第二节:环境搭建
在环境搭建中,采用的是maven来管理项目。本项目打算用spring+mybatis+strus2来完成。因此搭建环境就需要多多注意配置文件等等一系列的问题。
在环境搭建中。主要分为三部分:
1 、由mybatis来处理的数据层
2 、有Struts2来完成整合的web层
3 、以及由spring来充当大管家管理AOP切面等的一些处理部分。
一 、mybatis的配置。
采用mybatis框架主要分为dao包和mapper层。这之间需要用一个配置文件来进行连接。
首先在dao包中,基本的一些语句例如:
public String getWebsiteInfo(String wid){
String result="";
try {
SqlSession session = MybatisUtils.getSqlSession();
result = session.selectOne("精确到配置mapper中方法id", wid);
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
其中封装了一个取sqlsession的mybatis的帮助类:
/**
* mybatis的帮助类
*/
public class MybatisUtils {
private static SqlSessionFactory factory;
/**
* 获取联接工厂
* @return
* @throws IOException
*/
public static SqlSessionFactory getFactory() {
try {
System.out.println("----------------------");
if(factory==null){
String config="mybatis-config.xml";
//流的操作(读取)
InputStream iis=Resources.getResourceAsStream(config );
//使用xml解析 , 解析出 mybatis-config.xml中的 数据库的配置项 ,创建数据联接池
factory= new SqlSessionFactoryBuilder().build( iis );//二级缓存是共用了SQLSessionFactory
}
System.out.println(factory);
} catch (IOException e) {
e.printStackTrace();
}
return factory;
}
public static SqlSession getSqlSession() throws IOException{
return getFactory().openSession();
}
public static SqlSession getSqlSession( boolean isAutoCommit) throws IOException{
return getFactory().openSession(isAutoCommit);
}
}
在mapper中的查询如下:
<mapper namespace="com.cloud.dao.mapper.WebsiteMapper">
<!-- 查信息 -->
<select id="" parameterType=""
resultType="">
</select>
在dao与mapper之间的连接配置部分如下:
<properties resource="db.properties"></properties>
<environments default="development">
<environment id="development">
<!-- 表示事务管理机制: jdbc -->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/cloud/dao/mapper/WebsiteMapper.xml" />
</mappers>
在此数据层环境就全部搭建完成,其余配置在响应操作时在进行搭建。