hibernate实现单个对象的增删改查,以及实现分页查询

               hibernate实现单个对象的增删改查,以及实现分页查询,大家可以从这个小例子中感受到hibernate的魅力,如果和以前的jdbc实现相比,hibernate的实现就更加简单了

以下是实现流程:

1:创建一个对象实体User对应数据库的表user,以及创建映射文件,hibernate配置文件,这里就不在赘述了,大家可以参看,我写的如何创建第一个hibernate程序文章,这里不在讨论:

package com.leige.domain;

import java.util.Date;

public class User {
    private int id;
	private String name;
	private Date birthday;

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", birthday=" + birthday
				+ "]";
	}

}

2:创建hibernate工具类(实现功能功能就是获取sesiionFactory和session):

package com.leige.domain;

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



public class HibernateUtils {

	static SessionFactory sessionFactory=null;
	//加载配置方法
	static{
		//默认加载src下的/hibernate.cfg.xml,也可以指定其他文件
		sessionFactory=new Configuration().configure().buildSessionFactory();
	}
	
	public static SessionFactory  getSessionFactory(){
		//返回一个session工厂
		return sessionFactory;
	}
	public static Session getSession(){
		//从session工厂获取session
		return getSessionFactory().openSession();
	}
}

3:创建UserDao操作user对象的增删改查以及分页操作:

(1)首先创建一个分页对象(用来存储分页的对象和所有记录条数):

package com.leige.dao;

import java.util.List;

public class PageBean<T> {
	private int count;
	private List<T> pageList;
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	public List<T> getPageList() {
		return pageList;
	}
	public void setPageList(List<T> pageList) {
		this.pageList = pageList;
	}
	
}
(2):创建UserDao操作类:


package com.leige.dao;

import java.util.List;

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

import com.leige.domain.HibernateUtils;
import com.leige.domain.User;

/**
 * @author 磊哥
 *
 */
/**
 *
 */
public class UserDao {
	
	/**
	 * @param 向数据库中添加对象
	 */
	public void add(Object user){
		
		//获取session
		Session session=HibernateUtils.getSession();
		//标准格式
		Transaction tx=null;
		try {
			//开启事务
			tx=session.beginTransaction();
			session.save(user);//保存对象
			tx.commit();//提交事务
		} catch (Exception e) {
			tx.rollback();
			throw e;
		}finally{
			if(session!=null)session.close();//关闭连接
		}
	}
	
	/**
	 * 删除方法
	 */
	public void delete(int id){
		//获取session
		Session session=HibernateUtils.getSession();
		//标准格式
		Transaction tx=null;
		try {
			//开启事务
			tx=session.beginTransaction();
			Object obj=getById(id);
		     session.delete(obj);;//删除对象
			tx.commit();//提交事务
		} catch (Exception e) {
			tx.rollback();
			throw e;
		}finally{
			if(session!=null)session.close();//关闭连接
		}
	}

  /**
 * 查找方法,根据id查找
 * @return
 */
public Object getById(int id) {
		// TODO Auto-generated method stub
	  
	  
		//获取session
		Session session=HibernateUtils.getSession();
		//标准格式
		Transaction tx=null;
<pre code_snippet_id="1629549" snippet_file_name="blog_20160330_4_7417432" name="code" class="html">                   Object obj=null;
try {//开启事务tx=session.beginTransaction();obj=session.get(User.class, id);//查找对象tx.commit();//提交事务} catch (Exception e) {tx.rollback();throw e;}finally{if(session!=null)session.close();//关闭连接}
 
 
<pre code_snippet_id="1629549" snippet_file_name="blog_20160330_4_7417432" name="code" class="html">                      return obj;
}/** * @param 根据传入对象更新数据库中记录 */public void update(User user){ //获取sessionSession session=HibernateUtils.getSession();//标准格式Transaction tx=null;try {//开启事务tx=session.beginTransaction();session.update(user);//更新对象tx.commit();//提交事务} catch (Exception e) {tx.rollback();throw e;}finally{if(session!=null)session.close();//关闭连接}}/** * 查询所有对象 */public List<User> findAll(){ //获取sessionSession session=HibernateUtils.getSession();//标准格式Transaction tx=null;
 
 
                         <pre code_snippet_id="1629549" snippet_file_name="blog_20160330_4_7417432" name="code" class="html" style="font-size: 13.3333px;">                               List<User> list=null;
try {//开启事务tx=session.beginTransaction();list=session.createQuery("from User").list();//查询所有tx.commit();//提交事务} catch (Exception e) {tx.rollback();throw e;}finally{if(session!=null)session.close();//关闭连接}
 
 
<pre code_snippet_id="1629549" snippet_file_name="blog_20160330_4_7417432" name="code" class="html" style="font-size: 13.3333px;">                           return list;
}/** * 分页查找,传入页码pageCode,分页大小pageCount,返回页码所包含的内容 */public PageBean findByPage(int pageCode ,int pageCount){//获取sessionSession session=HibernateUtils.getSession();//标准格式Transaction tx=null;
 
 
<pre code_snippet_id="1629549" snippet_file_name="blog_20160330_4_7417432" name="code" class="html" style="font-size: 13.3333px;">                 PageBean< User> pageBean=null; 
try {//开启事务tx=session.beginTransaction();//根据页码计算要传入的参数int firstResult=(pageCode-1)*pageCount;//生成分页对象
pageBean=new PageBean<User>();List<User> list=session.createQuery("from User").setFirstResult(firstResult).setMaxResults(pageCount).list();//查询所有//查询总页数Long count=(Long) session.createQuery("select count(*) from User").uniqueResult();//设置内容pageBean.setCount(count.intValue());pageBean.setPageList(list);tx.commit();//提交事务} catch (Exception e) {tx.rollback();throw e;}finally{if(session!=null)session.close();//关闭连接}
 
 
                           <pre code_snippet_id="1629549" snippet_file_name="blog_20160330_4_7417432" name="code" class="html" style="font-size: 13.3333px;">                         return pageBean;
}}
 
 
4:创建测试类,UserDaoTest,这个可以用eclipse自动生成,具体的测试步骤还需要自己写:

package com.leige.dao;

import static org.junit.Assert.fail;

import java.util.Date;

import org.junit.Test;

import com.leige.domain.User;
//测试方法
public class UserDaoTest {
	UserDao dao=new UserDao();

	@Test
	public void testAdd() {
		
		User user=null;
		for(int i=5;i<23;i++){
				user=new User();
		user.setBirthday(new Date());
		user.setId(i);
		user.setName("leige"+i);
		dao.add(user);
		}
	}

	@Test
	public void testDelete() {
	
		dao.delete(4);
	}

	@Test
	public void testGetById() {
		System.out.println(dao.getById(1));
	}

	@Test
	public void testUpdate() {
		User user=(User) dao.getById(0);
		user.setName("leigewudi");;
		dao.update(user);
	
	}

	@Test
	public void testFindAll() {
	for(User user:dao.findAll())
		System.out.println(user);
	}

	@Test
	public void testFindByPage() {
		PageBean<User> pageBean=dao.findByPage(3, 10);
		for(User user:pageBean.getPageList())
			System.out.println(user);
	}

}



你可能感兴趣的:(hibernate实现单个对象的增删改查,以及实现分页查询)