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();
}
}
- 浏览: 25124 次
- 性别:
相关推荐
User fetchedUser = (User) session.get(User.class, 1L); // 删除 session.delete(fetchedUser); session.close(); sessionFactory.close(); ``` 在`JavaBeanTest71`这个文件中,可能包含了对上述概念的实践代码...
在理解Hibernate框架中,Session是核心组件之一,它充当了应用程序和数据库之间的桥梁。`Session`接口提供了多种操作,如创建、更新、查询和删除数据,这些都是基于对象关系映射(ORM)的概念进行的。本篇文章将深入...
Hibernate.session_factory_name 属性用于指定 SessionFactory 的名称,该名称将被绑定到 JNDI 中。 hibernate.max_fetch_depth Hibernate.max_fetch_depth 属性用于控制 Hibernate 的外连接抓取(outer join ...
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...
可以使用`get()`或`load()`方法获取单个对象,`query()`或`createCriteria()`方法创建查询,并通过执行查询获取结果集。例如,使用HQL(Hibernate Query Language)查询: ```java Query<MyEntity> query = session...
在数据加载时,`Session.load()`和`Session.get()`方法有细微差别:`load()`在找不到匹配对象时会抛出异常,而`get()`则返回null,不会打印错误信息。 4. **XML配置文件(hibernate.cfg.xml)** 另一种配置方式是...
2. 查询(Select):使用Session的`get()`、`load()`或`createQuery()`/`createNativeQuery()`方法获取数据。 ```java Session session = sessionFactory.openSession(); Transaction transaction = session.begin...
4. **示例代码**:`StudentTest.java`可能是博客中提供的一个示例代码,用于演示如何使用GET方法获取名为“Student”的实体。代码可能包含以下部分: - 创建SessionFactory,它是所有Session的工厂。 - 打开...
- **查询**:使用Session的`load()`或`get()`方法获取对象,`createCriteria()`或`createQuery()`构建复杂查询。 - **删除**:通过Session的`delete()`方法。 - **更新**:`update()`方法。 - **保存**:`save()`或`...
**用途**:启用或禁用使用JDBC的`getGeneratedKeys()`方法来获取插入操作后生成的主键值。此配置项有助于确保主键值的正确性。 **取值**:`true`或`false`。 #### 四、总结 以上详细介绍了`hibernate.cfg.xml`...
### 在Hibernate中的数据库操作 ...特别地,`save`、`get`、`load` 和 `delete` 方法是进行基本 CRUD 操作的基础,而理解它们之间的差异能够帮助开发人员更高效地利用 Hibernate 来处理数据库交互。
- 读取: `session.get(Class, id);` - 更新: `session.update(entity);` - 删除: `session.delete(entity);` #### 七、Hibernate基础语义 - **Configuration**: 配置Hibernate的基本设置。 - **SessionFactory**...
User user = (User) session.get(User.class, userId); ``` 事务管理是数据库操作中的关键部分,上述代码中的`beginTransaction()`和`commit()`就是对数据库操作进行包裹,确保原子性和一致性。 此外,Hibernate还...
//获取 UserTable 对象,假设已存在ID为1的用户UserTable userTable = (UserTable) session.get(UserTable.class, 1); //如果对象存在,执行删除操作if (userTable != null) { session.delete(userTable); } //提交...
- **读取**:`session.get()`或`session.load()`用于根据主键获取对象。 - **更新**:修改对象状态后,调用`session.update()`。 - **删除**:调用`session.delete()`。 例如,一个简单的保存操作可能如下所示: `...
`getSession()`方法获取当前Session,`beginTransaction()`和`commit()`分别用于开始和提交事务,而`save()`方法用于保存实体到数据库。 最后,我们可以在Service或Controller中注入UserDAO,调用其方法来实现业务...
- **提前加载关联对象**:通过 Session 的 load 或 get 方法提前加载关联对象,避免懒加载时触发额外查询。 ```java User user = session.get(User.class, 1L); List<Order> orders = session.createQuery(...
User user = (User) session.get(User.class, 1L); System.out.println(user.getName()); transaction.commit(); session.close(); ``` - **更新数据**: ```java Session session = sessionFactory....
例如,通过Criteria和Restrictions获取所有User:`Criteria criteria = session.createCriteria(User.class); criteria.add(Restrictions.all());` 3. Native SQL:当需要利用特定数据库特性时,可以直接使用原生SQL...