赛迪网 > IT技术 Java > 架构-与-模式
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

Spring里面的一些添删改查示例(二)

发布时间:2006.05.10 01:28     来源:javajia    作者:

第四步,商业逻辑层(数据库开发工程师以及主程序员等)
 
  本来还可以分成很多层的,笔者怕把新手给晕得一个不剩了,所以把N层先暂时合并到一层,其实这也是我们在一般的实际项目中经常使用的方式。
  本例中采用的是hibernate来做数据库访问中间件,因此,请新同学按以下步骤进行:

1、设计一个实现IUser接口的类,用来做VO(PO)。

User.java的内容全部如下:
package com.easyjf.example.business.hibernate;
import com.easyjf.example.business.IUser;
public class User  implements IUser,java.io.Serializable {
 private static final long serialVersionUID=10083494895498l;
    // Fields   
 private String cid;
 private String userName;
 private String password;
 private String email;
 private String tel;
 private String birthday;
 private String intro;
    // Constructors
    /** default constructor */
    public User() {
    }    
    /** constructor with id */
    public User(String cid) {
        this.cid = cid;
    }
 public String getCid() {
  return cid;
 }
 public void setCid(String cid) {
  this.cid = cid;
 }
  …….//更多的垃圾getter及setter代码省略
 
}
 
2、写hibernate的配置文件
 
  然后结合User.java及数据库管理员建的表结构,写hibernate映射配置文件User.hbm.xml,全部内容如下:

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

    
        
            
             
            cid
            16
            
        
        
            
        
        
            
        
        
            
        
        
            
        
         
            
                
        
            
        
    

 
  注意其中有关主键生成的部份配置如下:

  笔者这里使用的是自己的主键值生成器。你也可以使用hibernate自带的默认主键生成器,怎么用就不说了。大家可以从本示例完整代码下载中获得HibIdGenerator.java类的源代码,下载地址:
http://www.easyjf.com/html/bbs/20060509/1571738935251539.htm?ejid=1139563413901115
 
3、 写IUserService的实现

  这里由于使用的是hibernate,而Spring中提供了hibernate DAO,可以让使用hibernate的朋友们更加简单使用hibernate访问数据库,该示例中把Service及DAO合并在一起。全部UserDao的代码如下:

package com.easyjf.example.business.hibernate;
import java.util.Collection;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.easyjf.example.business.IUser;
import com.easyjf.example.business.IUserService;
public class UserDao extends HibernateDaoSupport implements IUserService {
 public boolean del(IUser user) {
  boolean ret=true;
  try{
  this.getHibernateTemplate().delete(user);
  }
  catch(Exception e)
  {
   ret=false;
  }
  return ret;
 } 
 public List query(String scope,Collection paras) {
  return this.getHibernateTemplate().find("from User where "+scope,paras.toArray());  
 }
 public IUser login(String userName, String password, String ip) {
  IUser user=readByName(userName);
  if(user==null || user.getPassword()==null ||(!user.getPassword().equals(password)))//用户不存在或者密码不正确
  {
  return null;
  }  
  return user; 
 }
 public IUser newUser() {  
  return new User();
 }
 public IUser read(String cid) {  
  return (IUser)this.getHibernateTemplate().get(User.class,cid);
 }
 public IUser readByName(String userName) {  
  List list= this.getHibernateTemplate().find("from User where userName='"+userName+"'");
  if(list!=null)return (IUser)list.get(0);
  else 
   return null;
 }
 public boolean save(IUser user) {  
  boolean ret=true;
  try{
  this.getHibernateTemplate().save(user);
  }
  catch(Exception e)
  {
   ret=false;
  }
  return ret; 
 } 
 public boolean update(IUser user) {
  boolean ret=true;
  try{
  this.getHibernateTemplate().update(user);
  }
  catch(Exception e)
  {
   e.printStackTrace();
   ret=false;
  }
  return ret; 
 } 
}
 
  从代码中我们看到,UserDao类继承于Spring的HibernateDaoSupport类,目的在于方便通过hibernate操作数据库,同时实现了系统设计师所设计的IUserService接口中的相关功能。
  是对是错,可以自己单元测试一下。
 
  完了吗?还没有呢。下面是最后一步,也是本文所要介绍的重点,主角Spring正式登场,大家鼓掌。(咦,刚才在Struts即hibernate部分不是都提到Spring的吗?哦,那只是客串!)

 
第五步:配置Spring
 
  大家可以看到,上面我们所做的各部分都是各自为阵、分开的,特别是系统设计师的接口、Web工程师的MVC、数据库开发及主程序员的商业逻辑层的实现,都相互没有关联、整合到一起。甚至就连数据库工程师还不知道数据源从哪儿来,数据库的访问用户名密码等通通不知道。
  那么这些东西怎么相互集成起来,并组合成一个完整的应用拿给用户跑呢?这就是Spring扮演的角色之一了,Spring不是一直号称自己提供了这样那样的支持吗?下面我们来看看是怎么支持的。下面看看Spring的配置文件内容,本例中是applicationContext.xml,全部内容如下:



 

 
  org.gjt.mm.mysql.Driver
 
 
  jdbc:mysql://127.0.0.1:3306/easyjf2
 
 
  root
 
 
  mysql
 


 
  
 
 
  
   com/easyjf/example/business/hibernate/User.hbm.xml
  

 
 
  
   org.hibernate.dialect.MySQLDialect
   true
  

 


 
  
 


 
  
 


 
  其中dataSource部分是配置的数据源,如用户名及密码等,mySessionFactory部分主要针对hibernate的配置文件,userService部分针对hibernateDao的配置,事务的部分没用到。
当然,要让Spring跟Java Web应用集成,还需要配置一下web.xml文件,前面的web.xml已经有了,这里再拿出来大家观摩一下:

 
  contextConfigLocation
  /WEB-INF/applicationContext.xml
 
 
   org.springframework.web.context.ContextLoaderListener
 
 
 
  看到了吧,通过配置,就可以把刚才我们的几个部分集成到了一起。换一句话着,就是一旦有一天(真有这么一天吗?小样的,别插嘴!)我们需要改系统的某一部份(比如数据库中间件不能用hibernate,而要用iBatis、EasyDBO或者是自己的“轮子”时),也只需要直接在配置文件中修改即可, 而系统的其它部分仍然保留不变。而且各部分的测试也相对独立,因此可以测试到更多的东西(咦,这么说测试工作量不就大了吗?是啊,但出错的机会就少,维护成本就低了,笨)。这即是传说中配置编程,也是面向接口编程乃至面向对象编程的精华之所在。
 
  本示例中,我们主要涉及到的只是Spring最简单的一个IOC容器功能。因此,其值不值得我们HC(喝彩、花痴?凉粉语),我想每人心中都会有一杆秤。对于Spring与struts、hibernate,毕竟是庸俗的黄金组合嘛,他们之间还有更多的合作招式可供大家选择,这里就不一一介绍了,以后会介绍一些有关hibernate组合的!
 
  OK,全文结束。还没睡着或晕的同学请到EasyJF开源团队官网下载本例源码。笔者认识的程序员不少,不过还没看见有谁仅仅靠“观摩”、“理解”就能写出程序的,还要多动手实践,程序跑起来才是硬道理。

代码下载地址:
http://www.easyjf.com/html/bbs/20060509/1571738935251539.htm?ejid=1139563413901115

本示例程序的运行效果图:
http://www.easyjf.com/html/bbs/20060509/1571738935251539.htm?ejid=1139563413901115
 
 (备注:由于笔者不想拐弯抹角浪费大家玩的时间,有些“表白”难免过于直接,还请不喜欢Spring或者过分喜欢Spring的同行多多见谅! 本文中的“我们”,仅指与笔者有着同样成长经历的80后人,对于文章提到的观点,多数皆属于笔者个人观点,不代表任何人,80前的前辈们要BS就BS我个人得了。
  本文作者:EasyJF开源团队 大峡 版权归EasyJF开源团队所有,欢迎转载,转载请保留作者版权声明,谢谢!)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· Spring里面的一些添删改查示例(一) (05-09) · Eclipse 3.2 RC3 released (05-08)
· Ajax令网络更顺滑 微软出招何时 (05-08) · 技术视点:Web Services带来了什么 (05-08)
· Ruby On Rails与Jdon Framework架构比较 (05-08) · 煮酒论英雄-漫谈Java数据库存取技术 (05-08)
· 40种Javascript中常用的使用小技巧 (05-08) · 源码提供:java swing 组件大全 (05-08)
· 网友原创:Php与java结合解析xml (05-08) · 为什么程序员不应该调用“sun”包? (05-08)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 信息化市场百家争鸣 SaaS深陷争议“泥潭”
· 提高管理水平 "两栖"CIO应具备的六大能力
· 国产ITIL运维先行者 四大厂商角力BI市场
· 金融行业GSN专题解决方案 企业网解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统