package com.atguigu.surveypark.dao.impl;

import java.lang.reflect.ParameterizedType;
import java.util.List; import javax.annotation.Resource; import org.hibernate.Query;
import org.hibernate.SessionFactory; import com.atguigu.surveypark.dao.BaseDao; /**
* 抽象的dao实现,专门用于继承
*/
@SuppressWarnings("unchecked")
public abstract class BaseDaoImpl<T> implements BaseDao<T> { //注入sessionFactory
@Resource
private SessionFactory sf ; private Class<T> clazz ; public BaseDaoImpl(){
//得到泛型话超类
ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
clazz = (Class<T>) type.getActualTypeArguments()[0];
} public void saveEntity(T t) {
sf.getCurrentSession().save(t);
} public void saveOrUpdateEntity(T t) {
sf.getCurrentSession().saveOrUpdate(t);
} public void updateEntity(T t) {
sf.getCurrentSession().update(t);
} public void deleteEntity(T t) {
sf.getCurrentSession().delete(t);
} /**
* 按照HQL语句进行批量更新
*/
public void batchEntityByHQL(String hql, Object... objects) {
Query q = sf.getCurrentSession().createQuery(hql);
for(int i = 0 ; i < objects.length ; i ++){
q.setParameter(i, objects[i]);
}
q.executeUpdate();
} public T loadEntity(Integer id) {
return (T) sf.getCurrentSession().load(clazz, id);
} public T getEntity(Integer id) {
return (T) sf.getCurrentSession().get(clazz, id);
} public List<T> findEntityByHQL(String hql, Object... objects) {
Query q = sf.getCurrentSession().createQuery(hql);
for(int i = 0 ; i < objects.length ; i ++){
q.setParameter(i, objects[i]);
}
return q.list();
}
}

  

泛型baseDaoImpl类中如何知道具体子类的class类型的更多相关文章

  1. 在动态sql的使用where时,if标签判断中,如果实体类中的某一个属性是String类型,那么就可以这样来判断连接语句:

    在动态sql的使用where时,if标签判断中,如果实体类中的某一个属性是String类型,那么就可以这样来判断连接语句: 如果是String类型的字符串进行判空的时候: <if test=&q ...

  2. Runtime获取一个类中所有成员变量的名字和类型

  3. 泛型方法或泛型类中的方法是内部调用、PInvoke 或是在 COM 导入类中定义的。

    泛型基类中引用Api函数定义时static extern,在子类中会提示: 未处理TypeLoadException 泛型方法或泛型类中的方法是内部调用.PInvoke 或是在 COM 导入类中定义的 ...

  4. C++ 类中的3种权限作用范围

    三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员函数访问 #include <iostream> #in ...

  5. C++ 类中的3种访问权限和继承方式

    访问权限:public 可以被任意实体访问,protected 只允许子类(无论什么继承方式)及本类的成员函数访问,private 只允许本类的成员函数访问.三种继承方式分别是 public 继承,p ...

  6. C++:类中的赋值函数

    先来看一个例子: #include<iostream> #include<string> using namespace std; class Student{ public: ...

  7. java数据类型:集合存储元素类型限制<泛型> ;自定义类指定泛型<T> 以及限制用法;派生子类泛型<T> super(泛型内参数); 泛型通配符?以及?限制用法

    问题背景 Java 集合有个缺点,把一个对象"丢进"集合里之后,集合就会"忘记"这个对象的数据类型,当再次取出该对象时 该对象的编译类型就变Object类型(其 ...

  8. java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题

    /* 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中, 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行 */ impo ...

  9. 编写一个ComputerAverage抽象类,类中有一个抽象方法求平均分average,可以有参数。定义 Gymnastics 类和 School 类,它们都是 ComputerAverage 的子类。Gymnastics 类中计算选手的平均成绩的方法是去掉一个最低分,去掉一个最高分,然后求平均分;School 中计算平均分的方法是所有科目的分数之和除以总科目数。 要求:定义ComputerAv

    题目: 编写一个ComputerAverage抽象类,类中有一个抽象方法求平均分average,可以有参数. 定义 Gymnastics 类和 School 类,它们都是 ComputerAverag ...

随机推荐

  1. servers无法输入server name

    Here is the workaround that worked for me: Close Eclipse In {workspace-directory}/.metadata/.plugins ...

  2. android text

    "@you bang--- go on -------" 需要做分享内容,前面有段格式固定写死,同时颜色为灰色:后面的内容可以编辑,颜色为黑色,同时支持多行 有人用textview ...

  3. Position和anchorPoint

    Main.storyboard ViewController.m // //  ViewController.m //  7A12.position和anchorPoint // //  Create ...

  4. Windows升级(安装)MySQL 5.7.x 解压版 + 异常处理

    说明 版本升级(个人原因): 因为5.5的版本不能执行如下sql语句,故卸装5.5升级安装mysql-5.7.15: `timeName` timestamp(3) NULL DEFAULT NULL ...

  5. (转) 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

    转自:http://blog.csdn.net/zhoufoxcn/article/details/6404236 通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中 ...

  6. Windows 8.1 应用再出发 - 视图状态的更新

    本篇我们来了解一下Windows 8.1 给应用的视图状态带来了哪些变化,以及我们怎么利用这些变化作出更好的界面视图. 首先我们来简单回顾一下Windows 8.0 时代的视图状态:     上图中, ...

  7. java基础-反射之Class.forName

    Class.forName 查阅javaAPI public static Class<?> forName(String className) throws ClassNotFoundE ...

  8. PHP注册手机获取验证码代码

    php代码: <?php require dirname(__FILE__).'/include/common.inc.php';//这是在cms2008下面做的测试 header(" ...

  9. 修改VNC分辨率大小

    实验系统是centos6.5,在被连接的机器上需要安装vncserver. 1.第一种方法:使用geometry参数进行调整使用man命令获得关于geometry参数的描述[root@secdb ~] ...

  10. Linq学习之操作符

    一.环境搭建 下面将逐步搭建我们学习的环境,这个环境不仅仅是这次需要使用,以后的教程一样需要使用这个环境.所以请大家务必按照 搭建这里的环境否则会影响你后面的学习. 我们用到的几张表 通知消息表: 用 ...