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

原创 2008年09月28日 21:12:00

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

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>

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

 【数据库方面】:(最好先自己创建一个用户,创建一个表空间)1.配置数据源在 Myeclipse Database explorer perspective中的 DB browser 中 右键new ...
  • maisuiki
  • maisuiki
  • 2008年09月28日 21:12
  • 1146

hibernate简单程序,实现从页面对数据库的增删改查(主从表关联)

前段时期一直使用三层来写从页面对数据库的增删改查,今天用hibernate框架来实现从页面对数据库的增删改查, 首先介绍下今天我们要实现的功能, 1、用户能够注册,2、注册成功后直接跳到登录页面,...
  • qq_34178998
  • qq_34178998
  • 2017年09月07日 10:00
  • 275

c3p0数据库连接池实例

c3p0下载地址:http://download.csdn.net/detail/huhui_bj/6944595 这篇文章介绍的是,在普通Java Web工程中或者普通Java工程中使用c3p0数据...
  • huhui_bj
  • huhui_bj
  • 2014年02月21日 11:24
  • 2639

纯Java 实现控制台对数据库的增删改查(Eclipse)

.实验环境Eclipse Mysql数据库  新建数据库表 create database db_database01; use db_database01; create t...
  • tanrt
  • tanrt
  • 2016年09月07日 17:07
  • 1340

对数据库进行增删改查操作

本篇文章接上一篇 使用的连接是上一章的JDBC驱动链接的SQLServer驱动 package addressUtil; import java.sql.Connection; impo...
  • blueZhangFun
  • blueZhangFun
  • 2015年06月24日 08:09
  • 3137

【hibernate】03-Query 对数据库增删改查

Session 对象的 save() add() delete() 方法   里面都是一个参数对象 默认只能根据id 操作       get(User.name,id)里面两个参数  这都没有...
  • NCITS
  • NCITS
  • 2013年04月18日 00:32
  • 783

Hibernate 框架基本的数据库增删改查操作

代码: hibernate.cfg.xml(Hibernate与数据库连接操作的文档)
  • linhaiyun_ytdx
  • linhaiyun_ytdx
  • 2017年02月09日 14:27
  • 1344

运用Hibernate机制,对mysql数据库中的表进行增,删,改,查

Hibernate中对数据的更改是基于对象的,,必须先找到对象再进行数据操作,寻找对象的关键是使用session的get(Student.class, "5")方法,Student.class为传入对...
  • Hseapeak
  • Hseapeak
  • 2017年04月29日 00:48
  • 247

IntelliJ Idea SpringBoot 数据库增删改查实例

IntelliJ Idea SpringBoot 数据库增删改查实例#第一个SpringBoot程序 这里使用的开发软件是`IntelliJ Idea`,和`Eclipse`差不太多,界面更炫酷,功能...
  • Peng_Hong_fu
  • Peng_Hong_fu
  • 2016年12月16日 20:12
  • 20058

使用Jsp编写网页并实现数据库的增删改查

首先jsp 和Servlet语句基本一样,这里的实现需要用到上篇http://blog.csdn.net/qq_32539825/article/details/70494788里的部分内容 包括U...
  • qq_32539825
  • qq_32539825
  • 2017年04月24日 20:25
  • 9911
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struts&amp;hibernate应用(对数据库增删改查)实例
举报原因:
原因补充:

(最多只允许输入30个字)