hibernate学习笔记(六)

建立一个简单的部门内部留言板(在web上的实战),使用到的东西有hibernate和Struts

1.首先,我们从数据库入手,建立两张表,一张是用户表(users)用来储存用户的信息,另一张是信息表(message)用来储存留言或是上传文件等等

users表属性包括:id  name passwd

message表属性包括:id  sender  getter  content  sendTime  attachment

2.创建我们的web项目

3.引入Struts开发包(在项目名上右键,选择MyEclipse,再选择add Struts Capabilities)

4.使用DB Browser连接到MySQL数据库

5.引入hibernate(最后一步的时候我们还是不用他的工具类了,可以使用我们自己的工具类)

6.创建需要的包

com.sina.domain; com.sina.service; com.sina.util

7.通过hibernate的逆向工程创建domain对象的映射文件(如果两个表有主外键的关系,应该先映射主表后映射外表)

8.打开Struts-cfg.xml开始写前端的东西(可以添加jsp的界面,直接拖到网格上就可以了,选择相应的路径,一般放在WEB-INF上)然后建一个表单,右键new 一个form,加一个名字;然后是添加一个action,因为要处理这个登陆的事情,还是右键,new一个action,SuperClass那里选择dispatch那个,然后下边form里对表做关联,parameter参数这里加一个flag,其他的不用动

添加两个JSP界面,一个是login登陆界面一个是main登陆成功的界面,之后拉起线来,说明这几个的跳转关系


还需要建立一个message表单,superClass选择ActionForm;再加一个action起名叫message,专门管理message的事情的(增删改查等等)

双击任何一个方块都能够打开这个jsp界面进行修改,首先是我们的login页面,我们添加相应的登录表单进去,可以先写一个比较简单的表单:

<body>
    <h1>用户登录</h1>
    <form action="/mymessageboard/login.do?flag=login" method="post" >
    	u:<input type="text" name="name"/></br>
    	p:<input type="password" name="passwd"/></br>
    	<input type="submit" value="login">
    </form>
  </body>

然后双击loginAction这块,把里边的execute修改为login:

public ActionForward login(ActionMapping mapping, ActionForm form,

接着双击main这块:

<body>
    <a href="/mymessageboard/message.do?flag=gotoPublish">发布信息</a>  <a href="#">退出信息</a><br/>
   	 留言信息:<br/>
   	 <table border="1">
   	 	<tr><td>发送人</td><td>发送时间</td><td>接收人</td><td>内容</td><td>附件</td></tr>
   	 	<tr><td>发送人</td><td>发送时间</td><td>接收人</td><td>内容</td><td>附件</td></tr>
   	 	<tr><td>发送人</td><td>发送时间</td><td>接收人</td><td>内容</td><td>附件</td></tr>
   	 </table>
  </body>
这里的gotoPublish是与MessageAction相连接的

因为在MessageAction中有这么一句:

public ActionForward gotoPublish(ActionMapping mapping, ActionForm form,

顺其自然的写到了MessageAction:

public ActionForward gotoPublish(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		MessageForm messageForm = (MessageForm) form;// TODO Auto-generated method stub
		return mapping.findForward("goPublishUI");
	}

这里有通过goPublishUI这条路径走到了publish.jsp这个页面(整个走下来的过程都是开始时Struts.cfg.xml做好的,前边有截图)剩下的就是简单的写一写publish这个页面,这样整根线就调通了。




9.开始写service层,在service包中新建一个UsersService类和一个MessageService类

首先是UsersService类:

public Users checkUser(Users users){
String hql = "from Users where name='"
			+users.getName()+"' and passwd='"+users.getPasswd()+"'";

		List<Users> list = HibernateUtil.executeQuery(hql);
		if (list.size()==1) {
			return list.get(0);
		} else {
			return null;
		}
	} 

这里边executeQuery()这个函数是我自己封装在HibernateUtil里边的一个查询时常用的函数:

public static List executeQuery(String hql) {
		Session session = null;
		Transaction ts = null;
		List list = null;
		try {
			
			session = HibernateUtil.getCurrentSession();
			ts = session.beginTransaction();
			
			//做查询
			list = session.createQuery(hql).list();
			ts.commit();
			
		} catch (Exception e) {
			if (ts!=null) {
				ts.rollback();
			}
			throw new RuntimeException(e.getMessage());
		}finally{
			if(session!=null&&session.isOpen()){
				session.close();
			}
		}
		return list;
	} 

这个函数以后可以进行反复的使用,因此就放入了我自己的hibernate工具包。


现在我们回到LoginAction,使用userservice来进行用户验证的工作:

public ActionForward login(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		UserForm userForm = (UserForm) form;// TODO Auto-generated method stub
		//调用service类完成验证工作
		Users users = new Users();
		users.setName(userForm.getName());
		users.setPasswd(userForm.getPasswd());
		
		//创建service
		UsersService usersService = new UsersService();
		users = usersService.checkUser(users);
		
		if(users != null){
			request.getSession().setAttribute("usersinfo", users);
			return mapping.findForward("loginok");
		}else{
			return mapping.findForward("loginerror");
		}
		
	}

这样如果查出来了这个user(也就是说查到的user不是null,证明这个用户是注册过的,是合法的,跳转到loginok的页面),否则跳转到loginerror的页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值