SSH开发 用户登陆和注册文档格式.docx
《SSH开发 用户登陆和注册文档格式.docx》由会员分享,可在线阅读,更多相关《SSH开发 用户登陆和注册文档格式.docx(67页珍藏版)》请在冰豆网上搜索。
b)<
在DriverName后面定义该数据源的名称.(DemoMySQL)
c)<
更改对应的ConnectionURL(jdbc:
mysql:
//localhost:
3306/book)
d)<
点击AddJARs按钮,选择数据库连接驱动
e)<
在UserName和Password里面,输入用户名和密码
f)<
为了方便,选择Savepassword多选框
如下是配置成功后的界面
iv)点击Finish,完成数据源的配置
项目框架搭建步骤:
1用MyEclipse建立一个Webproject(DemoSSH)
2鼠标右击工程->
MyEclipse->
AddStrutsCapabilities,出现如下界面:
i)选择struts的版本1.2
ii)在Basepackagefornewclasses输入框里面,输入自己的包路径.book.demo.struts
3鼠标右击工程->
AddSpringCapabilities,出现如下界面:
如图显示,选择上面的选项:
i)Springversion:
Spring2
ii)MyEclipseLibraries
iii)在JARLibraryInstallation里面,选择Copychecked….
4点击下一步,出现如下界面:
点击Finish
5鼠标右击工程->
AddHibernateCapabilities,出现如下界面:
做如上图显示的选择,点击Next,进入如下界面:
6<
选择Springconfigurationfile,点击Next
7<
选择ExistingSpringconfigurationfile,在SessionFactoryID后面的输入框输入session工厂名称,可以自己起名.我们这里输入sessionFactory.点击Next,进入下面界面
8<
在BeanId后面输入数据源的id,可以自己定义,我们这里输入dataSource..在DBDriver里面,选择我们在前面配置的数据源,点击Next,进入下面界面:
9<
在javapackage中输入HibernateSessionFactory类的包名,如果没有,可以点New生成一个新的包路径.在ClassName后面,输入即将生成的HibernateSessionFactory的类名,我们这是HibernateSessionFactory.选择Java5做为我们编译的JDK
点Finish完成
到这里,我们完成了Struts+Spring+Hibernate的框架搭建,还有最后一步,因为MyEclipse加入的Springliberary和Hibernate3的liberary有冲突,不能正常运行,要解决这问题,需要将工程lib目录下(WebRoot/WEB-INF/lib)的jar文件都删除,数据库驱动程序除外,然后用将光盘里整理的jar文件copy进去.copy完jar文件,就完成了框架的所有搭建.
接下来,我们介绍怎么样在这框架的基础上,开发我们的样例功能模块.
上章我们已经解释了SSH框架的搭建,现在我们开始在搭建好的SSH框架下进行开发。
首先我们要建好需求中定义的数据库,并生成对应的POJO对象以及对象和表的映射文件。
建表脚本
1.<
建立数据库
Createdatabasedemodb
2.<
用户表(TUSER)
CREATETABLE`demodb`.`TUSER`(
`ID`INTEGERUNSIGNEDNOTNULLAUTO_INCREMENT,
`USER_NAME`VARCHAR(10)NOTNULL,
`NAME`VARCHAR(30)NOTNULL,
`EMAIL`VARCHAR(50),
`PHONE`VARCHAR(20),
`PASSWORD`VARCHAR(10)NOTNULL,
PRIMARYKEY(`ID`),
UNIQUEINDEX`Index_2`(`USER_NAME`)
)
3.<
商品表(SHOP)
CREATETABLE`demodb`.`SHOP`(
`NAME`VARCHAR(50)NOTNULL,
`PRICE`DOUBLENOTNULLDEFAULT0.0,
`SIMPLE_DESC`VARCHAR(500)NOTNULL,
`ALL_DESC`TEXTNOTNULL,
PRIMARYKEY(`ID`)
4.<
订单主表(TORDER)
CREATETABLE`demodb`.`TORDER`(
`USER_ID`INTEGERUNSIGNEDNOTNULL,
`ORDER_TIME`DATETIMENOTNULL,
`R_ADDRESS`VARCHAR(200)NOTNULL,
`R_NAME`VARCHAR(50)NOTNULL,
`R_PHONE`VARCHAR(20)NOTNULL,
CONSTRAINT`FK_ORDER_1`FOREIGNKEY`FK_ORDER_1`(`USER_ID`)
REFERENCES`tuser`(`ID`)
ONDELETERESTRICT
ONUPDATERESTRICT
5.<
订单详细表(ORDER_DETAIL)
CREATETABLE`demodb`.`ORDER_DETAIL`(
`ORDER_ID`INTEGERUNSIGNEDNOTNULL,
`SHOP_ID`INTEGERUNSIGNEDNOTNULL,
`AMOUNT`INTEGERUNSIGNEDNOTNULLDEFAULT1,
`S_PRICE`DOUBLENOTNULLDEFAULT0.0,
`A_PRICE`DOUBLENOTNULLDEFAULT0.0,
CONSTRAINT`FK_ORDER_DETAIL_1`FOREIGNKEY`FK_ORDER_DETAIL_1`(`ORDER_ID`)
REFERENCES`torder`(`ID`)
ONUPDATERESTRICT,
CONSTRAINT`FK_ORDER_DETAIL_2`FOREIGNKEY`FK_ORDER_DETAIL_2`(`SHOP_ID`)
REFERENCES`shop`(`ID`)
6.<
日志表(LOG)
CREATETABLE`demodb`.`LOG`(
`USER_ID`INTEGERUNSIGNED,
`OPERATE`VARCHAR(50)NOTNULL,
`TIME`DATETIMENOTNULL,
`SHOP_ID`INTEGERUNSIGNED,
CONSTRAINT`FK_LOG_1`FOREIGNKEY`FK_LOG_1`(`USER_ID`)
CONSTRAINT`FK_LOG_2`FOREIGNKEY`FK_LOG_2`(`SHOP_ID`)
7.<
用MyEclipseHibernate插件,生成初步的POJO对象和相关的映射xml文件
在数据库中,建立一个数据库demoDB,运行上面的数据库脚本,在demoDB建立项目需要的表
在MyEclipse中,配置数据源
i)<
window->
openperspective->
ii)<
在DBBrowser窗口中,点击鼠标右键,选择new,出现如下窗口
如上图填写数据库连接的配置,点Finish按钮
在DBBrowser窗口中的新配置的sshDemo节点上,点击鼠标右键->
OpenConnection,如果配置成功,可以展开如下类似界面,在demodb中可以找到用数据库脚本生成的表
用MyEclipse的Hibernate插件,生成所有的POJO对象和映射xml文件
在DBBrowser窗口中,选中demodb里面的所有表,点击鼠标右键,出现如下界面:
如上图进行相关选项的配置,注意Javasrcfolder后面的输入内容,是要指定工程里面的src目录,我们这里是sshDemo/src.配置好后,点击Next按钮,显示如下界面
iii)<
在上图的IDGenerator后面,选择主键生成类型increment,点击Finish按钮,完成POJO对象,mapxml文件以及基本DAO文件的生成,可以在sshDemo工厂src的.book.demo.hibernate.dao包下,找到相关的代码.比如Tuser.java->
tuser对应的POJO对象;
Tuser.hbm.xml->
TuserPOJO对象和tuser表的mapxml;
TuserDAO.java->
tuser的DAO操作类
生成的mapxml文件中,class标签中有个catalog属性,在Oracle,SQLServer数据库中是有效的,可是在MySQL数据库中,会影响Hibernate具体操作中SQL语句的生成.在这里我们需要将它删除掉.
比如Tuser.hbm.xml中有如下内容:
classname="
.book.demo.hibernate.dao.Tuser"
table="
tuser"
catalog=”demodb”>
我们需要将catalog=”demodb”删除,最后结果如下:
>
对其它的mapxml文件,也要做同样的处理
打开一个自动生成的DAO,我们可以发现,里面已经生成了单个POJO对象的所有操作方法,比如TuserDAO.java里面,已经包含了对Tuser对象进行新增,修改,删除,根据主键查询,根据指定属性和值进行查询,以及根据每个属性进行查询.
可是,生成的DAO,没有提供灵活多变的sql语句的查询,比如多个对象的联合查询,还有分页功能也没有实现.
接下来的工作,是对这些自动生成的DAO,添加上面缺少的功能事项.
新增一个基类DAO,BaseDAO.java,代码如下:
/**
*
*/
package.book.demo.hibernate.dao;
importjava.sql.SQLException;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;
importjava.util.Set;
importorg.hibernate.HibernateException;
importorg.hibernate.Query;
importorg.hibernate.Session;
importorg.springframework.orm.hibernate3.HibernateCallback;
importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;
*@authorNoble.Yang
*
publicclassBaseDAOextendsHibernateDaoSupport{
//默认分页大小
privateintRECORDS_PER_PAGE=5;
publicintgetPages(StringqueryStr,intpageSize,MapfilterMap)
throwsHibernateException{
//剔除掉orderby部分,使得执行语句为简单的selectcount(*)from...
intlength=queryStr.indexOf("
orderby"
)>
0?
queryStr
.indexOf("
):
queryStr.length();
Stringhql="
selectcount(*)"
+queryStr.substring(queryStr.indexOf("
from"
),length);
try{
Sessionsession=this.getSession();
Queryquery=session.createQuery(hql);
setFilterToQuery(query,filterMap);
Listlist=query.list();
intsize=0;
if(list.size()>
0){
size=((Integer)list.get(0)).intValue();
}
session.close();
returngetPages(size,pageSize);
}catch(HibernateExceptione){
throwe;
publicintgetRecordCount(StringqueryStr)throwsHibernateException{
//size=(Integer)list.get(0);
returnsize;
*Description:
查询
*@paramqueryStr
*hql语句
*@paramtargetPage
*当前查询页(当值为-1时,为不分页查询,否则为分页查询)
*@parampagesize
*分页大小
*@return
publicListgetAllByHql(finalStringqueryStr,finalinttargetPage,finalintpagesize)
if(targetPage<
=0&
&
targetPage!
=-1||pagesize<
1)
returnnull;
//这里使用的是Hibernate的回调方式,目的是让Spring自己去管理Session
//如果不用这种方式,可以自己用getSession()方法得到Session进行操作,如同其它方法中的使用
//但是要注意,Session用完后,要及时closesession,否则会有数据库连接不能及时释放问题
return(List)this.getHibernateTemplate().execute(newHibernateCallback(){
publicObjectdoInHibernate(Sessionsession)throwsHibernateException,
SQLException{
Queryquery=session.createQuery(queryStr);
if(targetPage!
=-1){
query.setFirstResult((targetPage-1)*pagesize);
query.setMaxResults(pagesize);
returnquery.list();
});
publicListgetAllByHql(StringqueryStr,inttargetPage,intpagesize,
MapfilterMap)throwsHibernateException{
Listlist=null