首先新建一个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类了