想弄一个hibernate的通用dao,网上查了下资料.有的太复杂了,看不懂.有的简单的就觉得不太合理.
麻烦高手帮我列一下通用的dao的继承关系,每个dao该有什么方法(列举1,2),然后哪个dao是提供给service继承的.
谢谢了!!!
麻烦高手帮我列一下通用的dao的继承关系,每个dao该有什么方法(列举1,2),然后哪个dao是提供给service继承的.
谢谢了!!!
解决方案 »
- tomcat 集群, tomcat启动问题
- FreeMarker的模板里怎么遍历list
- JDIC BROWSER
- java.lang.NoClassDefFoundError: Could not initialize class com.aw.dao.HibernateU
- 如何在JSP页面中检测超连接的点击次数?
- struts:登录判断是在Action中完成的,但是登录成功了如何设置session呢
- 关于struts,大家一起来交流!分虽然少?但顶者有分
- struts1.1连接oracle配置数据源的问题
- 学完J2SE后学j2ee应该先学什么?
- spring boot shiro 每次登陆都会报这个错,但不影响功能是什么原因?
- 关于Hibernate映射
- 将Hql语句改为DC表达
T get(Integer id);
void update(T t);
void save(T t);
void delete(T t);
List<T> findAll();
idea 9我主要就是想要了解那些接口什么的之间的继承关系.service层调用时继承的是哪个
public interface AjCfDao { /**
* 按照分页查询库房信息
* @param pageNo
* @return
*/
public List searchAllCfInDao(int pageNo);
/**
* 根据案卷id查询其库房信息
* @param ajid
* @return
*/
public Object getCfByAjIdInDao(int ajid);
/**
* 添加新的库房信息
* @param ajcf
*/
public void addCfInDao(OaAjcf ajcf);
/**
* 修改库房信息
* @param ajcf
*/
public void updateCfInDao(OaAjcf ajcf);
/**
* 根据库房id查询库房详细信息
* @param cfid
* @return
*/
public Object getCfByCfIdInDao(int cfid);
/**
* 根据查询条件获取库房的列表信息
* @param ajcf
* @return
*/
public List searchCfByConditionsInDao(OaAjcf ajcf,int pageNo);
/**
* 获得查询之后的总数据量
* @param ajcf
* @return
*/
public int getCfCouontByConditionsInDao(OaAjcf ajcf);
}
package com.it.oa.dao.parent;import java.io.Serializable;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.it.oa.dao.BaseSpringHibDao;public class BaseSpringHibDaoImpl extends HibernateDaoSupport implements BaseSpringHibDao { /**
* 添加新的对象
*/
public boolean add(Object obj) {
try {
super.getHibernateTemplate().save(obj);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
} /**
* 根据id和类删除对象
*/
public boolean del(Class clz,Serializable id) {
Object itme = null;
try {
//获取到对象的实体
itme = this.get(clz, id);
super.getHibernateTemplate().delete(itme);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根据对象删除
* @param obj
* @return
*/
public boolean del(Object obj){
try {
super.getHibernateTemplate().delete(obj);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 在spring中使用delete语句进行删除并返回它的影响行数
* @param hql
* @return
*/
public int deleteByHql(final String hql){
Object number = super.getHibernateTemplate().execute(
new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery(hql);
int num = query.executeUpdate();
return num;
}
}
);
return Integer.parseInt(number.toString());
}
/**
* 根据ID查询具体的详细信息
*/
public Object get(Class clz,Serializable id) {
Object item = null;
try {
item = super.getHibernateTemplate().get(clz, id);
} catch (Exception e) {
e.printStackTrace();
}
return item;
} /**
* 修改对象信息
*/
public boolean update(Object obj) {
try {
super.getHibernateTemplate().update(obj);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
} /**
* 查询所有用户详细信息
* 根据类的对象进行查询
* 分页查询
*/
public List search(final Class clz,final int pageNo ,final int pageSize) {
return super.getHibernateTemplate().executeFind(
new HibernateCallback(){ public Object doInHibernate(Session session)
throws HibernateException, SQLException {
//查询该类的所有信息
Criteria c = session.createCriteria(clz);
c.setFirstResult((pageNo-1)*pageSize);
c.setMaxResults(pageSize);
return c.list();
}
}
);
}
/**
* 根据类查询其所有信息
*/
public List search(final Class clz) {
return super.getHibernateTemplate().executeFind(
new HibernateCallback(){ public Object doInHibernate(Session session)
throws HibernateException, SQLException {
//查询该类的所有信息
Criteria c = session.createCriteria(clz);
return c.list();
}
}
);
}
/**
* 根据hql语句进行查询
* @param hql
* @return
*/
public List search(final String hql){
return super.getHibernateTemplate().executeFind(
new HibernateCallback(){ public Object doInHibernate(Session session)
throws HibernateException, SQLException {
//查询该类的所有信息
Query q = session.createQuery(hql);
return q.list();
}
}
);
} /**
* 根据传递的hql执行查询
* 分页查询,
*/ public List search(final String hql,final int pageNo ,final int pageSize) {
return super.getHibernateTemplate().executeFind(
new HibernateCallback(){ public Object doInHibernate(Session session)
throws HibernateException, SQLException {
//查询该类的所有信息
Query q = session.createQuery(hql);
q.setFirstResult((pageNo-1)*pageSize);
q.setMaxResults(pageSize);
return q.list();
}
}
);
}
/**
* 获得表的总数据
* @param tableName
* @return
*/
public int getRowCounts(String tableName){
final String hql = "select count(table) from "+tableName+" as table"; List list = super.getHibernateTemplate().find(hql);
int rows = Integer.parseInt(list.get(0).toString());
return rows;
}
/**
* 获得总页数
* @param tableName
* @param pageSize
* @return
*/
public int getPageCounts(String tableName,int pageSize){
int count = this.getRowCounts(tableName);
int pageCount = 0;
if(count%pageSize==0){
pageCount = count/pageSize;
}
else{
pageCount = count/pageSize +1;
}
return pageCount;
}
/**
* 获得模糊查询的总数据量
* @param hql
* @return
*/
public int getRowCountsByLike(String hql,Map map){
List list = this.search(map, hql);
return Integer.parseInt(list.get(0).toString());
}
/**
* 使用map集合和hql语句进行分页查询
* @param mapValue 集合 保存了类的属性名和对应该属性的值 当中的key等于hql中的属性
* @param hql 执行的hql语句
* @param pageNo 当前页数
* @param pageSize 每页显示条数
* @return 返回list集合
*/
public List search(final Map mapValue,final String hql,final int pageNo,final int pageSize){
return super.getHibernateTemplate().executeFind(
new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery(hql);
//取出map中的key key等于hql语句中的属性名
Set setkey = mapValue.keySet();
Iterator it = setkey.iterator();
while(it.hasNext()){
//从集合中取出值
String key = it.next().toString();
//取出对应属性的值
String value = mapValue.get(key).toString();
query.setString(key, value);
}
query.setFirstResult((pageNo-1)*pageSize);
query.setMaxResults(pageSize);
return query.list();
}
}
);
}
/**
* 使用map集合和hql语句进行查询
* @param mapValue 集合 保存了类的属性名和对应该属性的值 当中的key等于hql中的属性
* @param hql 执行的hql语句
* @return 返回list集合
*/
public List search(Map mapValue,String hql){
InHibernate hi = new InHibernate();
hi.setHql(hql);
hi.setMapValue(mapValue);
return super.getHibernateTemplate().executeFind(
new InHibernate()
// new HibernateCallback(){
//
// public Object doInHibernate(Session session) throws HibernateException, SQLException {
//
// Query query = session.createQuery(hql);
// //取出map中的key key等于hql语句中的属性名
// Set setkey = mapValue.keySet();
//
// Iterator it = setkey.iterator();
//
// while(it.hasNext()){
// //从集合中取出值 这个值要对应到类的属性
// String key = it.next().toString();
// //取出对应属性的值
// String value = mapValue.get(key).toString();
// query.setString(key, value);
//
// }
//
// return query.list();
// }
//
//
// }
);
}
}class InHibernate implements HibernateCallback{
String hql;
Map mapValue;
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
Query query = session.createQuery(hql);
//取出map中的key key等于hql语句中的属性名
Set setkey = mapValue.keySet();
Iterator it = setkey.iterator();
while(it.hasNext()){
//从集合中取出值 这个值要对应到类的属性
String key = it.next().toString();
//取出对应属性的值
String value = mapValue.get(key).toString();
query.setString(key, value);
}
return query.list();
}
public String getHql() {
return hql;
}
public void setHql(String hql) {
this.hql = hql;
}
public Map getMapValue() {
return mapValue;
}
public void setMapValue(Map mapValue) {
this.mapValue = mapValue;
}
}
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.wonders.oa.common.dbbase.interfaces.IDBBase;
/*
* 作者:小侯
* 功能:操作数据库的底层类
* 方法:
* 1) getList() → 用于得到list类型的结果
* 2) getObject() → 用于得到一个对象类型的结果 得到的结果需要强制类型转换
* 3) doUpdate() → 用于对数据库进行增、删、改getCount
* 4) doUpdate() → 得到结果有多少行
*/
public class DBBaseImpl extends HibernateDaoSupport implements IDBBase { /**
* 根据hql语句查询集合
*/ public List getList(String hql) {
try {
return super.getHibernateTemplate().find(hql);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
} /**
* 分页查询 参数pageNo第几页,pageSize页面大小,hql查询语句 返回List集合
*/ public List getList(int pageNo, int pageSize, String hql) {
Session session = super.getSession();
try {
Query query = session.createQuery(hql);
int index = pageSize * (pageNo - 1);
query.setFirstResult(index);
query.setMaxResults(pageSize);
return query.list();
} catch (Exception ex) {
ex.printStackTrace();
return null;
} finally { session.close(); }
} /**
*
*/
public List getList(String hql, List list) { Session session = super.getSession();
try {
Query query = session.createQuery(hql);
if (list != null || list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
query.setParameter(i, list.get(i));
}
}
return query.list();
} catch (Exception ex) {
ex.printStackTrace();
return null;
} finally { session.close(); }
} /**
* 根据hql查询 传入代替语句中?值的数组
*/
public List getList(String hql, Object[] obj) {
Session session = super.getSession();
try {
Query query = session.createQuery(hql);
if (obj != null || obj.length > 0) {
for (int i = 0; i < obj.length; i++) {
query.setParameter(i, obj[i]);
}
}
return query.list();
} catch (Exception ex) {
ex.printStackTrace();
return null;
} finally { session.close(); }
} /**
* 根据hql语句查询一条数据
*/
public Object getObject(String hql) {
try {
return this.getList(hql).get(0);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
} /**
* 分页查询 参数pageNo第几页,pageSize页面大小,hql查询语句,list查询条件的参数集合 返回List集合
*/ public List getList(int pageNo, int pageSize, String hql, List list) {
Session session = super.getSession();
try {
Query query = session.createQuery(hql);
if (list != null || list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
query.setParameter(i, list.get(i));
}
}
int index = pageSize * (pageNo - 1);
query.setFirstResult(index);
query.setMaxResults(pageSize);
return query.list();
} catch (Exception ex) {
ex.printStackTrace();
return null;
} finally { session.close(); }
} /**
* 根据hql语句统计结果集中共有几条 返回int类型的条数
*/ public int getCount(String hql) {
int count = 0;
Session session = super.getSession();
try {
Query query = session.createQuery(hql);
count = Integer.parseInt(query.uniqueResult().toString());
} catch (Exception ex) {
ex.printStackTrace();
} finally { session.close(); }
return count; }
public int getCount(String hql,List list) {
int count = 0;
Session session = super.getSession();
try {
Query query = session.createQuery(hql);
if (list != null || list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
query.setParameter(i, list.get(i));
}
}
count = Integer.parseInt(query.uniqueResult().toString());
} catch (Exception ex) {
ex.printStackTrace();
} finally { session.close(); }
return count; } /**
* 根据传如的hql语句进行删、改 传入hql语句和Object类型的数组数组用来存放hql中问号的值 返回boolean类型的值
*/
public boolean doUpdate(String hql, Object[] obj) {
boolean flag = false; Session session = super.getSession();
Transaction trans = session.beginTransaction();
try {
Query query = session.createQuery(hql);
if (obj != null || obj.length > 0) {
for (int i = 0; i < obj.length; i++) {
query.setParameter(i, obj[i]);
}
}
int i = query.executeUpdate();
if (i > 0) {
trans.commit();
flag = true;
}
} catch (Exception ex) {
ex.printStackTrace();
trans.rollback();
} finally { session.close(); }
return flag;
} /**
* 根据entity添加 返回boolean
*/
public boolean doAdd(Object entity) {
boolean flag = false;
try {
super.getHibernateTemplate().saveOrUpdate(entity);
flag = true;
} catch (Exception ex) {
ex.printStackTrace();
}
return flag;
} /**
* 根据entity修改 返回boolean
*/
public boolean doUpdate(Object entity) {
boolean flag = false; Session session = super.getSession();
Transaction trans = session.beginTransaction();
try {
super.getHibernateTemplate().update(entity);
flag = true;
} catch (Exception ex) {
ex.printStackTrace();
trans.rollback(); } finally { session.close(); }
return flag;
} /**
* 调用分页存储过程
*/
public List getPageList(int pageSize, int page, String sql,
String KeyFieid, String procName) {
Session session = super.getSession(); // 获取数据库存储过程
Query query = session.getNamedQuery(procName); // 给存储过程传参
query.setInteger(0, pageSize);
query.setInteger(1, page);
query.setString(2, sql);
query.setString(3, KeyFieid); List list = query.list();
session.close();
return list;
} /**
* 调用存储过程返回自动增长Id列
*/
public String getIdentityStr(String tables, String columns, String bianhao) {
Session session = super.getSession();
String KeyId = "";
Connection con = session.connection();
try {
// 得到Connection 对象 // 获得存储过程
CallableStatement call = con
.prepareCall("{call Get_Identity_Str(?,?,?,?)}"); // 设置存储过程的参数
call.setString(1, tables);
call.setString(2, columns);
call.setString(3, bianhao); // 注册存储过程的输出参数
call.setString(4, "id"); // 设置存储过程的输出参数
call.registerOutParameter(4, java.sql.Types.VARCHAR);
call.executeUpdate(); KeyId = call.getString(4); } catch (SQLException e) { e.printStackTrace();
} finally { session.close(); }
return KeyId;
} public static void main(String[] args) {
ApplicationContext cont = new ClassPathXmlApplicationContext(
"applicationContext.xml");
IDBBase db = (DBBaseImpl) cont.getBean("dbbase");
List list = db
.getList("select bm.bmmc,ry.rymc from OaRy ry,OaBm bm where bm.bmid=ry.bmid");
Iterator it = list.iterator();
while (it.hasNext()) {
Object[] oa = (Object[]) it.next(); for (int i = 0; i < oa.length; i++) {
System.out.println(oa[i].toString()); } } }}
public abstract class HibernateBaseDao extends HibernateDaoSupport {
@SuppressWarnings("unchecked")
public abstract Class getEntityClass();
public abstract String getEntityType();
//添加
public void save(Serializable entity){
this.getHibernateTemplate().save(entity);
}
//修改某条信息
public void update(Serializable entity) {
this.getHibernateTemplate().update(entity);
}
//获取所有的信息
@SuppressWarnings("unchecked")
public List getAll(int count,int start) {
String hql="from "+getEntityType()+" m ";
Query q = this.getHibernateTemplate().getSessionFactory().openSession().createQuery(hql);
q.setMaxResults(count);
q.setFirstResult(start);
return q.list();
}
.....
}
|
Service
|
DAO
|
POJO[/align]
第一种DAO中调用方法,不关是那个dao,都需要继承底层的DAO。
/**
* 根据发文id查询相应实例的详细信息
* @param fwid
* @return
*/
public Object getFwSlByFwIdInDao(Serializable fwid) {
//查询实例类型为1的某收文实例
String hql = "from OaFlowSl where stid=:stid and sllx=2";
Map map = new HashMap();
map.put("stid", fwid);
return super.search(map, hql).get(0);
}
/**
* 根据条件模糊查询
* @param lmid
* @param ggbt
* @param bmid
* @param ggrq
* @param ggrq1
* @return
*/
public List searchWhereByBlus(int lmid, String ggbt, int bmid, String ggrq,
String ggrq1) {
String hql = "from OaGg where lmid=:lmid and ggbt like :ggbt and bmid=:bmid or ggrq>=:ggrq and ggrq<=:ggrq1";
Map map = new HashMap();
map.put("lmid", lmid);
map.put("ggbt", "" + ggbt + "%");
map.put("bmid", bmid);
map.put("ggrq", ggrq);
map.put("ggrq1", ggrq1);
return super.search(map, hql);
}第二种dao 调用方法public List getList(int pageNo, int pageSize, String ryid,
String starttime, String endtime, String rzjg) {
String hql = "select rz,ry.rymc,bm.bmmc from OaXtrz rz,OaRy ry,OaBm bm where rz.ryid=ry.ryid and ry.bmid=bm.bmid";
List list = new ArrayList();
if (ryid != null) {
if (!"all".equals(ryid)) {
hql = hql + " and rz.ryid=?";
list.add(ryid);
}
}
if (rzjg != null) {
if (!"all".equals(rzjg)) {
hql = hql + " and rz.rzjg=?";
list.add(rzjg);
}
}
if (starttime != null && !"".equals(starttime)) {
if (endtime != null && !"".equals(endtime)) {
hql = hql + " and rz.rzsj between '" + starttime + "' and '"
+ endtime + "'";
} else {
hql = hql + " and rz.rzsj between '" + starttime + "' and '"
+ new java.sql.Timestamp(System.currentTimeMillis())
+ "'";
}
}
if (endtime != null && !"".equals(endtime)) {
if (starttime != null && !"".equals(starttime)) {
hql = hql + " and rz.rzsj between '" + starttime + "' and '"
+ endtime + "'";
} else {
hql = hql + " and rz.rzsj<'" + endtime + "'";
}
}
return dbbase.getList(pageNo, pageSize, hql + " order by rz.rzsj desc",
list);
}