struts&hibernate应用(对数据库增删改查)实例

 【数据库方面】:
(最好先自己创建一个用户,创建一个表空间)

1.配置数据源
在 Myeclipse Database explorer perspective中的 DB browser 中 右键new 一个数据源
选者 oracle thin 配置jdbc:oracle:thin:@localhost:1521/APP1 添加用户名和密码 然后导入class12.jar包

2.创建表
create table hb1(id number primary key,uname varchar2(20)not null,upass varchar2(10));

3.因为oracle不支持自动编号,所以要先创建一个序列
create sequence my_seq1 nocycle maxvalue 1000 start with 01;

4.使用下列语句增加数据(不需要)
insert into hb1(id,uname,upass)values(my_seq.nextval,'gm','gm');
到此数据库部分结束

(以下以hb1表,my_seq1序列为例)
【myeclipse方面】:

1.创建web-project

2.添加struts组件 选择struts 1.2

3.在struts控制文件struts-config.xml中,创建 Jsp Form and Action,比如创建一个add(开户)功能,给addForm添加forward导向显示页面
,其他如del update 等功能和add功能类似

4.添加hibernate支持,选择hibernate3.1  最好两个library都勾上,然后 点copy checked library jars to project...(注意这里一定要选择此项,来把对应的jar支持添加到项目中)。最后一步,不需要选者创建 create sessionFactory,自己手工创建
5.在 hibernate.cfg.xml控制文件中,在Specify additional Hibernate properties选项中添加show_sql 值为true,为了页面操作完后在控制台打印出sql语句的信息

6.打开数据源,连接数据库

7.把对应的表添加hibernate持久层选者hibernate Reserve Engerning...,添加的时候,要在src下先创建一个com.pojo包,把表对应添加到这个包中,不要直接添加到src下。选者要添加的Hibernate mapping file  以及 java data object(不需要创建abstract class抽象内)
另外,添加的时候选择 sequence 选项。

8.添加完表映射文件后,在pojo包下的Hb1.hbm.xml配置文件中,配置如下: 
 <hibernate-mapping>
     <class name="com.pojo.Hb1" table="HB1" schema="SCOTT">
         <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="sequence" >
            <param   name="sequence">MY_SEQ1</param> (这里很关键)
            </generator>

9.创建一个com.DAO包,在包下创建一个 Hb1dao.java文件
这个文件中包含了所有的业务方法。具体代码如下

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.pojo.Hb;
import com.pojo.Hb1;

public class HBDAO {
 public static Session session;//创建数据库的连接对象
 //private connection conn;
 public HBDAO(){
  Configuration cfg = new Configuration().configure();//创建配置对象
  SessionFactory sf = cfg.buildSessionFactory();//创建连接工厂
  //使用hibernate.cfg.xml配置连接数据库
  session = sf.openSession();//打开数据库的会话 --相当于使用connection conn
  //conn = session.connection();
 }
 public void closeSession(){
  if(session!=null){
   session.close();
   session = null;
  }
 }
 //增加
 public void AddUser(Hb1 user){
  Transaction tx = session.beginTransaction();
  session.saveOrUpdate(user);
  tx.commit();
 }
 //查询全部内容操作
 public List<Hb1> getAll(){
  Query query = session.createQuery("from Hb1");
  //分页操作
  query.setFirstResult(0);//0代表第一页
  query.setMaxResults(2);//每页显示个数
  List<Hb1> list =  query.list();
  return list;
 }
 //修改
 public void UpdateUser(Integer id,Hb1 user){   //传入的user是update.jsp页面中生成的新的用户信息,id是必须要正确的
  Transaction tx = session.beginTransaction();  //开始一个事务,为了能够往数据库中添加数据,如果没有事务的话
  //Query query = session.createQuery("update Hb1 user"+  // 可能会导致不能添加
  //    "set user.uname=:newuname,user.upass = : newpass" +"where user.id = ?");
  //query.setInteger(0, id);
  //query.setString("newuname", newuname);
  //query.setString("newpass", newpass);
  //query.executeUpdate();
  //Hb1 user = (Hb1)query.uniqueResult();
  Query query = session.createQuery("from Hb1 p where p.id = ?"); //
  query.setInteger(0, id);         //
  Hb1 olduser = (Hb1)query.uniqueResult();//以上三句,实现了通过id查找数据库中原始数据的功能
  olduser.setUname(user.getUname());
  olduser.setUpass(user.getUpass());
  session.save(olduser);
  session.flush();      //当有大量数据需要修改时,使用此语句
  tx.commit();       //提交事务
 }
 //删除
 public static void DelUser(Integer id){
  /*Transaction tx = session.beginTransaction();
  Hb1 user = (Hb1)session.get(Hb1.class, id);
  session.delete(user);
  tx.commit();
  */
  Transaction tx = session.beginTransaction();
  Query query = session.createQuery("from Hb1 p where p.id = ?");
  query.setInteger(0, id);
  Hb1 user = (Hb1)query.uniqueResult();
  session.delete(user);
  //query.executeUpdate();
  tx.commit();
 }
 //查询特定内容
 public Hb1 getOnebyId (Integer id){
  Query query = session.createQuery("from Hb1 p where p.id = ?");
  query.setInteger(0, id);
  Hb1 user = (Hb1)query.uniqueResult();
  return user;
 }
 //模糊查询
 public List<Hb1> getOnebyName(String name){
  Query query = session.createQuery("from Hb1 p where p.uname like ?");
  query.setString(0, "%"+name+"%");
  List<Hb1> list = query.list();
  return list;
 }
}
10.在对应的界面中添加以上对应的方法。比如
在addaction中调用adduser方法
  String name = addForm.getUname();
  String pass = addForm.getUpass();
  
  Hb1 user = new Hb1(name,pass);
  HBDAO dao = new HBDAO();
  
  if( name != null& pass!=null){
   dao.AddUser(user);
   
   List<Hb1>list = dao.getAll();  //注意这里,当添加完数据后,要调用查询数据库的方法,读一次数据库,
   dao.closeSession();  //并把读出来的数据存放在 List 列表中
   request.getSession().setAttribute("rs", list); //设置"rs",为了在show页面中,调用logic:iterate标签时
   request.removeAttribute("AddForm");  //使用,然后调用removeAttribute清空在页面填写完后的内
   return mapping.findForward("show");  //容
  }
11.在显示页面中,首先要添加 struts标签库
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

在显示页面中有个迭代器
<body>
 <center>
 <table border="1">
 <tr><td>id</td><td>name</td><td>password</td></tr>
 <logic:iterate id="user" name = "rs" scope = "session">
 <tr>
 <td>
  ${user.id}
 </td>
 <td>
  ${user.uname}
 </td>
 <td>
  ${user.upass}
 </td>
 </tr>
 </logic:iterate>
 </table>
 </center>
  </body>
显示的效果如下
id         name         password
${user.id}  ${user.uname}  ${user.upass}

12.配置过滤器和国际化

(过滤器):为了能往oracle数据库中添加中文数据

1.首先创建一个fiter包,包下创建一个Myfiter.java文件。创建包时注意添加一下继承接口RequestProcessor

package com.fiter;

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.RequestProcessor;

public class Myfiter2 extends RequestProcessor {

 @Override
 protected boolean processPreprocess(HttpServletRequest request,
   HttpServletResponse response)  {
  try {
   request.setCharacterEncoding("gb2312");
  } catch (UnsupportedEncodingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  return true;
 }

}
2.创建完后在 struts-config.xml中配置一个controller:
<controller processorClass = "com.fiter.Myfiter2">
</controller>
另外注意的是,把每个jsp文件(比如add.jsp del.jsp)中的页顶<%@ page language="java" pageEncoding="gbk"%>。这样才能在页面中显示中文。

(国际化):为了不同国家的人,都能方便使用此页面

1.首先在 IE 浏览器Internet选项--语言--添加语言首选项(中文或者其他语言)
struts 在每个form中,都提供了 validate方法和reset方法,前者为了错误判断,后者为了初始化设置页面选项框中,默认显示“请输入您的姓名”等等

比如在addForm中的validate方法中,代码如下
  if(uname.length()==0 ){
   ActionErrors error1 = new ActionErrors();
   error1.add("uname", new ActionMessage("nullname"));//uanme为对应的add.jsp中的 errpr对应的uname
   return error1;  //uname : <html:text property="uname"/><html:errors property="uname"/><br/>
  }
  if(upass.length()<=2){
   ActionErrors error2 = new ActionErrors();
   error2.add("upass",new ActionMessage("shortpass"));
   return error2;
  }
  return null;

2.其中 nullname 对应了com.yourcompany.struts包下的

ApplicationResouces_cn.properties中的内容
nullname = /u60a8/u8f93/u5165/u7684/u7528/u6237/u540d/u4e3a/u7a7a(您输入的用户名为空)
shortpass = /u60a8/u8f93/u5165/u7684/u5bc6/u7801/u957f/u5ea6/u5c0f/u4e8e3
nullid = /u60a8/u8f93/u5165/u7684/u5e10/u53f7/u4e3a/u7a7a

在java安装包下的bin文件夹下有一个 native2acci ,将中文转换为如上语言

ApplicationResouces_en.properties中的内容
nullname = your input name is null
shortpass = your input password is less than 3
nullid = your input id is null

3.最后一步:struts-config.xml中配置一个controller:
</controller>
  <message-resources parameter="com.yourcompany.struts.ApplicationResources_cn" />
</struts-config>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章