基于泛型DAO的spring和hibernate的集成(2)(转)

转载http://blog.sina.com.cn/s/blog_438308750100e3fm.html
以上就实现了泛型的 Hibernate Dao 了,下面的例子就是业务对象对 GenericHibernateDao的使用

业务对象 Article 对应文章表的 aticle 表

package com.th.huz.model;

import java.io.Serializable;
import java.util.Date;

public class Article implements Serializable {

private static final long serialVersionUID = 1072812006693587010L;

private long id;
private String title;
private String author;
private Date pubDate;
private String content;

public long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getAuthor() {
return author;
}

public void setAuthor(String author) {
this.author = author;
}

public Date getPubDate() {
return pubDate;
}

public void setPubDate(Date pubDate) {
this.pubDate = pubDate;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}
}
定义 Article 业务对象的Dao 接口 IArticleDao ,它继承自 GenericDao 接口,以获得其中的方法

你可以在 IArticleDao 中添加 Article 业务对象特有的方法,也可以直接使用 GenericDao 中提供的所有方法IArticleDao接口指定业务对象的类型和主键的类型 <Article,Long>

package com.th.huz.model;

import com.th.huz.dao.GenericDao;
import com.th.huz.model.Article;
public interface IArticleDAO extends GenericDao <Article,Long> {
// public void findById(Long id);
}
然后就可以定义 ArticleHibernateDao 类了,它只要实现 IArticleDao 接口并继承 GenericHibernateDao 类 就可以使用所有的 Generic 接口和 IArticleDao 接口中的定义的方法。如果你在 IArticleDao 接口里指定了Article业务对象特有的方法,就在ArticleHibernateDao实现这些方法。而Generic 接口中的方法,在ArticleHibernateDao 的父类 GenericHibernateDao 中已经全部实现了,直接调用就可以方便的访问数据库。

package com.th.huz.model;

import com.th.huz.dao.GenericHibernateDao;

public class ArticleHibernateDao extends GenericHibernateDao<Article,Long> implements
IArticleDAO {

}
其他的业务对象也可以参照 Article 和 ArticleHibernateDao 类来定义 , GenericDao 接口中有的通用方法就直接调用,不足的以后补充,其他业务对象特有的方法就 在其他业务对象的 Dao接口(继承GenericDao接口) 中定义并通过 GenericHibernateDao 子类来实现。节省很多重复代码,简单几步就可以使用GenericDao接口的实现类 GenericHibernateDao 方便地访问数据库。

最后提供一个 Article 业务对象的 Hibernate 映射文件 和 建表SQL脚本 和 一个 ArticleHibernateDao 类的测试类

Article的映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Article.hbm.xml -->
<hibernate-mapping>
<class name="com.th.huz.model.Article" table="article">
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="native" />
</id>
<property name="title" type="java.lang.String">
<column name="title" length="100" />
</property>
<property name="author">
<column name="author" length="32" />
</property>
<property name="pubDate" type="java.util.Date">
<column name="pubDate" />
</property>
<property name="content" type="java.lang.String">
<column name="content" />
</property>
</class>
</hibernate-mapping>
Article对应的article表的建表脚本

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[article]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[article]
GO

CREATE TABLE [dbo].[article] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[title] [varchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[author] [varchar] (32) COLLATE Chinese_PRC_CI_AS NULL ,
[pubDate] [datetime] NULL ,
[content] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ArticleHibernateDao的测试类,只提供了seve(article) 方法的测试代码

package com.th.huz.test;

import junit.framework.TestCase;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.th.huz.model.Article;
import com.th.huz.model.ArticleHibernateDao;

public class ArticleHibernateDaoTest extends TestCase {

ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
ArticleHibernateDao adh = (ArticleHibernateDao) ctx
.getBean("articleHibernateDao");

public void testSave() {
Article art = (Article) ctx.getBean("article");
art.setId(1);
art.setTitle("标题1");
art.setAuthor("作者1");
adh.save(art);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值