ssh中泛型的使用

本文介绍了一种基于Hibernate的通用DAO设计与实现方法,通过泛型接口和实现类简化了CRUD操作,适用于多种实体对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先新建一个GenericDao接口如下:
import java.io.Serializable;

public interface GenericDao<T,PK extends Serializable> {
 
 //保存实体
 public boolean save(T entity);
 
    // 更新实体
    public boolean update(T entity);
   
    //删除实体
    public boolean delete(T entity);
   
    //根据id获得实体
    public boolean delete(final PK id); 
   
    //根据id获得实体
    public T get(final PK id); 
   

}
接下来新建一个类GenericDaoImp来实现这个接口如下:

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class GenericDaoImp<T,PK extends Serializable> implements GenericDao<T,PK> {

 private HibernateTemplate hibernateTemplate;

  // 实体类类型(由构造方法自动赋值)
    private Class<T> entityClass;

    // 构造方法,根据实例类自动获取实体类类型
    public GenericDaoImp() {
        this.entityClass = null;
        Class c = getClass();
        Type t = c.getGenericSuperclass();
       
        if (t instanceof ParameterizedType) {
            Type[] p = ((ParameterizedType) t).getActualTypeArguments();
            this.entityClass = (Class<T>) p[0];
            System.out.println(p[0]);
        }
        else{
        System.out.println("类型不匹配...");
       
        }
    }
   
 public HibernateTemplate getHibernateTemplate() {
  return hibernateTemplate;
 }
 public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
  this.hibernateTemplate = hibernateTemplate;
 }
  
 //保存实体
 public boolean save(T entity){
  boolean flag=false;
  try{
   getHibernateTemplate().save(entity);
   flag=true;
  }catch(Exception e){
   e.printStackTrace();
  }
  return flag;
 }
 
    // 更新实体
    public boolean update(T entity){
  boolean flag=false;
     try{
      getHibernateTemplate().update(entity);
      flag=true;
     }catch(Exception e){
      e.printStackTrace();
     }
     return flag;
    }
   
    //删除实体
    public boolean delete(T entity){
     boolean flag=false;
     try{
      getHibernateTemplate().delete(entity);
      flag=true;
     }catch(Exception e){
      e.printStackTrace();
     }
     return flag;
    }
   
    //根据id获得实体
    public T get(final PK id){
        T t1= (T) this.getHibernateTemplate().get(entityClass, id);  
        return t1;
    }
    //根据id删除实体
 public boolean delete(final PK id) {
  // TODO Auto-generated method stub
     boolean flag=false;
     try{
      this.delete(this.get(id));
      flag=true;
     }catch(Exception e){
      e.printStackTrace();
     }
     return flag;
 }


}
接下来写一个业务对象,如InfoNt.java:

 private Long ntid;
 private String nttime;
 private String nttitle;
 private String ntcontent;
 private String userid;
 private String power;
 private String superpower;
getXXX();setXXX()省略不写了

写配置文件InfoNt.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.senview.vo.info.InfoNt" table="INFO_NT" schema="FJSENVIEWCBW">
        <id name="ntid" type="java.lang.Long">
            <column name="NTID" precision="22" scale="0" />
            <generator class="sequence">
               <param name="sequence">SEQ_EMP_INFONT</param>
            </generator>
        </id>
        <property name="nttime" type="java.lang.String">
            <column name="NTTIME" length="50" />
        </property>
        <property name="nttitle" type="java.lang.String">
            <column name="NTTITLE" length="50" />
        </property>
        <property name="ntcontent" type="java.lang.String">
            <column name="NTCONTENT" length="1000" />
        </property>
        <property name="userid" type="java.lang.String">
            <column name="USERID" length="50" />
        </property>
        <property name="power" type="java.lang.String">
            <column name="POWER" length="200" />
        </property>
        <property name="superpower" type="java.lang.String">
            <column name="SUPERPOWER" length="200" />
        </property>
    </class>
</hibernate-mapping>
注意:我的是在oracle环境下的,具体配置文件依数据库的不同所要的更改还是要你自己改的

接下来在applicationContext.xml文件中设置<value></value>也就是引入:.hbm.xml文件到spring配置中

很快就行了,

新建一个接口如InfoNtDao也就是实体的业务层啦:

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import com.senview.dao.generic.GenericDao;
import com.senview.vo.info.InfoNt;
public interface InfoNtDao extends GenericDao<InfoNt,Long> {
 
}

这里我没有写任何的方法,因为我想用的是通用的genericDao中的方法

创建一个实现类InfoNtDaoImp来实现InfoNtDao这个接口:

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import com.senview.common.GetPageBySQL;
import com.senview.dao.generic.GenericDao;
import com.senview.dao.generic.GenericDaoImp;
import com.senview.dao.inteface.info.InfoNtDao;
import com.senview.vo.emp.EmpDaylog;
import com.senview.vo.info.InfoNt;
import com.senview.web.actionform.login.SessionForm;

public class InfoNtDaoImp extends GenericDaoImp<InfoNt,Long> implements InfoNtDao{

 private GenericDao<InfoNt,Long> genericDao;

    private GetPageBySQL pagetool_sql;
   
    private int PAGECOUNT=10;
 /**
  * @return the pagetool_sql
  */
 public GetPageBySQL getPagetool_sql() {
  return pagetool_sql;
 }

 /**
  * @param pagetool_sql the pagetool_sql to set
  */
 public void setPagetool_sql(GetPageBySQL pagetool_sql) {
  this.pagetool_sql = pagetool_sql;
 }

 /**
  * @return the genericDao
  */
 public GenericDao<InfoNt, Long> getGenericDao() {
  return genericDao;
 }

}

接下来的情况就是让配置文件来引用这些内容了:

在applicationContext-xxx中设置如下: 

 

<!-- 通用的Dao -->
     <bean id="genericDao" class="com.senview.dao.generic.GenericDaoImp">
        <property name="hibernateTemplate" ref="hibernateTemplate" />
     </bean>
     <!-- 系统信息_通知(公告)管理BEAN -->
     <bean id="infontDao" class="com.senview.dao.impl.info.InfoNtDaoImp">
        <property name="hibernateTemplate" ref="hibernateTemplate" />
        <property name="genericDao" ref="genericDao" />
     </bean>


这样子就可以使用了,接下来可以配置struts中action类了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值