Hibernate Dao映射配置通用接口类反射获取加载calass实例

接口:

package com.ph.dao;

import java.io.Serializable;

import java.util.List;

import org.hibernate.criterion.DetachedCriteria;

public interface BaseDao<T> {

public void save(T t);

public void delete(T t);

public void update(T t);

public T findById(Serializable id);

public List<T>  findAll();

public Integer findCount(DetachedCriteria detachedCriteria);

public List<T> findByPage(DetachedCriteria detachedCriteria,Integer begin,Integer pageSize);

}

接口实现类:

package com.ph.dao.impl;

import java.io.Serializable;

import java.lang.reflect.ParameterizedType;

import java.lang.reflect.Type;

import java.util.List;

import org.hibernate.criterion.DetachedCriteria;

import org.hibernate.criterion.Projections;

import org.springframework.orm.hibernate5.support.HibernateDaoSupport;

import com.ph.dao.BaseDao;

public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {

private Class clazz;

public BaseDaoImpl() {

//获取子类

Class clazz = this.getClass();

//反射加载父类,获取参数化类型

Type type = clazz.getGenericSuperclass();

//获取实际类型参数

ParameterizedType pType = (ParameterizedType) type;

Type[] types = pType.getActualTypeArguments();

//设置clazz

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 List<T>  findAll() {

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

}

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 0;

}

public List<T> findByPage(DetachedCriteria detachedCriteria,Integer begin,Integer pageSize) {

detachedCriteria.setProjection(null);

return (List<T>) this.getHibernateTemplate().findByCriteria(detachedCriteria, begin, pageSize);

}

}

原文地址:https://www.cnblogs.com/hirampeng/p/9716318.html

时间: 2024-08-08 23:01:45

Hibernate Dao映射配置通用接口类反射获取加载calass实例的相关文章

JAVA中的反射中加载类的方法

反射:加载类的方法有三种, 1.用Class.forName("类名")方法来调用; 2.类名.class得到 3.用对象.getClass()得到 package com.ma.reflection; import org.junit.Test; import com.ma.bean.UserBean; public class Demo1 { /** * 反射:加载类的方法 */ @Test public void test1(){ //1.用Class.forName("

java中反射:加载类的构造方法

package com.ma.reflection; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import org.junit.Test; import com.ma.bean.UserBean; /** * 反射:加载构造方法 * @author ma * */ public class Demo2 { /** * 反射:加载类的无参构造方法 */ @Te

0607-抽象类、抽象方法、接口、类的重载、类的自加载、对象的克隆

1.抽象类.抽象方法(abstract) 正常定义类(方法)的前面,加上关键字:abstract,就构成抽象类(方法). 抽象类:抽象类就是用来做父类的,可以用来规范一些类的共同特性,不能被实例化,子类继承了它的特性,这就是"规范作用" 抽象方法:抽象方法是一个没有方法体(也不含大括号)的方法定义"头"而已.例如:abstract  function  f1($x1, $y, $m); 抽象类抽象方法细节关系描述: 1.抽象方法只能存在于抽象类. 2.但,一个抽象类

[javaSE] 反射-动态加载类

Class.forName(“类的全称”) ①不仅表示了类的类类型,还代表了动态加载类 ②请大家区分编译,运行 ③编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 Ⅰ所有的new对象都是静态加载类 在编译的时刻就要去检测该类是否存在,如果不存在,编译失败. //对于这种情况,静态加载不适用,因为我们需要根据输入来确定加载哪个类 package com.tsh.reflect; class ReflectLoadDemo { public static void main(String[]

[翻译]-Linux上C++类的动态加载

摘要:本文是翻译文章,主要介绍了运行时重载C++类的技术,包括了Linux上的动态加载接口.C++类的动态加载技术点及实现.自动加载技术等.最后给出了两个应用案例及相关的源代码.   关键字:动态加载,C++类,Linux 原文链接:http://porky.linuxjournal.com:8080/LJ/073/3687.html   推荐: (原文)http://www.tldp.org/HOWTO/text/C++-dlopen (翻译)http://hi.baidu.com/clive

Yaf零基础学习总结5-Yaf类的自动加载

Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的时候, 会通过SPL注册一个自己的Autoloader, 出于性能的考虑, 对于框架相关的MVC类, Yaf Autoloader只以目录映射的方式尝试一次. 具体的目录映射规则如下: 对于控制器 Controller 默认模块下为{项目路径}/controllers/, 否则为{项目路径}/mod

利用反射动态加载程序集中所有的继承于Form的子类

利用C# 的反射,能够轻松快捷的创建指定类型的未知对象,比如继承某个接口的类,继承于某个基类的子类. 问题场景: 我自己创建一个解决方案,这个方案里面放了很多的小工具,每一个工具都是一个小窗体,于是,我就用一个MID窗体来包含这些窗体. 这样问题就来了,每一次我添加一个小工具,我就必须在MID窗体里面添加一个按钮,或者是一个菜单.在事件写上,让某个窗体显示出来.这类无聊的语句. 那么能不能让程序自动查找程序集中的窗体,自动创建按钮,或者菜单. 这样就可以达到动态创建的目的了 解决方案: 假设我们

java动态编译类文件并加载到内存中

如果你想在动态编译并加载了class后,能够用hibernate的数据访问接口以面向对象的方式来操作该class类,请参考笔者的这篇博文-(该博文暂未发布) 所谓动态编译,就是在程序运行时产生java类,并编译成class文件. 一.这里介绍两种动态编译java文件的方式. 第一种:使用Runtime执行javac命令 /** * 编译java类 * 使用Runtime执行javac命令 * @param name 类的全限定包名 不带后缀 例如com.test.Notice 而不要写成com.

springcloud项目配置拓展从本地config目录加载

本文受阿里开源的Nacos启发,应用启动后从Nacos服务加载配置到应用中,想着本地开发的时候加载配置能否从本地存储中加载,这样也能加快开发效率 首先 我们来看下SpringCloud项目应用Nacos服务的bootstrap.yaml配置如下 spring: cloud: nacos: config: server-addr: 127.0.0.1:8848 file-extension: yaml discovery: server-addr: 127.0.0.1:8848 applicati