自己在dome一个小项目的时候,突发奇想,利用单例和工厂加上泛型的知识封装Po的CURD操作,直接上代码,文笔不好,呵呵,还请大家指教
接口规范,定义CURD操作
package edu.sasu.DAO;
import java.util.List;
/**
* 所有实体类遵循的接口
* @author Administrator
*
* @param <T>
* @param <ID>
*/
public interface BaseDao<T> {
/**
* 保存实体
* @param entity 实体类
*/
public boolean save(T entity);
/**
* 删除实体
* @param entity 实体类
*/
public boolean delete(T entity);
/**
* 根据实体ID删除实体
* @param entity 实体类
*/
public boolean deleteById(T entity);
/**
* 跟新实体
* @param entity 实体类
*/
//public boolean update(T entity);
public boolean update(T entity, Object OID);
/**
* 根据实体d,查询单个实体
* @param entity 实体类
* @return
*/
//public T findById(T entity);
public T findById(T entity, Object entityID);
/**
* 累出所有实体集合
* @param entityClass 实体类
* @return 实体类List
*/
public List<T> findAll(String hql);
public List<T> findAll(T entity);
/**
* 保存和跟新方法
*/
public boolean saveOrUpdate(T entity);
}
实现BaseDao接口,实现其中的方法
package edu.sasu.DAOImpl;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import edu.sasu.DAO.BaseDao;
import edu.sasu.Util.DBUtil;
/**
* 封装的基类操作
* @author Administrator
*
* @param <T>
*/
public class BaseDAOImpl<T> implements BaseDao<T>{
public synchronized boolean delete(T entity) {
// TODO Auto-generated method stub
return false;
}
/**
* 删除某条数据
*/
public synchronized boolean deleteById(T entity) {
Session session = DBUtil.getDBUtil().getSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.delete(entity);
tx.commit();
} catch (HibernateException e) {
if(tx != null){
tx.rollback();
}
return false;
}
return true;
}
public synchronized List<T> findAll(T entity) {
// TODO Auto-generated method stub
return null;
}
/**
* 查找单个数据
*/
public synchronized T findById(T entity, Object entityID) {
Session session = DBUtil.getDBUtil().getSession();
Transaction tx = null;
T temp;
try {
tx = session.beginTransaction();
temp = (T) session.get(entity.getClass(),(Serializable) entityID);
tx.commit();
} catch (HibernateException e) {
if(tx != null){
tx.rollback();
}
throw e;
}finally{
}
return temp;
}
/**
* 保存数据
*/
public synchronized boolean save(T entity) {
Session session = DBUtil.getDBUtil().getSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
//session.persist(entity);
session.save(entity);
tx.commit();
} catch (HibernateException e) {
if(tx != null){
tx.rollback();
}
//return false;
e.printStackTrace();
}
return true;
}
/**
* 跟新数据
*/
public synchronized boolean update(T entity, Object OID) {
Session session = DBUtil.getDBUtil().getSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
T temp = (T) session.get(entity.getClass(), (Serializable) OID);
session.merge(entity); //如果update要抛异常
tx.commit();
} catch (HibernateException e) {
if(tx != null){
tx.rollback();
}
//return false;
e.printStackTrace();
}
return true;
}
/**
* 查找符合hql的所有数据
*/
public synchronized List<T> findAll(String hql) {
Session session = DBUtil.getDBUtil().getSession();
Transaction tx = null;
List<T> list = new ArrayList<T>();
try {
tx = session.beginTransaction();
list = session.createQuery(hql).list();
session.flush();
tx.commit();
} catch (HibernateException e) {
if(tx != null){
tx.rollback();
}
e.printStackTrace();
}
return list;
}
/**
* 保存和跟新方法
*/
public synchronized boolean saveOrUpdate(T entity) {
Session session = DBUtil.getDBUtil().getSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.saveOrUpdate(entity);
tx.commit();
} catch (HibernateException e) {
if(tx != null){
tx.rollback();
}
//return false;
e.printStackTrace();
}
return true;
}
}
基础工厂采用单例实现获取实例操作对象
package edu.sasu.factory;
import edu.sasu.DAO.BaseDao;
import edu.sasu.DAOImpl.BaseDAOImpl;
/**
* 基础工厂
* @author Administrator
*
* @param <T>
*/
public class BaseFactory<T> {
private static BaseFactory baseFactory; //单一实例
private BaseDao<T> Instance;
private BaseFactory(){
Instance = new BaseDAOImpl<T>();
}
public BaseDao<T> getInstance(){ //不要把factory的new放在构造函数里面,不然会出现递归错误
return Instance;
}
public static BaseFactory getFactory(){
if(baseFactory == null){
baseFactory = new BaseFactory();
}
return baseFactory;
}
}
以上定义baseDAO接口,baeDAOIMpl是接口的实现,baseFactory是工厂,对baseDAOimp实例化,
在类中调用为: User(一个PoJo类)
User entity= new User();
BaseFactory<User> factory = BaseFactory.getFactory();
执行保存操作: factory.getInstance().save(entity); entity User的实例对象
执行保存操作,请大家评点下此种写法有什么不好的地方,本人能力有限,觉得还可以,请大牛指教
分享到:
相关推荐
Hibernate构建一个CURD的程序
NULL 博文链接:https://536762164-qq-com.iteye.com/blog/1871857
本项目是基于SSH(srpingMVC+spring3=hibernate4)自己学习完成的业余小的增删改查系统,方便大家学习,多多交流。
Struts2+Hibernate+Spring整合与增、删、改、查CURD操作源码
Tapestry5.1+Spring2.5.6+Hibernate3.2.5写得简单CURD的程序,借鉴了SpringSide3.1.4.2的配置及数据层。实现了添加,列表,修改,删除,显示等操作。内有源码及生成的WAR文件。可以直接使用!
一个完整struts2+hibernate整合 练习之CURD 完整版,带说明名书,需求分析,适合初学者的练习
使用mysql+maven+Hibernate做的一个一对一,一对多小案例,有需要的拿走,这个比较基础
uniapp sqlite js封装的api
对微信公众号中的授权进行处理,可以生成针对统一域名的授权转发,从重定向的地址中获取的用户信息,微信会传递一个code回来,通过code获取accessToken,来获取用户的信息。 微信公众号的模板消息发送,提供...
spring3+hibernate4+maven+logback的springMVC架构,有数据表,有jar包,有curd的例子
EasyAdmin框架以内置快速生成CURD的命令, 包括控制器、视图、模型、JS文件。能够使开发者效率得到进一步提升。 备注:在进行CURD命令行之前, 请按照规范设计表结构, 请参数表结构规范模块说明。 实际 以应用。
CURD例子对应的Jar包, 这是第一部分,还有第二部分,这个Jar可以直接使用,我没有整理,但是没有冲突!
SpringMVC+Spring3+Hibernate4开发环境搭建
NULL 博文链接:https://keshion.iteye.com/blog/1560102
angularjs CURD Example 单页应用程序
vue简单curd例子。
这是关于postgreSQL的开发demo,利用jdbc、hibernate、ibatis三种方式去调用postgreSQL的CURD和存储过程。
struts2与hibernate的整合实现数据的crud操作,还有复选框删除的实例,运用了Jquery的技术。 里面有使用需知,欢迎大家下载。
curd oracle. curd oracle. curd oracle.