SSH2_增删查改实例
SSH2整合实例详细教程
本次教程是SSH2的环境搭建,主要用到的技术是struts2.0+hibernate3.2+spring2.0,这种架构在现在很流行的,也是很多高校学生做毕业设计的架构,今天我们就用这种架构做一个简单的实例,详细的步骤,在于抛砖引玉,给大家一点启发。
一、创建数据库的时候会创建出联合主键<Composite-id>。
二、项目创建1、打开MyEclipse,点击File,指向New,点击Web Project。
2、输入工程名SSH,J2EE Specification Level为Java EE 5.0,点Finish即可创建完项目。
三、添加hibernate环境1、右击刚建立的SSH项目,指向MyEclipse,点击Add Hibernate Capabilities。
2、出现如下对话框之后,选择要用到的Hibernate3.2,以及所用到的包,选择Copy checked Library Jars to project folder and add to build-path,点击Next。
3、到了这一步,按默认设置,点击Next。
4、取消Specify database connection details的选择,再点击Next。
5、取消Create SessionFactory class选择,最后点击Finish。
这样一些有关hibernate的jar包点导进来了,以及建了一个hibernate.cfg.xml文件。
导入前:导入后:四、添加spring环境1、和添加hibernate环境的方法大致相同,右击SSH项目,指向MyEclipse,点击Add spring Capabilities。
2、选择要用到的Spring 2.0,勾选用到的库,注意还要勾选Spring 2.0 Web Libraries的库,一共是勾选了5个库的。
再选择Copy checked Library contents to project folder(TLDs always copied),点击Next。
用SSH2实现简单的用户登录注册删除功能
第一次尝试把SSH2整合起来,这里记下编写当中遇到的问题和自己的思考一、使用struts编写登陆注册等界面Java代码1.<body>2.This is my Register page. <br>3.<form action = "register!register" method = "post">ername:<s:textfield name ="username"/><br>5.password:<s:password name = "password1"/><br>6.repeatpassword:<s:password name = "password2"/><br>7.email:<s:textfield name ="email"/><br>8.<s:submit value ="submit"/><br>9.<s:reset value ="reset"/><br>10. <s:actionerror /> <s:actionmessage />11. </form>12. </body>注意这里的 <s:actionerror /> <s:actionmessage />用法表示出Action中的this.addActionError("the username repeated");字符串参数。
由于之前分析过很多类似的界面,这里不再赘述二、在spring框架中引入hibernate框架首先我引入spring框架,在其配置文件中,引入hibernate框架。
SSH实现的增删改查实例
SSH实现的增删改查实例分类:ssh 2010-10-01 17:12 1487人阅读评论(5) 收藏举报一.整合步骤1. 通过MyEclipse向导,添加struts功能2. 通过MyEclipse向导,添加Hibernate3功能:生成会话工厂的那个步骤中一定要将那个对号要去掉,不能由hibernate来生成,而是交给Spring来生成;还有就是导入jar包的时候选择复制到lib目录下这一项。
3. 通过MyEclipse向导,导入实现Spring功能,注意导入jar包的时候选择复制到lib目录下这一项。
3. 利用MyEclipse反向工程的方法,以Spring<dao>生成dao对象的方式创建Hibernate DAO,相关POJO及其xxx.hbm.xml。
4. DAO实现类加入@Transactional标记。
5. 修改applicationContext.xml文件,增加Spring事务管理、DAO等bean的配置。
6. 编写action类。
7. 在applicationContext.xml文件中添加Action的代理bean。
8. 在struts的配置文件中,添加相应的Action,类名指向Spring中的代理bean,并加入<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />和<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"><set-property property="contextConfigLocation"value="/WEB-INF/classes/applicationContext.xml" /></plug-in>。
ssh2实例(带截图)
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(一)在JavaEE企业级开发中,以SSH2框架为核心的应用非常广,大象根据项目实践经验,通过一个实例,详细的为大家讲解如何实现全注解式的开发。
开发环境JDK1.6.0_18Eclipse3.2.1MyEclipse5.1.0Tomcat6.0.10MySQL5.0.27Navicat Lite for MySQL 8.1.20每个人的开发环境可能会有差异,但有一点我需要说明的是,JDK的版本不得低于1.5,因为用到了很多1.5版才支持的新特性。
Tomcat和MySQL请不要低于我所用的版本,因为我没在其它的版本上进行测试。
Navicat则是MySQL数据库的图形化操作工具。
我在这里假定各位目前已经设置好了开发环境,下面就开始详细的说明。
由于要阐述的内容比较多,大象决定将它们划分成个几章节来讲,这一章就主要来说说jar包的选择。
第一部分:选择必须的jar包新建一个web项目,然后将必要的jar包COPY到lib里面。
根据本文实例demo,大象给出下图中的最少jar包配置。
我对这些jar包进行一下说明,方便大家理解。
解压Struts2.1.6的lib文件夹,从中选出上面7个jar包添加到我们的工程库中。
commons-logging、freemarker、ognl、struts2-core、xwork这5个还是struts2的核心包。
但在Struts2.1.6这个版本中,还需要加上commons-fileupload包。
如果没有,则启动就会报错,不过不需要像网上传言的那样还得加上commons-io的jar包,这些大象都亲自做过测试。
在本实例中,我将对struts2也采取注解的方式,所以用到了struts2-convention-plugin-2.1.6.jar这个插件。
因为要与spring整合,所以struts2-spring-plugin-2.1.6.jar也必不可少。
SSH2做的一个批量操作
一个批量删除的操作,其它的批量操作可以类似方法做。
今天做了一个批量删除的操作,拿来分享一下自己想着做的,方法肯定不好,望各位大虾多多指点,小弟正在学习途中……..数据随便添加的VO类:public class User {private int id;private String username;private String password;…….. //setter、getter方法User.hbm.xml:<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mapping package="vo"><class name="User" table="user"><id name="id" column="id"><generator class="native"/></id><property name="username" unique="true" not-null="true" length="16"></property><property name="password"></property></class></hibernate-mapping>Action类Public class UserAction extends ActionSupport{public String[] opids; //需要批量操作的标识public User user; //User的引用public UserDAO userdaoimp; // 接口统一操作,可以只有setter方法,spring 注入….. //setter getter方法public String execute() throws Exception {userdaoimpl.batch_op(opids);return success;}}DAO接口:public interface UserDAO {//批量操作Boolean batch_ops(String[] ops);}DAOIMPL类Public class UserDAOImpl extend HibernateDaoSupport implements UserDAO{Public boolean batch_ops(String[] ops){StringBuffer sb=new StringBuffer();//把字符数据拆分成'1','2','3','4','5'...等这样的数据,还有最后一位后面不能再有逗号for(int i=0;i<ops.length;i++){if(i==ops.length-1){sb.append("'"+ops[i]+"'");}else{sb.append("'"+ops[i]+"',");}}int i=this.getSession().createSQLQuery("delete from users where id in("+ops+")")executeUpdate();//很多人都说执行sql删除要好些;if(i>0){b=true;}return b;}}前台用户列表页面代码:只放出重要的代码哈。
SSH实例解析
1SSH配置1.1 创建SSH应用1.1.1创建WEB应用1.1.2添加Struts2特性添加时选择Struts2.1。
要选择上面的两个Libraries。
1.1.3添加Spring3选择Spring 3 AOP Library、Spring 3 Core Library、Spring 3 Web Library。
将applicationcontext.xml保存到src目录(默认),取消允许AOP Builder选项。
1.1.4JDBC数据库连接拷贝JDBC驱动程序到web-inf/lib,刷新工程。
使用MyEclipse Database Explorer透视图来配置数据库连接。
配置JDBC驱动程序参数,并且选中“Save password”。
最后可以使用“Test Driver”测试连接是否成功。
1.1.5添加Hibernate添加Hibernate3.3,选择所有Spring库。
整合Hibernate配置到Spring。
将配置保存到Spring配置文件中。
使用已存在的Spring配置文件。
选择数据库连接。
在“DB Driver”中选择之前配置的数据库连接,如果使用MySQL数据库则Dialect必须选择“MySQL”。
不要创建HibernateSessionFactory(使用Spring集成SessionFactory实现)。
1.1.6Jar包冲突解决方案向导结束后,由于Struts2、Hibernate和Spring的包的版本有冲突,需要重新设置。
删除向导的Jar配置从工程的属性面板中选择“Java Build Path”,将所有Struts2、Spring、Hibernate的库全将提供的EShopping例子解压,将WEB-INF/lib目录下所有jar包拷贝到工程的WEB-INF/lib目录下即可。
有冲突的jar包在EShopping中已经手工删除了。
最后在项目上右键菜单中选择“Refresh”即可,现在就完成了SSH项目框架的搭建。
libssh2--ssh2实例
libssh2--ssh2实例#include "libssh2_config.h"#include<libssh2.h>#include<libssh2_sftp.h>上述为所包含必备头⽂件。
以下为定义的静态⼦串常量const char *keyfile1 = "~/.ssh/id_rsa.pub";const char *keyfile2 = "~/.ssh/id_rsa";const char *username = "username";const char *password = "password";unsigned long hostaddr;int rc, sock, i, auth_pw = 0;struct sockaddr_in_sin;const char *fingerprint;char * userauthlist;LIBSSH2_SESSION *session;LIBSSH2_CHANNEL *channel;连接到SSH2步骤:(1)建⽴socket并连接到远程主机SSH2服务(22端⼝);(2)创建⼀个LIBSSH2_SESSION 实例并启动它。
启动动作包括设置欢迎横幅、交换密钥并且设置加密、压缩和MAC层。
session = libssh2_session_init(); //创建⼀个会话实例if(libssh2_session_handshake(session, sock)){fprintf(stderr, "Failure establishing SSH session");return -1;}(3)认证:检查主机密钥指纹并检查可⽤的认证⽅式。
fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);userauthlist = libssh2_userauth_list(session, username, strlen(username));if(strstr(userauthlist, "password") != NULL){auth_pw |= 1;}if(strstr(userauthlist, "keyboad-interactive") != NULL){auth_pw |= 2;}if(strstr(userauthlist, "publickey") != NULL){auth_pw |= 4;}(4)如果在参数列表中设置了认证⽅式,则将认证⽅式设为命令中的⽅式(前提是该⽅式是通过上个步骤检测可⽤的)。
ssh2框架 的一个用例实现
用例11.2乘务员执行发动机异常时调度员的安排功能描述 ................................................................................................................................... 1 实现步骤 .. (2)1.连接数据库 .................................................................................................................... 2 注意事项: ............................................................................................................................... 4 程序设计 .. (6)1.准备工作 ........................................................................................................................ 6 2.编写Dao 层代码 ........................................................................................................... 7 3. 编写Service 层代码 .................................................................................................. 8 4. 编写Action层代码 ........................................................................................ 9 5. 编写xml配置文件 .............................................................................................. 10 6. 编写jsp代码 ...................................................................................................... 11 附件:. (12)1.main.jsp 文件 ............................................................................................................... 12 1.2实现效果 . (13)为了帮助大家更好的完成用例的程序设计,我写了如下文档,该文档描述了一个简单的用例是如何用jsp 实现的。
在eclipse里基于SSH实现增删改查源代码
<!-- <LINK href="css/admin.css" type="text/css" rel="stylesheet">-->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询</title>
</tr>
<tr class="editFooterTr">
<td class="editFooterTd" colspan="2">
<input type="submit" value="保存"/> <input type="reset" value="重置">
</td>
</tr>
</table>
</head>
<body>
<table class="position">
<tr class="position">
<td class="position">学生信息</td>
</tr>
</table>
<s:form action="editStudent">
ssh 2使用技巧
ssh 2使用技巧SSH(Secure Shell)是一种加密的远程登录协议,可以通过SSH协议连接远程主机并进行安全的远程操作。
在使用SSH 协议进行远程登录时,有一些技巧可以提高我们的效率和安全性。
首先,我们可以使用SSH配置文件来简化连接过程。
SSH配置文件通常位于用户的家目录下的".ssh"文件夹中,文件名为"config"。
在该文件中,我们可以预先配置好多个主机的连接信息,包括主机名、用户名、端口号等。
这样,每次连接时只需要输入"ssh 主机别名"即可,大大简化了连接过程。
其次,使用SSH公钥认证可以提高安全性并免去输入密码的麻烦。
SSH公钥认证是通过生成一对密钥(公钥和私钥),将公钥放置在远程主机上,私钥保存在本地。
当进行SSH连接时,远程主机会通过匹配本地私钥和远程主机上的公钥来进行认证,从而实现无密码登录。
使用SSH公钥认证需要生成密钥对,并将公钥复制到远程主机的"~/.ssh/authorized_keys"文件中。
另外,通过SSH端口转发可以实现本地与远程主机之间的安全通信。
SSH端口转发可以将远程主机的端口映射到本地主机上,从而可以在本地主机上访问远程主机上的服务。
有两种类型的SSH端口转发:本地端口转发和远程端口转发。
本地端口转发将本地主机上的端口映射到远程主机上,而远程端口转发则相反。
可以使用以下命令进行SSH端口转发:- 本地端口转发:ssh -L local_port:remote_host:remote_portuser@server- 远程端口转发:ssh -R remote_port:local_host:local_portuser@server此外,还可以使用SSH会话保持功能来实现长时间的连接,并避免因长时间没有操作而导致连接中断。
通过修改SSH配置文件中的"ClientAliveInterval"和"ClientAliveCountMax"参数,我们可以设置心跳包的发送间隔和最大未响应次数,从而保持SSH连接的持久性。
使用SSH开发增删改查的综合用户管理例子
托给业务层StudentManager 类来完成 根据个人爱好的不同,你既可以先完成前台的页面,也可以
先把后台的业务类写完整,或者是两个人分工的话一人负责 一部分
指定了位于web.xml 中的 Struts 核心Servlet 的名字
指定了默的国 际化资源文件包
是否安装Struts 的标签库文件
添加了 Struts 的目录结构
在 src 目录下编写我们自己 的类
Struts 1.2 的类库
struts-config.xml Struts 的TLD 文件
验证器文件
这也是实际开发两人或者多人分工协作可能出现的情 况,例如:一个写前台,一个写后台
当然我们并不是要让大家非得按照软件工程或者项目 管理规范,把所有的文档都写好了才能真正开始编码, 我们只需要让想法表示出来,就可以了
用代码来表示自己的想法,其实也是一种很不错的办 法(一直备受赞扬的敏捷开发――Agile,就是这样)
用户管理应用业务流程图
业务流程说明
功能模块 分页列出用户 创建新用户(new) 删除用户(delete) 修改用户(edit) 查找用户(search)
流程 index.jsp→list.do new.jsp→new.do→list.do Delete.do→list.do edit.do→edit.jsp→save.do→list.do Search.do→search.jsp
Struts 配置文件编辑器
双击 WebRoot/WEB-INF/struts-config.xml 就可以打开 Struts 配置文件编辑器
SSH实例(简单地增删改查功能)
SSH实例(简单地增删改查功能)SSH (Secure Shell) 是一种安全协议,用于在不安全的网络环境中安全地远程访问和控制计算机。
它提供了加密和身份验证机制,确保远程连接的安全性。
SSH通常用于通过命令行界面远程管理Linux和Unix系统,但也可以用于其他操作系统和用途。
在本篇文章中,我们将介绍如何使用SSH在远程计算机上实现简单的增删改查功能。
我们将使用SSH客户端的命令行界面,该界面可用于执行远程命令和管理文件。
我们将使用以下步骤来完成这个任务:1.配置SSH客户端:首先,我们需要配置SSH客户端以连接到远程计算机。
我们需要提供远程计算机的IP地址、用户名和密码或SSH密钥。
如果远程计算机已经配置了SSH服务器,我们可以直接使用SSH命令连接到远程计算机。
例如,使用以下命令连接到远程计算机:``````2. 创建增加数据的脚本:在远程计算机上,我们可以使用各种脚本语言编写脚本来实现增加数据的功能。
例如,我们可以使用Python编写一个脚本,在数据库中插入一条新的记录。
我们可以通过SSH命令在远程计算机上执行该脚本。
例如,使用以下命令执行脚本:``````3. 创建删除数据的脚本:类似地,我们可以编写一个脚本来删除数据库中的记录。
例如,我们可以使用Python编写一个脚本,在数据库中删除指定的记录。
我们可以通过SSH命令在远程计算机上执行该脚本。
例如,使用以下命令执行脚本:``````4. 创建修改数据的脚本:同样地,我们可以编写一个脚本来修改数据库中的记录。
例如,我们可以使用Python编写一个脚本,在数据库中更新指定的记录。
我们可以通过SSH命令在远程计算机上执行该脚本。
例如,使用以下命令执行脚本:``````5. 创建查询数据的脚本:最后,我们可以编写一个脚本来查询数据库中的记录。
例如,我们可以使用Python编写一个脚本,从数据库中检索指定的记录。
我们可以通过SSH命令在远程计算机上执行该脚本。
SSH2配置完整案例
SSH2配置完整案例一新建WEB项目SSH2二在dbbrowser中新建数据连接sql五添加hibernate容器这里应当是webroot/web-inf/applicationContext.xml完成后结构图如下:六配置各文件1 配置struts.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration2.1//EN""/dtds/struts-2 .1.dtd"><struts><!-- 开发模式 --><constant name="struts.devMode"value="true"/><!-- 告诉struts2,action的创建交给spring --> <constant name="struts.ObjectFactory"value="s pring"></constant><package name="struts2"extends="struts-defaul t"><action name="list"class="com.my.action.ListA dmin"><result name="success">listAdmin.jsp</result> </action></package></struts>2 配置web.xml<listener><listener-class>org.springframework.web.cont ext.ContextLoaderListener</listener-class> </listener><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.Stru tsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>7 代码1 逆向工程admin表生成后的结构2 ListAdmin.java action类package com.my.action;import java.util.List;import com.my.orm.Admin;import com.my.orm.AdminDAO;import com.opensymphony.xwork2.ActionSupport;ActionSupport{ AdminDAO adminDAO;List<Admin>list;@Overridepublic String execute() throws Exception { list=adminDAO.findAll();return"success";}public AdminDAO getAdminDAO() {return adminDAO;}publicvoid setAdminDAO(AdminDAO adminDAO) { this.adminDAO = adminDAO;}public List<Admin> getList() {return list;}publicvoid setList(List<Admin> list) { this.list = list;}}3 listAdmin.jsp<%@page language="java"import="java.util.*"pageE ncoding="utf-8"%><%@taglib prefix="s"uri="/struts-tags"%><%@taglib prefix="c"uri="/jsp /jstl/core"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><body><table border="1"><tr><td>APass</td><td>AHeader</td><td>APhone</td><td>AEmail</td><c:forEach items="${list}"var="x"><tr><td>${x.AName }</td><td>${x.AHeader }</td><td>${x.APhone }</td><td>${x.AEmail }</td></td></c:forEach></table></body></html>4 strut.xml配置<package name="struts2"extends="struts-default"><action name="list"class="com.my.action.ListA dmin"><result name="success">listAdmin.jsp</result> </action></package>5 applicationContext.xml中自动生成的id=”AdminDAO”修改成 id=”adminDao”(也就是AdminDao第一个字母小写,使之与ListAdmin.java中属性adminDAO相匹配)<bean id="adminDAO"class="com.my.orm.AdminDAO"> <property name="sessionFactory"><ref bean="sessionFactory"/></property></bean>最后部署并运行。
使用SSH开发增删改查的综合用户管理例子共102页PPT
•
26、我们像鹰一样,生来就是自由的 ,但是 为了生 存,我 们不得 不为自 己编织 一个笼 子,然 后把自 己关在 里面。 ——博 莱索
•27、法律如果不讲Fra bibliotek理,即使延续时 间再长 ,也还 是没有 制约力 的。— —爱·科 克
•
28、好法律是由坏风俗创造出来的。 ——马 克罗维 乌斯
谢谢!
•
29、在一切能够接受法律支配的人类 的状态 中,哪 里没有 法律, 那里就 没有自 由。— —洛克
•
30、风俗可以造就法律,也可以废除 法律。 ——塞·约翰逊
理例子
61、奢侈是舒适的,否则就不是奢侈 。——CocoCha nel 62、少而好学,如日出之阳;壮而好学 ,如日 中之光 ;志而 好学, 如炳烛 之光。 ——刘 向 63、三军可夺帅也,匹夫不可夺志也。 ——孔 丘 64、人生就是学校。在那里,与其说好 的教师 是幸福 ,不如 说好的 教师是 不幸。 ——海 贝尔 65、接受挑战,就可以享受胜利的喜悦 。——杰纳勒 尔·乔治·S·巴顿
IDEA下写出第一个SSH整合框架练手项目(四,部门和员工的增删改查完成)
IDEA下写出第⼀个SSH整合框架练⼿项⽬(四,部门和员⼯的增删改查完成)视频地址:我的整个完整源码地址:这是SSH 整合项⽬的第三章,第⼀章基于Meavn 整合 Spring 和 Hibernate 框架并进⾏了进⾏了⾃动建表,第⼆章则在此基础上加⼊ Struts 2 框架以及完成⼀个简单的登陆页⾯。
第三章主要侧重于分页查询功能的实现,第四章则着重完善增删改查代码,因为重复性太⼤,直接将代码粘上来,⽐较难的会写上注释。
⾸先写Employee 的增删改查,直接写Action--->Service---->DaoEmployeeAction.java 中新增的代码/*** ⾸先获取到所有的部门,更改员⼯所在的部门,然后跳转到真正添加员⼯的jsp*/public String saveUI() {//查询部门List<Department> list = departmentService.findAll();//集合⽤ set ⽅法,对象⽤ pushActionContext.getContext().getValueStack().set("list", list);return "saveUI";}/*** 保存员⼯的 save()*/public String save() {employeeService.save(employee);return "saveSuccess";}/*** 更新员⼯信息的⽅法*/public String edit() {//根据员⼯ID 查询员⼯employee = employeeService.findById(employee.getEid());List<Department> list = departmentService.findAll();ActionContext.getContext().getValueStack().set("list", list);return "editSuccess";}public String update() {employeeService.update(employee);return "updateSuccess";}/*** 删除员⼯使⽤的⽅法*/public String delete(){employeeService.delete(employee);return "deleteSuccess";}EmployeeService.java(Service 的接⼝全部代码)package com.test.ssh.service;import com.test.ssh.domain.Employee;import com.test.ssh.domain.PageBean;public interface EmployeeService {public Employee login(Employee employee);PageBean<Employee> fingByPage(Integer currPage);void save(Employee employee);Employee findById(int eid);void delete(Employee employee);void update(Employee employee);@Overridepublic void save(Employee employee) {employeeDao.save(employee);}@Overridepublic Employee findById(int eid) {return employeeDao.findById(eid);}@Overridepublic void delete(Employee employee) {employeeDao.delete(employee);}@Overridepublic void update(Employee employee) {employeeDao.update(employee);}此时在/web/frame 下新增⼀个 editEmployee.jsp<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %><%@ taglib uri="/struts-tags" prefix="s" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html;charset=UTF-8"><title></title><body><table border="0" width="600px"><tr><td align="center" style="font-size:24px; color:#666"> 员⼯修改</td></tr><tr><td align="right"><a href="javascript:document.getElementById('saveForm').submit()">保存</a><a href="javascript:history.go(-1)">退回</a></td></tr></table><br/><s:form action="employee_update" method="post" namespace="/" id="saveForm" theme="simple"><s:hidden name="eid" value="%{model.eid}"/><table border='0' cellpadding="0" cellspacing="10"><tr><td>姓名:</td><td><s:textfield name="ename" value="%{model.ename}"/></td><td>性别:</td><td><s:radio name="sex" list="{'男','⼥'}" value="%{model.sex}"/></td></tr><tr><td>出⽣⽇期:</td><td><input type="text" name="birthday" value="<s:date name="model.birthday" format="yyyy-MM-dd"/>"/></td> <td>⼊职时间:</td><td><input type="text" name="joinDate" value="<s:date name="model.joinDate" format="yyyy-MM-dd"/>"/></td> </tr><tr><td>所属部门:</td><td><s:select name="department.did" list="list" listKey="did" listValue="dname"value="%{model.department.did}" headerKey="" headerValue="-----请--选--择----"/></td><td>编号:</td><td><s:textfield name="eno" value="%{model.eno}"/></td></tr><tr><td>⽤户名:</td><td><s:textfield name="username" value="%{ername}"/></td><td>密码:</td><td><s:password name="password" value="%{model.password}" showPassword="true"/></td></tr></table></s:form></body></html>在同⼀位置新增⼀个editDepartment.jsp<head><meta http-equiv="content-type" content="text/html;charset=UTF-8"><title></title></head><body><table border="0" width="600px"><tr><td align="center" style="font-size:24px; color:#666"> 部门编辑</td></tr><tr><td align="right"><a href="javascript:document.getElementById('saveForm').submit()">保存</a><a href="javascript:history.go(-1)">退回 </a></td></tr></table><br/><br><s:form id="saveForm" action="department_update.action" method="post" namespace="/" theme="simple"> <s:hidden name="did" value="%{model.did}"/><table style="font-size::16px"><tr><td>部门名称:</td><td><s:textfield name="dname" value="%{model.dname}"/></td></tr><tr><td>部门介绍:</td><td></td></tr><tr><td width="10%"></td><td><s:textarea cols="50" rows="5" name="ddesc" value="%{model.ddesc}"/>"/></td></tr></table></s:form></body></html>测试发现出现Bug,org.springframework.dao.InvalidDataAccessApiUsageException:object references an unsaved transient instance - save the transient instance before flushing:com.test.ssh.domain.Department; nested exception is org.hibernate.TransientObjectException: object r查询后更改applicationContext.xml将<!--开启注解式事务管理 --><tx:annotation-driven transaction-manager="transactionManager"/>改为<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="search*" read-only="false" /></tx:attributes></tx:advice>然后更改DepartmentAction.java(直接放全部代码)package com.test.ssh.action;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import com.test.ssh.domain.Department;import com.test.ssh.domain.PageBean;import com.test.ssh.service.DepartmentService;import com.test.ssh.service.impl.DepartmentServiceImpl;public class DepartmentAction extends ActionSupport implements ModelDriven<Department> {//模型使⽤的驱动* 查询并设置页数的操作* 先默认当前页⾯ currPage = 1*/private Integer currPage = 1;public void setCurrPage(Integer currPage) {this.currPage = currPage;}public String findAll() {PageBean<Department> pageBean = departmentService.findByPage(currPage); //将pageBean 存⼊到值栈中ActionContext.getContext().getValueStack().push(pageBean);return "findAll";}//添加部门public String save() {departmentService.save(department);return "saveSuccess";}/*** 我们在findAll页⾯⾥点击了编辑按钮后,调⽤edit ⽅法,* 主要是获取想要修改的部门的属性,并展现在⽹页中,* 待⽤户修改完成后,点击保存,则调⽤的是 update() ⽅法进⾏更新*///编辑部门的执⾏的⽅法public String edit() {department = departmentService.findById(department.getDid());return "editSuccess";}//修改部门的执⾏的⽅法public String update() {departmentService.update(department);return "updateSuccess";}/*** 为了完成级联删除,即删除某⼀个部门,对应的所有员⼯都被删除* 需要先查询,后删除*/public String delete() {department = departmentService.findById(department.getDid());departmentService.delete(department);return "deleteSuccess";}public void setDepartment(Department department) {this.department = department;}public void setDepartmentService(DepartmentService departmentService) {this.departmentService = departmentService;}@Overridepublic Department getModel() {return department;}}DepartmentServiceImpl.java(接⼝中的⽗⽅法⼿动补全)package com.test.ssh.service.impl;import com.test.ssh.dao.DepartmentDao;import com.test.ssh.domain.Department;import com.test.ssh.domain.Employee;import com.test.ssh.domain.PageBean;import com.test.ssh.service.DepartmentService;import java.util.List;public class DepartmentServiceImpl implements DepartmentService {private DepartmentDao departmentDao;public void setDepartmentDao(DepartmentDao departmentDao) {this.departmentDao = departmentDao;PageBean<Department> departmentPageBean = new PageBean<Department>();// 封装当前的页数departmentPageBean.setCurrPage(currPage);//封装每页显⽰的记录数,默认为3int pageSize = 3;departmentPageBean.setPageSize(pageSize);//封装总记录数,总记录数通过查询数据库获得int totalCount = departmentDao.findCount();departmentPageBean.setTotalCount(totalCount);//封装总页数double tc = totalCount;Double num = Math.ceil(tc / pageSize);departmentPageBean.setTotalPage(num.intValue());//封装每页显⽰的数据int begin = (currPage - 1) * pageSize;List<Department> list = departmentDao.findByPage(begin, pageSize);departmentPageBean.setList(list);return departmentPageBean;}@Overridepublic List<Department> findAll() {return departmentDao.findAll();}@Overridepublic void save(Department department) {departmentDao.save(department);}@Overridepublic void update(Department department) {departmentDao.update(department);}@Overridepublic void delete(Department department) {departmentDao.delete(department);}@Overridepublic Department findById(int did) {return departmentDao.findById(did);}}DepartmentDaoImpl.java(接⼝中的⽗⽅法⼿动补全)package com.test.ssh.dao.impl;import com.test.ssh.dao.DepartmentDao;import com.test.ssh.dao.EmployeeDao;import com.test.ssh.domain.Department;import com.test.ssh.domain.Employee;import org.hibernate.criterion.DetachedCriteria;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import java.util.List;public class DepartmentDaoImpl extends HibernateDaoSupport implements DepartmentDao { @Overridepublic int findCount() {//查询个数String hql = "select count(*) from Department ";List<Long> list = this.getHibernateTemplate().find(hql);//如果个数if (list.size() > 0) {return list.get(0).intValue();//将Long 类型转为 int 类型后返回.}return 0;DetachedCriteria criteria = DetachedCriteria.forClass(Department.class);List<Department> list = this.getHibernateTemplate().findByCriteria(criteria,begin,pageSize);return list;}@Overridepublic List<Department> findAll() {//查询到所有语句的 hql 语句。
SSH增删改查登录注册
南京晓庄学院《JAVAEE项目》课程报告题目: 基于SSH框架简单功能实现姓名:学号:班级:完成时间2016.12.30成绩:信息工程学院2016年12月目录1.系统简介 (1)2.功能介绍 (1)3.系统设计 (2)3.1 开发工具及运行环境 (2)3.2 功能模块图 (2)3.3数据字典 (3)3.4 系统结构分析 (3)4.系统运行界面展示及主要核心技术及核心代码介绍 (5)5.总结与体会 (13)5.1 工作总结 (13)5.2 改进设想 (13)随着Internet的发展,互联网已成为人们快速获取,发布和传递信息的重要渠道,它已成为社会生活的一部分,计算机技术对教育领域的影响日渐明显,各个高校纷纷将“数字化”引入到教学、科研、管理和信息共享等学校日常工作生活中的各个环节,纷纷建立信息管理和服务平台,用来辅助教学、科研和管理等各种活动。
此次大作业实现的是系统最基本的功能:登录、注册及增删改查操作。
二、功能介绍:该系统实现以下功能:(1)实现用户登录:若登录成功,则跳到主页;若登陆失败,则显示登录失败页面。
(2)实现用户注册:从登陆页面跳转到注册页面,注册成功后返回登录页面,输入刚注册的用户名和密码,就能成功登录。
(3)查询用户信息:点击主页的Users List按钮,即可在页面显示所有的用户信息。
(4)增加用户:点击主页的Add User按钮,即可跳转到增加页面,将要添加的用户信息输入提交后,便可在页面上显示。
(5)删除用户:找到要删除的用户,点击后面的Delete操作,便可将该用户删除。
(6)修改用户:找到要修改的用户,点击后面的Update操作,将要修改的信息输入提交后,显示页面的该用户的信息就会更新。
(7)查看图书、教师、学生、课程信息:分别点击主页上的List Books、List Teachers、List Students、List Courses功能按钮,便可将相对应的信息显示在页面上。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SSH2 增删查改实例(0)软件和框架版本:MyEclipse 6.0.1Tomcat 6.0.14Sturts2 1.8Hibernate 3Spring 2.0Mysql 5.1(一)引入包(共73个,不一定都需要,但是我的项目是这么多,经过调试,有没包冲突)(二)创建数据库表建立数据库octtest,并创建user表,表里面一共4个字段:id,姓,名,年龄。
语句如下:create database octtest;user octtest;DROP TABLE IF EXISTS `users`;CREATE TABLE `users` (`id` int(10) unsigned NOT NULL,`firstname` varchar(50) NOT NULL,`lastname` varchar(50) NOT NULL,`age` int(10) unsigned NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;(三)用myeclipse 中自带的hibernate reverse engineering 工具,根据刚才创建的user表,自动生成实体User 和相应的User.hbm.xml配置文件。
1)在myeclipse中的<DB Browser>视图中创建连接数据库连接,如下图:填入mysql数据库相应的路径,用户名,密码等信息。
注意:这里要引入mysql-connector-java的jar包,需要从外部导入。
2)连接数据库正常后,选择octtest数据库中的user表,右键-》hibernate reverse engineering。
自动生成实体User 和相应的User.hbm.xml配置文件。
(正常情况下可以生成,但是笔者生成engineer有问题,所以只能够手动创建User类和相应的User.hbm.xml,,所以如果读者顺利创建,可跳过2a,2b两部)2a)创建User实体类User.javapackage com.bean;public class User {public Integer id;public String firstname;public String lastname;public int age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getFirstname() {return firstname;}public void setFirstname(String firstname) {this.firstname = firstname;}public String getLastname() {return lastname;}public void setLastname(String lastname) {stname = lastname;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}2b)创建User实体类对应的映射文件,这个映射文件作用是告诉hibernate要把这个User对象和数据库中的user表联系起来。
User.hbm.xml:<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="er" table="users"><id name="id" type="ng.Integer" column="id"><generator class="increment"/></id><property name="firstname" type="string"column="firstname"/><property name="lastname" type="string" column="lastname"/><property name="age" type="ng.Integer"column="age"/></class></hibernate-mapping>(三)编写底层dao操作:对User实体操作,主要还是增删查改4个。
养成好习惯,无论是dao操作还是业务逻辑,最好都先用接口写好要用到的方法,再用实现类去实现。
dao接口:package com.dao;import java.util.List;import er;public interface UserDAO {public void saveUser(User user);public void removeUser(User user);public User findUserById(Integer id);public List<User> findAllUser();public void updateUser(User user);}dao实现:package com.dao.impl;import java.util.List;importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;import er;import erDAO;public class UserDAOImpl extends HibernateDaoSupportimplements UserDAO {@SuppressWarnings("unchecked")public List<User> findAllUser() {String hql = "from User user order by user.id desc";return (List<User>) this.getHibernateTemplate().find(hql);}public User findUserById(Integer id) {User user = (User)this.getHibernateTemplate().get(User.class,id);return user;}public void removeUser(User user) {this.getHibernateTemplate().delete(user);}public void saveUser(User user) {this.getHibernateTemplate().save(user);}public void updateUser(User user) {this.getHibernateTemplate().update(user);}}(四)编写struts.xml applicationContext.xml web.xml配置文件。
其中,web.xml文件是可以一次写完。
struts.xml和applicationContext.xml 需要注意保存路径。
web.xml:(保存路径是:×××项目名/WebRoot/WEB-INF)<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5"xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app> ————————————————————————————————————————applicationContext.xml :(保存路径是:×××项目名/WebRoot/WEB-INF),这个是默认路径<?xml version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.0.xsd"><bean id="dataSource" class="mons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://localhost:3306/octtest"></property><property name="username" value="root"></property><property name="password" value="mysql"></property><property name="maxActive" value="100"></property><property name="maxIdle" value="30"></property><property name="maxWait" value="500"></property></bean><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop></props></property><property name="mappingResources"><list><value>com/bean/User.hbm.xml</value><!--<value>com/gzjs/updatewapi/entity/As_Active_CertBean.hbm.xml</value><value>com/gzjs/updatewapi/entity/Cert_DataBean.hbm.xml</value><value>com/gzjs/updatewapi/entity/Revoke_CertBean.hbm.xml</value><value>com/gzjs/updatewapi/entity/User.hbm.xml</value>--></list></property></bean><bean id="userDao" class="erDAOImpl" scope="singleton"><property name="sessionFactory"><ref bean="sessionFactory"/></property></bean><bean id="userService" class="erServiceImpl"><property name="userDao"><ref bean="userDao"/></property></bean><bean id="saveUserAction" class="com.action.SaveUserAction" scope="prototype"><property name="userService"><ref bean="userService"/></property></bean><bean id="listUserAction" class="com.action.ListUserAction" scope="prototype"><property name="userService"><ref bean="userService"/></property></bean><bean id="showUserRecordAction" class="com.action.ShowUserRecordAction" scope="prototype"> <property name="userService"><ref bean="userService"/></property></bean><bean id="updateUserAction" class="com.action.UpdateUserAction" scope="prototype"><property name="userService"><ref bean="userService"/></property></bean><bean id="deleteUserAction" class="com.action.DeleteUserAction" scope="prototype"><property name="userService"><ref bean="userService"/></property></bean></beans>————————————————————————————————————————struts.xml :(保存路径是:×××项目名/WebRoot/WEB-INF/classes)<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="user" extends="struts-default"><action name="saveUser" class="saveUserAction"><resultname="success"type="redirect">/listUser.action</result><result name="input">/save.jsp</result></action><action name="listUser" class="listUserAction"><result name="success">/listUser.jsp</result></action><action name="showUserRecord"class="showUserRecordAction"><result name="success">/showRecord.jsp</result></action><action name="updateUser" class="updateUserAction"><result name="success"type="redirect">/listUser.action</result><result name="input">/showRecord.jsp</result></action><action name="deleteUser" class="deleteUserAction"><result name="success"type="redirect">/listUser.action</result></action></package></struts>(五)编写action类,有两种方法,一种是crud每种操作一个action,另一种是crud集成到一个UserAction中。