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 + "]"; } }
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(); } }
(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;//生成分页对象
<pre code_snippet_id="1629549" snippet_file_name="blog_20160330_4_7417432" name="code" class="html" style="font-size: 13.3333px;"> return pageBean;}}
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); } }