1、b)在Driver Name后面定义该数据源的名称.(DemoMySQL)c)更改对应的Connection URL(jdbc:mysql:/localhost:3306/book)d)点击 Add JARs按钮,选择数据库连接驱动e)在User Name和Password里面,输入用户名和密码f)MyEclipse-Add Struts Capabilities,出现如下界面:i) 选择struts的版本1.2ii) 在Base package for new classes输入框里面,输入自己的包路径.book.demo.struts3 鼠标右击工程-Add Spring Capabili
2、ties,出现如下界面:如图显示,选择上面的选项:i) Spring version :Spring 2ii) MyEclipse Librariesiii) 在JAR Library Installation里面,选择 Copy checked .4 点击下一步,出现如下界面:点击Finish5 鼠标右击工程-Add Hibernate Capabilities,出现如下界面:做如上图显示的选择,点击 Next ,进入如下界面:6选择 Spring configuration file,点击 Next7选择 Existing Spring configuration file, 在Sessi
3、onFactory ID后面的输入框输入session工厂名称,可以自己起名.我们这里输入sessionFactory. 点击 Next,进入下面界面8在Bean Id后面输入数据源的id,可以自己定义,我们这里输入 dataSource.在DB Driver里面,选择我们在前面配置的数据源,点击 Next ,进入下面界面:9在java package中输入Hibernate Session Factory类的包名,如果没有,可以点New生成一个新的包路径.在Class Name后面,输入即将生成的Hibernate Session Factory的类名,我们这是HibernateSessio
4、nFactory.选择Java5做为我们编译的JDK点 Finish 完成到这里,我们完成了Struts+Spring+Hibernate的框架搭建,还有最后一步,因为MyEclipse加入的Spring liberary和Hibernate3的liberary有冲突,不能正常运行,要解决这问题,需要将工程lib目录下(WebRoot/WEB-INF/lib)的jar文件都删除,数据库驱动程序除外,然后用将光盘里整理的jar文件copy进去.copy完jar文件,就完成了框架的所有搭建.接下来,我们介绍怎么样在这框架的基础上,开发我们的样例功能模块.上章我们已经解释了SSH框架的搭建,现在我们
5、开始在搭建好的SSH框架下进行开发。首先我们要建好需求中定义的数据库,并生成对应的POJO对象以及对象和表的映射文件。建表脚本1.建立数据库Create database demodb2.用户表(TUSER)CREATE TABLE demodb.TUSER (ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,USER_NAME VARCHAR(10) NOT NULL,NAME VARCHAR(30) NOT NULL,EMAIL VARCHAR(50),PHONE VARCHAR(20),PASSWORD VARCHAR(10) NOT NULL,PR
6、IMARY KEY (ID),UNIQUE INDEX Index_2(USER_NAME)3.商品表(SHOP)CREATE TABLE demodb.SHOP (NAME VARCHAR(50) NOT NULL,PRICE DOUBLE NOT NULL DEFAULT 0.0,SIMPLE_DESC VARCHAR(500) NOT NULL,ALL_DESC TEXT NOT NULL,PRIMARY KEY (ID)4.订单主表(TORDER)CREATE TABLE demodb.TORDER (USER_ID INTEGER UNSIGNED NOT NULL,ORDER_TI
7、ME DATETIME NOT NULL,R_ADDRESS VARCHAR(200) NOT NULL,R_NAME VARCHAR(50) NOT NULL,R_PHONE VARCHAR(20) NOT NULL,CONSTRAINT FK_ORDER_1 FOREIGN KEY FK_ORDER_1 (USER_ID)REFERENCES tuser (ID)ON DELETE RESTRICTON UPDATE RESTRICT5.订单详细表(ORDER_DETAIL)CREATE TABLE demodb.ORDER_DETAIL (ORDER_ID INTEGER UNSIGNE
8、D NOT NULL,SHOP_ID INTEGER UNSIGNED NOT NULL,AMOUNT INTEGER UNSIGNED NOT NULL DEFAULT 1,S_PRICE DOUBLE NOT NULL DEFAULT 0.0,A_PRICE DOUBLE NOT NULL DEFAULT 0.0,CONSTRAINT FK_ORDER_DETAIL_1 FOREIGN KEY FK_ORDER_DETAIL_1 (ORDER_ID)REFERENCES torder (ID)ON UPDATE RESTRICT,CONSTRAINT FK_ORDER_DETAIL_2 F
9、OREIGN KEY FK_ORDER_DETAIL_2 (SHOP_ID)REFERENCES shop (ID)6.日志表(LOG)CREATE TABLE demodb.LOG (USER_ID INTEGER UNSIGNED,OPERATE VARCHAR(50) NOT NULL,TIME DATETIME NOT NULL,SHOP_ID INTEGER UNSIGNED,CONSTRAINT FK_LOG_1 FOREIGN KEY FK_LOG_1 (USER_ID)CONSTRAINT FK_LOG_2 FOREIGN KEY FK_LOG_2 (SHOP_ID)7.用My
10、Eclipse Hibernate插件,生成初步的POJO对象和相关的映射xml文件在数据库中,建立一个数据库demoDB,运行上面的数据库脚本,在demoDB建立项目需要的表在MyEclipse中,配置数据源i)open perspective-ii)Open Connection,如果配置成功,可以展开如下类似界面,在demodb中可以找到用数据库脚本生成的表用MyEclipse的Hibernate插件,生成所有的POJO对象和映射xml文件在DB Browser窗口中,选中demodb里面的所有表,点击鼠标右键,出现如下界面:如上图进行相关选项的配置,注意Java src folder后
11、面的输入内容,是要指定工程里面的src目录,我们这里是 sshDemo/src. 配置好后,点击 Next 按钮,显示如下界面iii)tuser对应的POJO对象; Tuser.hbm.xml-Tuser POJO对象和tuser表的map xml; TuserDAO.java-tuser的DAO操作类生成的map xml文件中,class标签中有个catalog属性,在Oracle,SQL Server数据库中是有效的,可是在MySQL数据库中,会影响Hibernate具体操作中SQL语句的生成.在这里我们需要将它删除掉.比如Tuser.hbm.xml中有如下内容:class name=.b
12、ook.demo.hibernate.dao.Tuser table=tuser catalog=”demodb”我们需要将catalog=”demodb”删除,最后结果如下:对其它的map xml文件,也要做同样的处理打开一个自动生成的DAO,我们可以发现,里面已经生成了单个POJO对象的所有操作方法,比如TuserDAO.java里面,已经包含了对Tuser对象进行新增,修改,删除,根据主键查询,根据指定属性和值进行查询,以及根据每个属性进行查询.可是,生成的DAO,没有提供灵活多变的sql语句的查询,比如多个对象的联合查询,还有分页功能也没有实现.接下来的工作,是对这些自动生成的DAO,
13、添加上面缺少的功能事项.新增一个基类DAO,BaseDAO.java,代码如下:/* */package .book.demo.hibernate.dao;import java.sql.SQLException;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.Session;import
14、org.springframework.orm.hibernate3.HibernateCallback;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;* author Noble.Yang*public class BaseDAO extends HibernateDaoSupport / 默认分页大小private int RECORDS_PER_PAGE = 5;public int getPages(String queryStr, int pageSize, Map filterMap)th
15、rows HibernateException / 剔除掉order by部分,使得执行语句为简单的select count(*)from.int length = queryStr.indexOf(order by) 0 ? queryStr.indexOf() : queryStr.length();String hql = select count(*) + queryStr.substring(queryStr.indexOf(from), length);try Session session = this.getSession();Query query = session.cre
16、ateQuery(hql);setFilterToQuery(query, filterMap);List list = query.list();int size = 0;if (list.size() 0) size = (Integer) list.get(0).intValue();session.close();return getPages(size, pageSize); catch (HibernateException e) throw e;public int getRecordCount(String queryStr) throws HibernateException
17、 / size = (Integer) list.get(0);return size;* Description: 查询* param queryStr* hql语句* param targetPage* 当前查询页(当值为-1时,为不分页查询,否则为分页查询)* param pagesize* 分页大小* returnpublic List getAllByHql(final String queryStr, final int targetPage, final int pagesize)if (targetPage = 0 & targetPage != -1 | pagesize 1
18、)return null;/ 这里使用的是Hibernate的回调方式,目的是让Spring自己去管理Session/ 如果不用这种方式,可以自己用getSession()方法得到Session进行操作,如同其它方法中的使用/ 但是要注意,Session用完后,要及时close session,否则会有数据库连接不能及时释放问题return (List) this.getHibernateTemplate().execute(new HibernateCallback() public Object doInHibernate(Session session) throws Hibernate
19、Exception,SQLException Query query = session.createQuery(queryStr);if (targetPage != -1) query.setFirstResult(targetPage - 1) * pagesize);query.setMaxResults(pagesize);return query.list(););public List getAllByHql(String queryStr, int targetPage, int pagesize,Map filterMap) throws HibernateException List list = null
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1