ssh增删改查流程文档格式.docx
《ssh增删改查流程文档格式.docx》由会员分享,可在线阅读,更多相关《ssh增删改查流程文档格式.docx(15页珍藏版)》请在冰点文库上搜索。
先让
这个类实现序列接口如:
然后写相应的字段:
利用get和set方法生成每个字段的get()和set()。
例如:
4)为了更够生成
所以为每一个字段写出相应的元数据:
1.生成相应的表:
说明:
利用hibernate生成UserLogin表。
2.字段id的映射,元数据要写在get()方法前面:
3.字段username的映射,元数据要写在get()方法前面:
4.字段password的映射,元数据要写在get()方法前面:
这样这个UserLogin.java就完成了。
5)右键项目名称找到“属性”选项:
找到:
XDoclet点击这个出来相应的界面:
单击
按钮,
出现:
选中:
并单击确定按钮。
点击“确定”按钮。
6)右键项目名称:
执行RunXDocle后只要出现:
就说明你的UserLogin类的
创建成功了!
!
7)新建一个UserLogin.jsp的页面(带Form的那种页面):
生成相应的页面后把属性名称,改成:
给相应的action后面添加一个名字,指明提交表单后走哪个.do如:
8)找到
双击:
在代码
标签中手写action(就是上面表单提交后的那个/***.do):
在找到
标签,写上form-bean的代码:
根据jsp页面提交的/UserLogin.do找到struts-config.xml里面的path属性,
根据name属性找到form-bean标签里的name属性,以及它对应的type属性,type属性写的就是pojo类中UserLogin的全名(包括包名和类名),
Parameter属性是说明表单提交后要执行check方法,
Validate=”false”属性说明不使用表单验证框架,
Scope=”request”说明作用域是request,
Type=””属性写得就是你一会要创建的UserLoginAction的全名(包括包名和类名),
Forword标签就是说明要是check成功后跳转success.jspj,失败就跳转failed.jsp页面。
9)根据上面的xml文件我们创建相应的.java类和相应的jsp页面。
在action包里面创建一个
,
在Web-Root下创建一个
普通的
页面。
在manager包里的impl包里面创建一个UserLoginManager.java文件:
在manager包下创建一个接口IUserLoginManager.java文件:
10)在IUserLoginManager.java接口中写:
写这个方法,因为我们要在业务逻辑层UserLoginManager.java中写check()方法和hql语句进行检查用户登录名称和密码是否正确,而UserLoginManager.java是实现IUserLoginManager.java接口的所以就要在这里写这个方法。
还有一个原因是这是ssh项目用到了Spring,Spring的优点就是让类去实现接口,体现了解耦合的好处。
11)在业务逻辑层UserLoginManager.java中写:
让这个类继承BaseManager<
UserLogin>
(泛型的BaseManager)还要实现刚才写的那个IuserLoginManager接口。
在这个类里面写
这个check()方法是用来检查用户在登陆页面的时候登录名和登录密码是否与数据库里的一致。
具体方法如图:
就是一个传给数据库的hql(hibernate查询语言)语句。
就是一个对象数组,数组下标从0开始,
values[0]表示的获取用户名的值values[1]表示的是获取用户密码的值
注意:
刚才的hql语句第一个是u.username=?
则values[0]就是获取username的值;
如果第一个是u.password=?
则values[0]就是获取password的值。
一定要注意位置写反了就永远查不出来了。
利用dao调用findByHql()方法,里面参数hql(刚才的Stringhql)和values(刚才的对象数组)。
返回的结果用List<
list来接(泛型版本的)。
就是如果list不为空而且里面有相应的数据(也就是list的大小>
0)就说明查询成功返回success否则就返回failed
12)在
中写代码:
让此类继承BaseAction<
,再把IUserLoginManager接口作为字段生成set方法,再添加check方法(添加未实现方法还要改名为check方法)。
具体代码如下图:
把IUserLoginManager接口作为字段(这是一种设计模式叫做简单工厂。
)
在check()方法中:
先实例化UserLogin,利用BeanUtils的copyProperties(实例userlogin,ActionForm的arg1)方法,就是把ActionForm的实例arg1得到的实体(从页面得到的用户输入的用户名和密码)整个拷贝给实例userlogin。
返回ActionMapping的实例arg0的findForward(接口的实例.check(实例userlogin))方法。
13)找到
修改代码:
1.
写上自己写的映射文件名称和路径。
2.检查
相应的包名类名和自己的项目中的包名类名是否一致,如果一致就不用修改。
3.
把写的UserLoginManager注入到Spring里面去。
4.
把UserLoginAction注入到Spring里面去。
14)在
中写一个链接说明:
登陆成功后进入success.jsp会显示相应的链接
如果登录失败就会显示404错误/failed.do
15)在manager包里面创建一个test包在创建一个带有main()方法的test类:
写这个测试类就是为了利用for循环在表里插入相应的数据i值是可以变的,在SqlServer2005中光新建一个数据库sshdenglu就行了,它可以生成UserLogin表里面还有循环插入的数据。
在
中
<
propertyname="
url"
sshdenglu"
>
<
/property>
数据库的名称和你新建数据库的名称一样就行了。
写如下代码:
因为在
中对于实体类的注入,所以用BeanFactory(Bean工厂)利用new一个xml文件并把找到的spring的xml文件放进新new的xml中去,这样就可以让测试类找到注入的相关东西。
不会解释,只知道让测试类找到业务逻辑层UserLoginManager的代码就是这样写。
利用for循环往数据库里面插入数据先用实体类设置相应的数据再把实体类保存到业务逻辑层中。
16)先测试Test,右键main()方法:
执行后先看数据库里面是否有UserLogin表再打开表查看插入的数据是否正确!
17)启动Tocat运行项目,登陆查看是否成功,若成功就会显示
18)点击chaxun链接后要显示所有数据库里的东西。
创建一个带有表单的jsp页面
然后把<
body>
/body>
里面的代码都去掉写如下代码:
就是为了在查询成功页面上显示:
利用logic:
iterate标签和EL表达式循环输出数据库里面的东西:
id=”bean”(bean也以随便起名字)
name=”list”(为什么见下边第21步)
:
获取id号码
获取用户名
获取密码
通过id删除
通过id更新
19)找到
往里面填写查询所有的方法(checkAll()):
20)找到
也往里面写查询所有的方法(checkAll()):
利用dao.findByHql()方法,传hql语句和因为没有第二个参数所以写null还用list来接收
如果list不为空而且大小>
0就返回list(也就是把所有从数据库里面查到的都返回)否则返回null
21)找到
写代码,其实就把刚才写过的那个check()方法复制一下,然后改写就行了:
把方法名改写为checkAll()方法
参数把arg0改成mapping
arg1改成form
arg2改成request
arg3改成response
用request.setAttribute();
把Iuserloginmanager接口中的checkAll()方法的返回值设置给“list”这也就是为什么上面的第18步的页面中的name=“list”了。
并返回sucess
22)找到
,在<
action-mappings>
中写
因为在success.jsp页面上写的是<
ahref="
check.do"
chaxun<
/a>
所以path=“/check”parameter=”checkAll”(执行checkAll方法)
不使用验证框架
作用域为request
成功返回checkSucess.jsp失败返回failed.do
23)测试一下数据库里面的数据能否显示
24)找到
写一个删除的方法:
要利用id删除数据所以传主键id。
25)找到
写相应的删除方法:
利用dao调用delete()方法,这个参数是一个实体,所以还要用dao.get()获得实体,get()的需要2个参数一个是实体类一个是id所以要写成:
dao.get(UserLogin.Class,id)再把它放进dao.deiete()里面就是:
dao.deiete(dao.get(UserLogin.Class,id))?
;
这样了
返回是boolean型所以返回true。
26)找到
写相应的删除方法。
获取一行数据的id号
通过传id执行接口中的删除方法,返回成功或者失败。
27)在checkSucess.jsp中页面上写的是:
所以在
中的<
标签中写:
Path=?
“/del”说明是del.do
parameter=“delById”执行delById方法
不使用验证框架
作用域request
因为我要它删除后还在本页不跳另一个页面所以我写的是check.do也就是本页的意思
失败跳到failed.do
28)执行一下看看能否删除(不报错),报错了在检查一下看看哪里写错了,尤其是
是否和自己起的名字是否一样?
要不就是返回值的问题和在Action中哪里返回的是空值。
29)找到
在方法中写一个更新的方法。
返回list结果集,也是根据id更新,传id值。
30)找到
在方法里写一个更新的方法:
这个方法的参数是主键id,
通过dao调用findByHql()方法,参数hql是通过id查询UserLogin表
参数id是上面Integerid传过来的。
返回相应的集合(集合里面有用户名和密码)。
31)找到
也写一个更新的方法:
接收从页面传过来的id值注意要进行类型转换,利用request.setAttribute()方法,第二个参数是从接口的实例中调用更新的方法(gengById())取出的值设置给第一个参数?
“gengxin”然后返回成功。
32)找到?
:
写出更新的action
因为
中写的是:
代码所以:
path属性=?
“/geng”,执行的是gengById()方法所以parameters=“gengById”作用域是request所以scope=“request”如果成功返回gengxin.jsp页面如果失败返回failed.do。
33)创建一个带form的更新页面
写一行
34)测试一下看看点击更新链接
能否跳转到gengxin.jsp。
35)找到:
写一个反选更新的方法:
它是说明:
当在gengxin.jsp点击更新按钮的时候执行更新的方法。
36)找到
也写一个反选更新的方法:
把实体UserLogin和它的对象login作为参数传给fxgengById(),利用dao调用update(里面的参数为对象login),进行语句的更新。
37)找到
把上面那个gengById方法复制过来,改代码就可以了。
先接受从页面穿过来的id值并要进行强制类型转换;
重新new一个实体;
把ActionForm里面的值拷贝给新new的那个实体;
通过接口的实例去调用fxgengById()方法,参数为新new的实体;
返回跳转的页面。
38)找到页面:
,把<
标签里面的代码(除了表单、
和按钮的代码留下以外)全部去掉,写下面的代码:
利用<
logic?
iterate>
标签输出用户的id、用户名、用户密码,属性id=“geng”随便起的名字(为反选做准备,
反选的意思是:
)。
属性name=?
“gengxin”随起的名字。
标签<
html?
hidden>
表示隐藏域因为id是主键不能修改的,所以利用此标签后用户在页面上是看不到的(其实主键也是被选中的,只不过看不见罢了!
);
text>
表示文本框
password>
表示密码框
这三个标签中的property属性都是与
中,相应的属性名称是一样的;
name属性=“geng”就是为了进行反选(只要用到反选必须写这个属性)
其中value属性就是让按钮上显示相应的文字或者英文
在action属性中写上要去的那个?
“/fxgeng.do”
39)找到
action-mapping>
标签:
再写一个action:
Path属性与
相对应所以写“/fxgeng”
调用fxgengById()方法所以写parameter属性
写一个form(不用创建相应的Form)name为gengxinForm
再写<
forward>
标签跳转成功或者失败的页面
40)还在
中再找到
标签里面添加一个gengxinForm:
name属性与刚才创建的form的名字要完全一样,
type属性就是粘贴pojo包中的UserLogin的全名。
41)麻烦您执行一边,看看能不能点击更新按钮后回到查询成功那个页面,而且数据也会有相应的变动。
42)如果有错误慢慢修改,欢迎大家提出相应的意见和建议,我会虚心接受,谢谢观赏!
版权所有违者斩立决