`

利用反射技术获得hibernate中session.get()方法中class的获取方法

 
阅读更多

package cn.oa.base.dao.impl;

import java.lang.reflect.ParameterizedType;
import java.util.List;

import javax.annotation.Resource;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import cn.oa.base.dao.BaseDao;

@SuppressWarnings("unchecked")
public class BaseDaoImpl<T> implements BaseDao<T> {
    @Resource
    private SessionFactory sessionFactory;
    private Class<T> clazz;

    public Session getSession() {
        return sessionFactory.getCurrentSession();
    }

    public BaseDaoImpl() {
        /*
         * 得到的是泛型化类
         */
        ParameterizedType pt = (ParameterizedType) this.getClass()
                .getGenericSuperclass();
        /*
         * 得到的是真实的类型
         */
        this.clazz = (Class<T>) pt.getActualTypeArguments()[0];
    }

    @Override
    public void add(T entry) {
        getSession().save(entry);
    }

    @Override
    public void edit(T entry) {
        getSession().update(entry);
    }

    @Override
    public void delete(Long id) {
        T entry = getId(id);
        getSession().delete(entry);

    }

    @Override
    public List<T> findAll() {
        List<T> list = getSession()
                .createQuery("FROM " + clazz.getSimpleName())//
                .list();
        return list;
    }

    @Override
    public T getId(Long id) {
        getSession().get(clazz, id);
        return null;
    }

    @Override
    public List<T> getIds(Long[] ids) {
        return getSession()
                .createQuery(
                        "FROM " + this.clazz.getSimpleName()
                                + "WHERE id in(:ids)")//
                .setParameterList("ids", ids)//
                .list();
    }

}

分享到:
评论

相关推荐

    JavaEE技术-自主学习.zip_hibernate_hibernate session _javaee映射.xml

    User fetchedUser = (User) session.get(User.class, 1L); // 删除 session.delete(fetchedUser); session.close(); sessionFactory.close(); ``` 在`JavaBeanTest71`这个文件中,可能包含了对上述概念的实践代码...

    hibernate session.doc

    在理解Hibernate框架中,Session是核心组件之一,它充当了应用程序和数据库之间的桥梁。`Session`接口提供了多种操作,如创建、更新、查询和删除数据,这些都是基于对象关系映射(ORM)的概念进行的。本篇文章将深入...

    hibernate.cfg.xml中配置信息详解

    Hibernate.session_factory_name 属性用于指定 SessionFactory 的名称,该名称将被绑定到 JNDI 中。 hibernate.max_fetch_depth Hibernate.max_fetch_depth 属性用于控制 Hibernate 的外连接抓取(outer join ...

    hibernate.properties

    hibernate.properties # # Hibernate, Relational Persistence for Idiomatic Java # # License: GNU Lesser General Public License (LGPL), version 2.1 or later. # See the lgpl.txt file in the root directory...

    hibernate--3.Hibernate数据持久化(通过 Session 操纵对象)

    可以使用`get()`或`load()`方法获取单个对象,`query()`或`createCriteria()`方法创建查询,并通过执行查询获取结果集。例如,使用HQL(Hibernate Query Language)查询: ```java Query&lt;MyEntity&gt; query = session...

    Hibernate配置文.pdf

    在数据加载时,`Session.load()`和`Session.get()`方法有细微差别:`load()`在找不到匹配对象时会抛出异常,而`get()`则返回null,不会打印错误信息。 4. **XML配置文件(hibernate.cfg.xml)** 另一种配置方式是...

    Hibernate入门示例.doc

    2. 查询(Select):使用Session的`get()`、`load()`或`createQuery()`/`createNativeQuery()`方法获取数据。 ```java Session session = sessionFactory.openSession(); Transaction transaction = session.begin...

    hibernate3.2_GET方法

    4. **示例代码**:`StudentTest.java`可能是博客中提供的一个示例代码,用于演示如何使用GET方法获取名为“Student”的实体。代码可能包含以下部分: - 创建SessionFactory,它是所有Session的工厂。 - 打开...

    hibernate课程笔记.doc

    - **查询**:使用Session的`load()`或`get()`方法获取对象,`createCriteria()`或`createQuery()`构建复杂查询。 - **删除**:通过Session的`delete()`方法。 - **更新**:`update()`方法。 - **保存**:`save()`或`...

    hibernate[1].cfg.xml中配置信息详解

    **用途**:启用或禁用使用JDBC的`getGeneratedKeys()`方法来获取插入操作后生成的主键值。此配置项有助于确保主键值的正确性。 **取值**:`true`或`false`。 #### 四、总结 以上详细介绍了`hibernate.cfg.xml`...

    在hibernate中的数据库操作

    ### 在Hibernate中的数据库操作 ...特别地,`save`、`get`、`load` 和 `delete` 方法是进行基本 CRUD 操作的基础,而理解它们之间的差异能够帮助开发人员更高效地利用 Hibernate 来处理数据库交互。

    Hibernate开发指南.pdf

    - 读取: `session.get(Class, id);` - 更新: `session.update(entity);` - 删除: `session.delete(entity);` #### 七、Hibernate基础语义 - **Configuration**: 配置Hibernate的基本设置。 - **SessionFactory**...

    hibernate code.rar

    User user = (User) session.get(User.class, userId); ``` 事务管理是数据库操作中的关键部分,上述代码中的`beginTransaction()`和`commit()`就是对数据库操作进行包裹,确保原子性和一致性。 此外,Hibernate还...

    Hibernate操作数据库的方法

    //获取 UserTable 对象,假设已存在ID为1的用户UserTable userTable = (UserTable) session.get(UserTable.class, 1); //如果对象存在,执行删除操作if (userTable != null) { session.delete(userTable); } //提交...

    Hibernate 入门操作.ppt

    - **读取**:`session.get()`或`session.load()`用于根据主键获取对象。 - **更新**:修改对象状态后,调用`session.update()`。 - **删除**:调用`session.delete()`。 例如,一个简单的保存操作可能如下所示: `...

    springboot集成hibernate

    `getSession()`方法获取当前Session,`beginTransaction()`和`commit()`分别用于开始和提交事务,而`save()`方法用于保存实体到数据库。 最后,我们可以在Service或Controller中注入UserDAO,调用其方法来实现业务...

    hibernate-release-5.0.7.Final.zip官方

    - **提前加载关联对象**:通过 Session 的 load 或 get 方法提前加载关联对象,避免懒加载时触发额外查询。 ```java User user = session.get(User.class, 1L); List&lt;Order&gt; orders = session.createQuery(...

    hibernate连接数据[Mysql]的代码实例

    User user = (User) session.get(User.class, 1L); System.out.println(user.getName()); transaction.commit(); session.close(); ``` - **更新数据**: ```java Session session = sessionFactory....

    Hibernate培训笔记.

    例如,通过Criteria和Restrictions获取所有User:`Criteria criteria = session.createCriteria(User.class); criteria.add(Restrictions.all());` 3. Native SQL:当需要利用特定数据库特性时,可以直接使用原生SQL...

Global site tag (gtag.js) - Google Analytics