package com.dreamoa.sys;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import com.dreamoa.util.HibernateSessionFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
/**
*此类主要是提供一些常用的方法使用,用来被业务类业务类
*/
public class BaseDAO<T> {
private static Log log = LogFactory.getLog(BaseDAO.class);
private Session session = null;
private Class<T> entityClass;// 通过反射机制获取泛型对应的实体类的类型
private Transaction tx = null;
public BaseDAO() {
Type genType = getClass().getGenericSuperclass();
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
entityClass = (Class) params[0];
}
/**
* 创建会话session
*/
public void currentSession() {
this.session = HibernateSessionFactory.getSession();
}
/**
* 关闭session
*/
public void closeSession() {
HibernateSessionFactory.closeSession();
}
/**
* 提交事务
*/
public void commit() {
this.tx.commit();
closeSession();
}
/**
* 开启事务
*/
public void beginTransaction() {
currentSession();
tx = this.session.beginTransaction();
}
/**
* 回滚事务
*/
public void rollback(){
tx.rollback();
}
/**
* 密码加密
*/
public static String encrypt(String str) {
return Base64.byteArrayToBase64(str.getBytes());
}
/**
* 密码解密
*/
public static String decrypt(String s) {
return new String(Base64.base64ToByteArray(s));
}
/**
* 持久化一个对象
* @param obj
*/
public void save(Object obj) {
session.save(obj);
}
/**
* 更新一个对象
* @param obj
*/
public void update(Object obj) {
session.update(obj);
}
/**
* 根据主键id删除一个对象
* @param clazz
* @param idName,主键名称
* @param id,实际值
*/
public void deleteById(String idName, Serializable id) {
String className = entityClass.getSimpleName();
String hql = "delete from " + className + " where " + idName + "=?";
Query query = session.createQuery(hql);
query.setParameter(0, id);
query.executeUpdate();
}
/**
* 根据主键id查询对象
*
* @param id
* @return
*/
public T get(Serializable id) {
return (T) session.get(entityClass, id);
}
}
分享到:
相关推荐
例如,一个简单的基于JDBC的BaseDao实现可能如下: ```java public abstract class BaseDao<T> { private DataSource dataSource; public BaseDao(DataSource dataSource) { this.dataSource = dataSource; } ...
例如,一个简单的`BaseDao`可能包含如下方法: 1. `save(T entity)`: 保存实体对象到数据库。 2. `update(T entity)`: 更新指定实体对象的信息。 3. `deleteById(ID id)`: 根据主键ID删除对应的记录。 4. `findById...
在Java编程语言中,BaseDao(基础数据访问对象)是一个常见的设计模式,它为数据库操作提供了一种统一的接口。BaseDao通常包含了CRUD(创建、读取、更新、删除)的基本方法,使得开发者可以方便地对数据库进行操作,...
在这个场景中,"BaseDao"通常是一个基类,它包含了通用的数据库操作方法,可以被各个特定的DAO(Data Access Object)继承,以实现业务逻辑中的数据访问。 1. **BaseDao**:BaseDao是DAO层的基类,它的设计目的是...
实践时,可以创建一个简单的项目,模拟数据库操作,观察`BaseDao`如何简化代码。通过这种方式,你可以更好地掌握数据库编程,并为后续的ORM框架(如Hibernate、MyBatis)的学习打下坚实的基础。 总结,`jdbcBaseDao...
本文将详细介绍如何基于Spring JDBC模块创建一个通用的数据访问对象(BaseDAO)类,实现简单的对象关系映射(ORM)功能,包括增删改查等基本操作。 #### Spring JDBC简介 Spring JDBC是Spring框架的一部分,它简化了...
首先,`BaseDAO`是一个设计模式,用于封装数据库的基本操作,如增、删、改、查。它的出现是为了减少代码的重复性,提高代码的可复用性和可维护性。`BaseDAO`通常会定义一些通用的方法,比如获取单个对象、获取集合、...
在Java开发中,`BaseDao` 是一个常见的设计模式,用于提供数据访问对象(DAO)的基础功能,方便其他业务逻辑层或数据访问层组件进行数据库操作。本篇将深入探讨如何利用注解和反射机制来封装一个支持一对多查询的 `...
通过自定义注解和反射机制,我们可以实现简单的BaseDao实例,提供基本的CRUD操作。这种方法可以帮助我们快速开发数据访问层,提高开发效率。但是,我们也需要注意到这种方法的局限性,例如,它不支持复杂的查询操作...
在本项目中,BaseDao类使用JDBC进行数据库操作。 2. **BaseDao类**: 这是一个抽象出的基类,封装了数据库操作的通用逻辑,包括连接获取、SQL语句执行以及结果集处理等,目的是提高代码的复用性和可维护性。 3. **...
JFrame数据操作层是软件开发中的一个重要组成部分,它主要负责数据的存取和管理,为上层业务逻辑层提供统一的接口。这个层的构建基于Spring和Hibernate框架,旨在简化开发流程,避免开发者深入理解底层的技术细节。...
由于这个库主要是针对Oracle数据库设计的,所以很多特定的方法可能只适用于Oracle,比如处理lob类型数据、序列或者触发器相关的操作。在使用时,需要根据Oracle的特性和JdbcTemplate的API进行适当调整。
在本例中,“SSH 的简单继承”指的是一个基于SSH框架的学生信息管理系统,该系统允许对学生的数据进行基本操作,如添加、删除、修改和查询。 首先,Struts2是MVC(模型-视图-控制器)架构的一部分,它负责处理HTTP...
在Java开发中,数据访问对象(DAO)模式是一种常见的设计模式,用于封装对数据库的操作,使得业务逻辑与数据访问逻辑分离。JDBC(Java Database Connectivity)是Java平台中用于访问数据库的标准API,但它直接使用...
4. **创建DAO类**:创建一个继承自`BaseDao`的DAO类,或者直接使用`BaseDao`,并实现具体的数据操作方法。 5. **使用QueryRunner**:在DAO类中,利用DBUtils的`QueryRunner`类执行SQL语句。例如,可以使用`Query...
在Android开发中,数据库操作是常见的任务之一,用于持久化数据。ORM(Object-Relational Mapping,对象关系映射)是一种技术,它允许开发者用面向对象的方式来操作数据库,避免了直接编写SQL语句的繁琐过程。本文将...
9. **编写DAO和Service**:DAO(Data Access Object)层负责具体的数据操作,Service层封装业务逻辑,它们都被Spring管理。 10. **创建视图**:使用JSP或FreeMarker等技术创建视图页面,展示结果。 11. **测试运行...
结合这两个文件,我们可以理解在实际项目中,`DBUtil`提供数据库连接管理和事务控制,而`BaseDAO`作为所有数据访问类的基类,负责具体的数据库操作。这样的设计使得数据库操作更加规范且易于维护,同时也降低了代码...
开发者可以通过继承baseDAO,自定义特定的新闻数据操作。 4. **基于baseDAO的增删改查**:baseDAO的使用意味着在数据库操作上实现了代码复用,每个具体的DAO只需关注自己的业务逻辑,而无需关心底层的SQL执行。这种...