您的位置:首页 > 数据库

泛型+hibernate封装任意数据库数据的通用方法

2015-11-26 22:46 507 查看
看点!泛型+hibernate封装任意数据库数据的通用方法

工具类:

HibernateUtil.java

<span style="font-family:Microsoft YaHei;font-size:18px;">package cn.itcast.sh.utils;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
public static SessionFactory sessionFactory;
static{
Configuration configuration = new Configuration();
configuration.configure();
sessionFactory = configuration.buildSessionFactory();
}
}
</span>


dao层:
EntityDao.java

<span style="font-family:Microsoft YaHei;font-size:18px;">package cn.itcast.sh.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import cn.itcast.sh.utils.HibernateUtil;

public class EntityDao extends HibernateUtil {

/**
* 查看所有数据
* @param t
* @return
*
*/
public <T> List<T> find(Class<T> t){
Session session = sessionFactory.openSession();
List<T> list = session.createQuery("from "+t.getName()).list();
session.close();
return list;
}

/**
* 通过参数条件查询
* @param t
* @param s
* @return
* T类型
*/
public <T> T findById(Class<T> t,Serializable s){
Session  session = sessionFactory.openSession();
T tt = (T)session.get(t, s);
session.close();
return tt;
}

/**
* 在任意表中添加数据
* @param t
*
*/
public <T> void saveEntity(T t){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
session.save(t);
transaction.commit();
session.close();
}

/**
* @param t
* 修改任何表中的数据
*/
public <T> void updateEntity(T t){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
session.update(t);
transaction.commit();
session.close();
}

/**
* 根据任意表及参数条件,
* 删除数据项
* @param t
* @param s
*
*/
public <T> void deleteEntity(Class<T> t,Serializable s){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
T tt=this.findById(t, s);
if(tt!=null){
session.delete(tt);
transaction.commit();
}else{
System.out.println("没有该数据,无法删除!!");
}
session.close();
}

}
</span>


测试dao层:

EntityDaoTest.java

<span style="font-family:Microsoft YaHei;font-size:18px;">package cn.itcst.access.sh;

import java.util.List;

import org.junit.Test;

import cn.itcast.sh.dao.EntityDao;
import cn.itcast.sh.dao.EntityDaoFactory;
import cn.itcast.sh.domain.User;

/**
* 测试Dao层类
* @author Administrator
*
*/
public class EntityDaoTest {

@Test
public void findTest(){
EntityDao entityDao = new EntityDao();
List<User> userList=entityDao.find(User.class);
System.out.println(userList.toString());
}

@Test
public void findByIdTest() throws Exception{
EntityDao entityDao = EntityDaoFactory.getInstance(EntityDao.class);
//		EntityDao entityDao = new EntityDao();  也可以采用这种方式得到对象
User user = entityDao.findById(User.class, 1L);
System.out.println(user.getUsername());
}

@Test
public void saveEntityTest() throws Exception{
EntityDao entityDao = EntityDaoFactory.getInstance(EntityDao.class);
User user = new User();
user.setUsername("李三");
user.setPassword("1234567");
user.setEmail("478672492@qq.com");
user.setPhone("18772100247");
user.setSex("女");
entityDao.saveEntity(user);
}

@Test
public void updateEntityTest() throws Exception {
EntityDao entityDao = EntityDaoFactory.getInstance(EntityDao.class);
User user1 = entityDao.findById(User.class, 4L);
if(user1!=null){
user1.setPhone("18772100255");
entityDao.updateEntity(user1);
}
else{
System.out.println("没有该数据!无法更新。。。。");
}
}

@Test
public void deleteEntityTest() throws Exception{
EntityDao entityDao = EntityDaoFactory.getInstance(EntityDao.class);
entityDao.deleteEntity(User.class, 2L);
}
}
</span>


该测试类中产生了一个EntityDaoFactory小工具类(可以用可不用,我们可以直接实例化dao对象,这里是为了演示,给大家看看):

EntityDaoFactory.java

<span style="font-family:Microsoft YaHei;font-size:18px;">package cn.itcast.sh.dao;

import java.util.List;

public class EntityDaoFactory {
public static <T> T getInstance (Class<T> t) throws Exception{
return (T) t.newInstance();
}
}
</span>


然后就是,在action层,调用dao层方法。,并且将数据对象放到对象域中,以便在jsp页面上可以取出来。

package cn.itcast.sh.action;

import java.util.List;

import cn.itcast.sh.dao.EntityDao;
import cn.itcast.sh.dao.EntityDaoFactory;
import cn.itcast.sh.domain.User;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class UserAction extends ActionSupport implements ModelDriven<User> {
private User model = new User();

public User getModel() {
return this.model;
}

public String aa() throws Exception{
EntityDao entityDao = EntityDaoFactory.getInstance(EntityDao.class);
List<User> userList = entityDao.find(User.class);
System.out.println(userList.size());
//下面这句可以把对象放到栈底里面去(数据回显才用这个)
//		ActionContext.getContext().getValueStack().getRoot().add(userList);
//这种方法是将对象放入对象栈中(一般选用这个)
ActionContext.getContext().put("userList", userList);
//这种方法也是一样的将对象放入栈顶中
//		ActionContext.getContext().getValueStack().push(userList);
//这种方法也是一样的将对象放入栈顶中
//		ActionContext.getContext().getValueStack().getRoot().add(0, userList);
//还有peek方法得到栈顶元素,pop去除栈顶元素
return "userList";
}

}


在jsp页面取出来。

<body>
This is my User JSP page. <br>
<hr>
<s:iterator value="#userList">
<s:property value="uid"/>
<s:property value="username"/>

<s:property value="password"/>
<s:property value="phone"/>
<s:property value="email"/>
<br/>
</s:iterator>
<s:debug></s:debug>
</body>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: