Hibernat的通用BaseDao

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

1 hibernate的通用BaseDao

1.1 该通用Dao的功能简介

  • 在很多的时候,有些如果只是简单的增删改查的能力,很多的Dao会非常的相似,这就不太好了,所以我们可以将一些通用的能力给抽取出来
  • 增加保存功能
  • 修改功能
  • 删除功能
  • 查全部功能
  • 分页查询功能
  • 查个数功能

1.2 通用Dao接口

/**
 * 通用的Dao接口
 */
public interface BaseDao<T>
{
    /**
     * 增加对象
     * @Description: save
     */
    void save(T t);
    
    /**
     * 删除对象
     * @Description: delete
     */
    void delete(T t);

    /**
     * 修改对象
     * @Description: update
     */
    void update(T t);
    
    /**
     * 通过id查找对象
     * @Description: findById
     */
    T findById(Serializable id);

    /**
     * 统计个数
     * @Description: findCount
     */
    Integer findCount(DetachedCriteria detachedCriteria);
    
    /**
     * 查询所有对象
     * @Description: findAll
     */
    List<T> findAll();
    
    /**
     * 按条件分页查询
     * @Description: findByPage
     */
    List<T> findByPage(DetachedCriteria detachedCriteria,Integer begin,Integer pageSize);
}

1.3 通用Dao实现

  • 因为通过ID查询对象的时候,需要使用class对象,然而我们只是传入了一个泛型T,没有具体的class对象,所以我们需要使用反射技术来获取泛型类的class对象
/**
 * 通用Dao实现类
public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T>
{

    private Class clazz;
    
    public BaseDaoImpl() {
        // 获取子类的class对象
        Class clazz=this.getClass();
        // 获取子类继承Type
        Type type = clazz.getGenericSuperclass();
        // 该子类继承Type实际上是一个参数化类型,可强转
        ParameterizedType pType=(ParameterizedType) type;
        // 获取子类继承对象的泛型类型
        Type[] types=pType.getActualTypeArguments();
        // 因为我们只传入了一个类型
        this.clazz=(Class) types[0];
    }
    
    public void save(T t)
    {
        this.getHibernateTemplate().save(t);
    }

    public void delete(T t)
    {
        this.getHibernateTemplate().delete(t);
    }

    public void update(T t)
    {
        this.getHibernateTemplate().update(t);
    }

    public T findById(Serializable id)
    {
        return (T) this.getHibernateTemplate().get(clazz, id);
    }

    public Integer findCount(DetachedCriteria detachedCriteria)
    {
        detachedCriteria.setProjection(Projections.rowCount());
        List<Long> list = (List<Long>) this.getHibernateTemplate().findByCriteria(detachedCriteria);
        if(list.size()>0) {
            return list.get(0).intValue();
        }
        return null;
    }

    public List<T> findByPage(DetachedCriteria detachedCriteria, Integer begin, Integer pageSize)
    {
        return (List<T>) this.getHibernateTemplate().findByCriteria(detachedCriteria, begin, pageSize);
    }

    public List<T> findAll()
    {
        return (List<T>) this.getHibernateTemplate().find("from "+clazz.getSimpleName());
    }

}

1.4 其他的Dao继承该通用dao,就直接可以使用通用dao的基本功能了

/**
 * 联系人数据访问层
 */
public class CustomerDaoImpl extends BaseDaoImpl<CustomerDao> implements CustomerDao
{

}
AI驱动的人生K线:用金融可视化技术重构八字命理分析 数据可视化是现代数据科学和前端工程中的核心技术,它通过图形化手段将复杂数据转化为直观的视觉信息,帮助人们快速理解数据模式和趋势。其原理在于将抽象数据映射为视觉元素,利用人类强大的视觉感知能力进行信息解码。在技术价值上,数据可视化不仅能提升数据分析效率,更是人机交互和决策支持系统的重要组成部分。在应用场景中,从商业智能仪表盘到金融交易系统,再到科学研究和工程监控,数据可视化都发挥着关键作用。本文探讨的“人生K线”项目,正是这一技术的创新应用,它将传统的八字命理数据通过AI进行结构化处理,并利用金融K线图这一广 阅读详情

相关推荐

基于hibernatebaseDao

基于hibernatebaseDao,注释很详细,方便实用

基于hibernateBaseDAO接口

BaseDao.Java [html] view plain copy import java.io.Serializable;  import java.util.Collection;  import java.util.List;  import java.util.Map;    import com.xxx.finance.utils.HibernateHa

~ Caesar's wish书屋 ~ 676

基于hibernate封装的BaseDao

基于hibernate封装的BaseDao,有完整的增删改查,分页,执行hql sql 方法 约 20个方法,详情地址 https://blog.csdn.net/qq_41861261/article/details/85595872

基于hibernateBaseDao

1.BaseDao接口: package com.dear.simpler.dao; import java.io.Serializable; import java.util.List; import com.dear.simpler.db.utils.SPLDBException; /** * * @author lixiang * * 定义所有表的公共的方法接口 */ pu

人生如逆旅,我亦是行人。。。 833

Hibernate通用baseDao

IBaseDao [code="java"] /** * */ package zhenjw.hibernate.dao; import java.util.Collection; import java.util.List; import org.hibernate.Session; /** * @author zhenjw * */ pu...

zhenjw 258

Spring3.x企业应用开发实战-Spring+Hibernat架构分析

1: 持久层设计 采用Spring注解方式省略了大量Hibernate ORM配置文件; BaseDAO减少DAO层代码量,只需要编写非通用型的持久层方法; 持久层提供分页支持; Hibernate 二级缓存提高数据访问性能并制定不同缓存策略 2:服务层设计 持久层通过自动装配依赖注入到服务层 服务层添加事务支持 3:WEB层设计 将U...

weixin_30808253的博客 112

项目中使用Hibernate作为持久化层的整合重构

UML设计图 实体类 package cn.zzuli.oa.domain; public class Role { } 复制代码package cn.zzuli.oa.domain; public class User { private Long id; private String username; public User() { super(); } publ...

weixin_34032621的博客 138

事务传播特性摘记

在配置Hibernat的事务传播特性比较常用就是REQUIRED,read-only,REQUIRES_NEW,示例代码如下:     &lt;tx:advice id="txAdvice" transaction-manager="transactionManager"&gt; &lt;tx:attributes&gt; &lt;tx:method name="get*" r...

我的博客 385

Hibernate之HQL

一、HQL入门 1、HQL的含义: HQL是Hibernate Query Language(专属于hibernate框架的一个查询语言)的缩写 2. hql和sql区别/异同 HQL SQL 类名/属性 ...

m0_55556488的博客 169

spring和hibernate集成后,通用basedao

对dao中的基础的增删改查和分页功能进行了封装,可以通用,代码复用性提高了

hibernate basedao

涵盖通过hibernate进行数据库操作的通用方法

hibernate常用API详解

  根据个人使用Hibernate的经验,介绍一下Hibernate的多种不同的查询和CUD操作,这些东西在日常开发中非常常用,希望对大家有所帮助。     以下示例均以两张表为例:member和userinfo,member帐号信息表外键关联userinfo用户基本信息表,主键自动生成即可   然后映射出的POJO如下: public class Userinfo  imp...

上善若水任方圆 249

restful +springside(hibernate+spring) 后台框架整合

本篇详情 [url=http://java.sharpren.com/read.php?tid=54&page=1&toread=1#tpc]http://java.sharpren.com/read.php?tid=54&page=1&toread=1#tpc 附源码[/url] 经过几天的业余时间折腾,终于整合了一个后台框架 有需对 rest 和springside 泛型 ...

sharpwave的博客 241

hibernate 查询

hibernate常用API详解 博客分类: hibernate     根据个人使用Hibernate的经验,介绍一下Hibernate的多种不同的查询和CUD操作,这些东西在日常开发中非常常用,希望对大家有所帮助。     以下示例均以两张表为例:member和userinfo,member帐号信息表外键关联userinfo用户基本信息表,主键自动生成即可  

tianhennan1的博客 383

Scala+Hibernate事务处理的一种方式

为什么80%的码农都做不了架构师?>>> ...

weixin_33895016的博客 307

<三>、hibernate3转换为hibernate4

手上有个hibernate:3+spring:+3.2+struts2:2.3的教学案例,现在想转换为hibernate:4.3.1+spring:+4.1.3+struts2:2.3版本,由于hibernate4改动较大,代码需要做些修改。

Philics0725的博客 773
上一篇: 实现struts2的文件上传功能
下一篇: 分页查询PageBean的一种写法
Student108
博客等级 码龄8年 15粉丝 40原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值