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);
}
}