java的hibernate框架操作数据库使用泛型T

此篇文章主要是演示使用java的泛型T来写一个公共的BaseDao实现对数据库的基本操作,增删改查,由于博主水平有限,有错之处望指出改正

hibernate框架版本3.3

package com.lyl.demo.dao;
/**
 * 功能:实现数据库的基本操作
 * @author Liu-yanlin
 * 时间:2017-02-19
 * 地点:成都锦江
 */
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
/**
 *使用 ThreadLocal模式解决方案,解决session频繁创建和销毁
 * 
 */
public class BaseDao {
private Session session=null;//session对象
private Transaction transaction=null; //事务对象
@SuppressWarnings("rawtypes")
private static final ThreadLocal thread=new ThreadLocal();//线程局部变量
private Class entityClass;//实体对象

//构造方法,实例化对象的时候获取一个session和获取泛型的类型
@SuppressWarnings("unchecked")
public BaseDao(){
Configuration config=new Configuration().configure();
SessionFactory factoty=config.buildSessionFactory();
this.session=(Session) thread.get();
if(session==null){
this.session=factoty.openSession();
thread.set(this.session);
}
this.entityClass=getGenericType();//获取泛型类型
}
/************************* BaseDao的私有辅助方法获取泛型T的类型 ****************************/
private Class getGenericType() {
Type superType = this.getClass().getGenericSuperclass();
Type[] generics = ((ParameterizedType) superType).getActualTypeArguments();
return (Class)generics[0];
}
/*******************************session基本增删改查***********************************/
/*保存数据*/
public boolean save(T t){
try {
transaction=this.session.beginTransaction();
this.session.save(t);
transaction.commit();
} catch (RuntimeException e) {
if(null!=transaction){
transaction.rollback();
}throw e;
}finally{
this.session.close();
}
return true;

}
/*修改数据*/
public boolean update(T t){
try {
transaction=this.session.beginTransaction();
this.session.update(t);
transaction.commit();
} catch (RuntimeException e) {
if(null!=transaction){
transaction.rollback();
}throw e;
}finally{
this.session.close();
}
return true;

}
/*删除一条数据*/
public boolean delete(T t){
try {
transaction=this.session.beginTransaction();
this.session.delete(t);
transaction.commit();
} catch (RuntimeException e) {
if(null!=transaction){
transaction.rollback();
}throw e;
}finally{
this.session.close();
}
return true;

}
/*根据主键id查询一条数据*/
@SuppressWarnings("unchecked")
public T FindFid(String Fid){
Object obj=null;
try {
obj=this.session.get(entityClass, Fid);
} catch (RuntimeException e) {
throw e;
}finally{
this.session.close();
}
return (T)obj;
}
}


这里我演示的是添加一个学生类:

创建学生Dao类,这里的学生dao类只需继承BaseDao类就实现了增删改查:

package com.lyl.demo.dao.entity_dao;

import com.lyl.demo.dao.BaseDao;
import com.lyl.demo.entity.Student;

/**
 *功能:实现学生类的数据库基本操作(使用泛型去继承BaseDao)
 *作者: liu-yanlin
 *地点:成都锦江
 *时间:2017-02-19
 */
public class StudentDao extends BaseDao {


}

-----------------------测试-----向数据库添加一条记录---------------------

package com.lyl.demo.service;


import com.lyl.demo.dao.entity_dao.StudentDao;
import com.lyl.demo.entity.Student;


public class Test {
public static void main(String[] args) {

Student stu=new Student();
stu.setFname("刘汉");
stu.setFage(21);
stu.setFgender("男");

StudentDao dao=new StudentDao();
dao.save(stu);

}
}


你可能感兴趣的:(java,mysql)