1、SSH框架 CRUD及验证 ajax校验 完整实例一SSH框架下 CRUD及验证完整实例(一)一准备工作 目标和工具在学习Java两个月之后,尝试使用学过的东西写一个最简单的页面,实现对一张数据库进行基本的CRUD操作和分页,顺便增加服务端验证和Ajax动态验证以及简单的验证码.使用的工具和环境如下:SSH框架(Struts2.1.6,Spring2.5,Hibernate3.2), Myeclipse8.0, Oracle10g数据库,JS类库prototype.js,json2.js. 数据库连接池使用的是proxool,应用到的jar包如下图,其中dojo和dwr两个插件是后期添加功能时
2、要用,本实例没有用到,在添加项目Hibernate和Spring支持的时候冲突的架包已经删除. 项目的目录结构源文件的目录结构如左图,其中pass文件夹放的是一些历史文件,和本例无关.项目按照mvc框惯例,分为action, dao, model, service, web五层. jsp文件如右图所示放在了WebRoot/per文件夹下,连同js库文件,其中register.jsp是测试验证码使用的. 项目对应的数据库表PL/SQL工具下代码如下,其中命名空间,大小等信息因人而异.- Create tablecreatetable PERSON(IDNUMBER(10) notnull,NAM
3、EVARCHAR2(30), AGE NUMBER(10), SEX VARCHAR2(10), ADDRESS VARCHAR2(50)tablespace USERSpctfree10initrans1maxtrans255storage (initial64Kminextents1maxextentsunlimited );- Create/Recreate primary, unique and foreign key constraints altertable PERSONaddprimarykey (ID)usingindextablespace USERSpctfree10in
4、itrans2maxtrans255storage (initial64Kminextents1maxextentsunlimited );二开发步骤首先新建web项目crm,依次为项目添加SSH支持,接着用工具或命令在数据库中建立数据表PERSON,4个列ID,NAME,AGE,ADDRESS,其中ID为主键.接着在Myeclipse中打开database试图,为数据库新建一个连接或者使用已有的连接.接下来可以选择直接在database试图中选中PERSON表使用Hibernate反向工程自动生成实体Dao和映射表,也可以自己编写这些文件,相关代码如下. model层,包名com.perso
5、n.crm.modelPerson.java 数据表对应的实体类packagecom.person.crm.model;publicclass Person implementsjava.io.Serializable privatestaticfinallongserialVersionUID = -6013196370398044363L; private Long id; private String name; private Long age; private String sex; private String address; public Person() /* full co
6、nstructor */ public Person(String name, Long age, String sex, String address) this.name = name; this.age = age; this.sex = sex; this.address = address; /各个属性的getter和setter方法 Person.hbm.xml 映射表主键设置为列ID,生成方式assigned及由输入指定!DOCTYPEhibernate-mappingPUBLIC-/Hibernate/Hibernate Mapping DTD 3.0/ENPageBean m
7、odel层用于分页的Beanpackagecom.person.crm.model;importjava.util.List;/* * 分页BEAN */publicclassPageBean /要返回的某一页的记录列表 SuppressWarnings(unchecked) private List list; /总记录数 privateintallRow; /总页数 privateinttotalPage; /当前页 privateintcurrentPage; /每页记录数 privateintpageSize; /是否为第一页 privatebooleanisFirstPage; /是
8、否为最后一页 privatebooleanisLastPage; /是否有前一页 privatebooleanhasPreviousPage; /是否有下一页 privatebooleanhasNextPage; /各种getter和setter方法 /* * 初始化分页信息 */ publicvoidinit() this.isFirstPage = isFirstPage(); this.isLastPage = isLastPage(); this.hasPreviousPage = isHasNextPage(); this.hasNextPage = isHasNextPage();
9、 /* * 计算总页数,静态方法,供外部直接通过类名调用 * parampageSize每页记录数 * paramallRow总记录数 * return总页数 */ publicstaticintcountTotalPage(finalintpageSize,finalintallRow) inttotalPage = allRow % pageSize = 0 ? allRow/pageSize : allRow/pageSize+1; returntotalPage; /* * 计算当前页开始记录 * parampageSize每页记录数 * paramcurrentPage当前第几页 *
10、 return当前页开始记录号 */ publicstaticintcountOffset(finalintpageSize,finalintcurrentPage) finalint offset = pageSize * (currentPage-1); return offset; /* * 计算当前页,若为0,或者请求的URL中没有?page=,则用1代替 * param page 传入的参数(可能为空,即0,则返回1) * return当前页 */ publicstaticintcountCurrentPage(int page) finalintcurrentPage = (pag
11、e = 0 ? 1 : page); returncurrentPage; Dao层,包名com.person.crm.daoPersonDao.java Dao接口,提供了本例要实现的基本功能 CRUD,用户名校验package com.person.crm.dao;import java.util.List;import com.person.crm.model.Person;public interface PersonDao extends PageUtilDao public void add(Person p); public Person getPerson(Long id);
12、public ListgetPersons(); public ListgetPersonsByName(); public void update(Person p); public void delete(Long id); public booleanidExists(Long id); PageUtilDao.java 用于分页的接口,主要是定义final intpagesize每页显示的信息条数packagecom.person.crm.dao;importjava.util.List;publicinterfacePageUtilDao publicstaticfinalintpa
13、gesize = 5; /* * 分页查询 * paramhql查询条件 * param offset 开始记录 * param length 一次查询几条记录 * return */ SuppressWarnings(unchecked) public List queryForPage(final String hql, finalint offset, finalint length); /* * 查询所有结果数量 * hql查询条件语句 * return总记录数 */ publicintgetAllRowCount(String hql);PersonDaoHibernate.java
14、 接口的实现类publicclassPersonDaoHibernateextendsHibernateDaoSupportimplements PersonDao publicvoid add(Person p) getHibernateTemplate().save(p); publicvoid delete(Long id) Person p = (Person)getHibernateTemplate().get(Person.class, id); getHibernateTemplate().delete(p); public Person getPerson(Long id) r
15、eturn (Person)getHibernateTemplate().get(Person.class, id); publicListgetPersons() List persons = getHibernateTemplate().find(from Person order by id ASC); return persons; publicListgetPersonsByName() List persons = getHibernateTemplate().find(from Person order by name); return persons; publicvoid u
16、pdate(Person p) getHibernateTemplate().update(p); SuppressWarnings(unchecked) publicbooleanidExists(Long id) String hql=from Person as p where p.id=+id+; List list=this.getHibernateTemplate().find(hql); if(list!=null&list.size()0) /此id已经存在 returntrue; returnfalse; /此id不存在 /* * 查询所有记录数 * return总记录数 *
17、/ publicintgetAllRowCount(String hql) returnthis.getHibernateTemplate().find(hql).size(); /* * 分页查询 * * return分页查询所得到的记录数 */ SuppressWarnings(unchecked) public List queryForPage(final String hql, finalint offset, finalint length) List list = this.getHibernateTemplate().executeFind(newHibernateCallba
18、ck() public Object doInHibernate(Session session)throwsHibernateException, SQLException Query query = session.createQuery(hql);/ if(offset=0 & length 0) query.setFirstResult(offset); query.setMaxResults(length);/ List list = query.list(); for(Person p : list) System.out.println(ID:+p.getId()+-姓名:+p.
19、getName()+-年龄:+p.getAge()+-性别:+p.getSex()+-地址:+p.getAddress(); return list; ); return list; 业务层service 包名com.person.crm.servicePersonManager.java 业务层接口publicinterfacePersonManager publicvoidaddPerson(Person p); publicvoidgetPerson(Long id); public ListlistPerson(); public ListlistPersonByName(); pub
20、licvoidupdatePerson(Person p); publicvoiddeletePerson(Long id); public Person get(Long id); publicbooleanidExists(Long id); /* * 分页查询 * paramcurrentPage当前第几页 * parampageSize每页大小 * return封闭了分页信息(包括记录集list)的Bean */ publicPageBeanqueryForPage(intpageSize,intcurrentPage);PersonManagerImpl.java 业务层实现类/在这
21、个方法里处理事务publicclassPersonManagerImplimplementsPersonManager privatePersonDaopersonDao; publicvoidsetPersonDao(PersonDaopersonDao) this.personDao = personDao; publicPersonDaogetPersonDao() returnpersonDao; /省略其他方法 /* * 分页查询 */ SuppressWarnings(unchecked) publicPageBeanqueryForPage(intpageSize, int pa
22、ge) final String hql = from Person ORDER BY id ASC; intallRow = personDao.getAllRowCount(hql);/总记录数 inttotalPage = PageBean.countTotalPage(pageSize, allRow);/总页数 intpageStartR = PageBean.countOffset(pageSize, page);/当前页开始记录 if(pageStartR 0) pageStartR = 0; finalint offset = pageStartR;/当前页开始记录 final
23、int length = pageSize;/每页记录数 finalintcurrentPage = PageBean.countCurrentPage(page); List list = (List)personDao.queryForPage(hql, offset, length);/某一页的记录 /*将分页信息保存到BEAN中*/ PageBeanpageBean = newPageBean(); pageBean.setPageSize(pageSize); pageBean.setCurrentPage(currentPage); pageBean.setAllRow(allRo
24、w); pageBean.setTotalPage(totalPage); pageBean.setList(list); pageBean.init(); returnpageBean; web层包名com.person.crm.web一个用于生成验证码的类AuthImg.java 源码见附件 action层负责处理用户请求包名com.person.crm.actionValidateIDAction.java 验证用户名是否存在时要调用的actionpublicclassValidateIDActionextendsActionSupport private String tip; pri
25、vatePersonManagerpersonManager; private Long id; private Person person; private Boolean flag; /各种getter和setter省略 public String validateID() System.out.println(this.person.getId(); if(personManager.idExists(this.person.getId() setTip(系统中已有+person.getId()+这个ID,请重新选择一个!); setFlag(true); else setTip(您好!
26、+person.getId()+,这个ID可用!); setFlag(false); returnSUCCESS; PersonList.java 分页显示信息publicclassPersonListextendsActionSupport privatePersonManagerpersonManager; /第几页 privateintpage; privatePageBeanpageBean; /各种getter和setter public String execute() throws Exception /分页的pageBean, this.pageBean = personManager.queryForPage(PageUtilDao.pagesize, page); returnSUCCESS; PersonAction.java 处理crud的actionpublicclassPersonActionextendsActionSupport privatestaticfinallongserialVers
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1