Hibernate(二)实现数据库的基本操作及相关api

来源:互联网 发布:女人之间的嫉妒知乎 编辑:程序博客网 时间:2024/05/19 19:12

配置过程省略。

数据库连接的公共类HibernateUtils.java

package test.hibernate.dao;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class HibernateUtils {private static SessionFactory sessionFactory;static {// Configuration configuration=new Configuration();// configuration.configure();//读取默认的文件hibernate.cfg.xml// // configuration.configure("hibernate.cfg.xml");读取指定文件// sessionFactory=configuration.buildSessionFactory();sessionFactory = new Configuration()//.configure()//.buildSessionFactory();}/* * 获得一个全局唯一的SessionFactory *  * @return */public static SessionFactory getSessionFactory() {return sessionFactory;}/* * 从全局SessionFactory中打开一个Session */public static Session openSession() {return sessionFactory.openSession();}public static void setSessionFactory(SessionFactory sessionFactory) {HibernateUtils.sessionFactory = sessionFactory;}}

QueryResult.java

package test.hibernate.dao;import java.util.List;public class QueryResult {private int count;private List list;public QueryResult(int count, List list) {this.count = count;this.list = list;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}public List getList() {return list;}public void setList(List list) {this.list = list;}}
业务实现类UserDao.java
package test.hibernate.dao;import java.util.List;import org.hibernate.Criteria;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import org.hibernate.criterion.Order;import org.hibernate.criterion.Restrictions;import test.hibernate.domain.User;/** * @author LinDL *  */public class UserDao {public void save(User user) {Session session = HibernateUtils.openSession();Transaction transaction = null;try {transaction = session.beginTransaction();session.save(user);transaction.commit();} catch (RuntimeException e) {// TODO: handle exceptiontransaction.rollback();throw e;} finally {}session.close();}public void update(User user) {Session session = HibernateUtils.openSession();Transaction transaction = null;try {transaction = session.beginTransaction();session.update(user);transaction.commit();} catch (RuntimeException e) {// TODO: handle exceptiontransaction.rollback();throw e;} finally {}session.close();}public void delete(int id) {Session session = HibernateUtils.openSession();Transaction transaction = null;try {transaction = session.beginTransaction();User user = (User) session.get(User.class, id);// 要先获取到实体对象session.delete(user);// 删除的是实体对象transaction.commit();} catch (RuntimeException e) {// TODO: handle exceptiontransaction.rollback();throw e;} finally {}session.close();}/** * @param id * @return */public User getById(int id) {Session session = HibernateUtils.openSession();Transaction transaction = null;try {transaction = session.beginTransaction();User user = (User) session.get(User.class, id);transaction.commit();return user;} catch (RuntimeException e) {// TODO: handle exceptiontransaction.rollback();throw e;} finally {session.close();}}/** * @return */public List<User> findAll() {Session session = HibernateUtils.openSession();Transaction transaction = null;try {transaction = session.beginTransaction();// 使用HQL查询// List<User> all = session.createQuery("from User").list();// 使用面向对象的方式查询Criteria criteria = session.createCriteria(User.class);// criteria.add(Restrictions.eq("id", 5));// 添加限制条件,查询id等于5的记录// criteria.add(Restrictions.ge("id", 6));//// 查询id大于等于6的记录,lt表小于,le表小于等于// criteria.addOrder(Order.asc("id"));// 添加排序条件List<User> all = criteria.list();transaction.commit();return all;} catch (RuntimeException e) {// TODO: handle exceptiontransaction.rollback();throw e;} finally {session.close();}}/** * @param firstResult * @param maxResult * @return */@SuppressWarnings("unchecked")public QueryResult findAll(int firstResult, int maxResult) {Session session = HibernateUtils.openSession();Transaction transaction = null;try {transaction = session.beginTransaction();// 使用HQL查询// Query query = (Query) session.createQuery("from User");// query.setFirstResult(firstResult);// query.setMaxResults(maxResult);// List<User> all = query.list();List<User> all = session.createQuery("from User").setFirstResult(firstResult)//.setMaxResults(maxResult)//.list();// 查询总记录数Long count = (Long) session.createQuery("select count(*) from User").uniqueResult();transaction.commit();return new QueryResult(count.intValue(), all);} catch (RuntimeException e) {// TODO: handle exceptiontransaction.rollback();throw e;} finally {session.close();}}}
测试类

package test.hibernate.dao;import static org.junit.Assert.*;import java.util.List;import org.junit.After;import org.junit.Before;import org.junit.Test;import test.hibernate.domain.User;public class UserDaoTest {UserDao userDao = new UserDao();@Testpublic void testSave() {User user = new User();// user.setName("张三");// userDao.save(user);for (int i = 1; i < 30; i++) {user.setId(i);user.setName("test" + i);userDao.save(user);}}@Testpublic void testUpdate() {User user = userDao.getById(2);user.setName("历史");userDao.update(user);}@Testpublic void testDelete() {userDao.delete(2);}@Testpublic void testGetById() {User user = userDao.getById(1);System.out.println(user);}@Testpublic void testFindAll() {List<User> list = userDao.findAll();for (User user : list) {System.out.println(user);}}@Testpublic void testFindAllIntInt() {// QueryResult queryResult = userDao.findAll(0, 10);// QueryResult queryResult=userDao.findAll(10, 10);QueryResult queryResult = userDao.findAll(20, 10);System.out.println("总记录数" + queryResult.getCount());for (Object user : queryResult.getList()) {System.out.println(user);}}}

Configuration 配置
configure()
configure(String resource)
addResource(String resource)导入一个指定位置的映射文件
addClass(Class clazz)导入与指定类同一个包中的以类名为前缀,后缀为.hbm.xml的映射文件
buildSessionFactory()

SessionFactory Session工厂
openSession()
getCurrentSession()
close()

Session 很重要的一个对象
操作对象的方法
save(Object)
update(Object)
delete(Object)
查询的方法
createQuery(String)--> Query
createCriteria(Class)
管理事务的方法
beginTransaction() --> Transaction
getTransaction()   --> Transaction获取当前Session中关联的事务对象
其他的方法
...

Transaction 事务
commit()
rollback()

Query 查询
list() 查询一个结果集合。
uniqueResult()查询一个唯一的结果,如果没有结果,则返回null,如果结果有多个,就抛异常。

...


原文出处:http://blog.csdn.net/lindonglian/article/details/46858451

0 0
原创粉丝点击