Hibernate的基本CRUD

xiaoxiao2021-02-28  135

package cn.itcast.b_dao; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Transaction; import cn.itcast.a_helloworld.User; public class UserDao { /** * 保存 * * @param user * 用户 */ public void save(User user) { Session session = HibernateUtils.opensession(); Transaction tx = null; try { tx = session.beginTransaction();// 开始事务 // 保存 session.save(user); tx.commit();// 提交事务 } catch (RuntimeException e) { tx.rollback();// 回滚事务 throw e; } finally { session.close();// 释放资源 } } /** * 更新 * * @param user * 用户 */ public void update(User user) { Session session = HibernateUtils.opensession(); Transaction tx = null; try { tx = session.beginTransaction(); // 操作 session.update(user); tx.commit();// 提交事务 } catch (RuntimeException e) { tx.rollback();// 回棍事务 throw e; } finally { session.close();// 释放资源 } } /** * 删除 * * @param id * 根据id删除数据 */ public void delete(Integer id) { Session session = HibernateUtils.opensession(); Transaction tx = null; try { tx = session.beginTransaction(); // 操作 Object user = session.get(User.class, id);// 要先获取到这个对象 session.delete(user);// 删除的是实体对象 tx.commit();// 提交事务 } catch (RuntimeException e) { tx.rollback();// 回滚事务 throw e; } finally { session.close();// 释放资源 } } /** * 根据id查询一个User数据 * * @param id * 根据id查询数据 * @return 返回一条User数据 */ public User getById(Integer id) { Session session = HibernateUtils.opensession(); Transaction tx = null; try { tx = session.beginTransaction();// 打开事务 // 操作 User user = (User) session.get(User.class, id); tx.commit();// 提交事务 return user; } catch (RuntimeException e) { tx.rollback();// 回滚事务 throw e; } finally { session.close();// 释放资源; } } /** * 查询所有用户 * * @return 返回所有用户 */ @SuppressWarnings("unchecked") public List<User> findAll() { Session session = HibernateUtils.opensession(); Transaction tx = null; try { tx = session.beginTransaction();// 开始事务 // 方式一: 使用HQL查询 // List<User> list = session.createQuery(// // "FROM User WHERE id=5 order by id")// // .list(); // 方式二:使用Criteria查询 Criteria criteria = session.createCriteria(User.class); // criteria.add(Restrictions.eq("id", 5)); // criteria.addOrder(Order.desc("id")); List<User> list = criteria.list(); tx.commit();// 提交事务 return list; } catch (RuntimeException e) { tx.rollback(); // session.getTransaction().rollback();// 回滚事务 throw e; } finally { session.close();// 释放资源 } } /** * * 分页的查询数据列表 * * @param firstResult * 从结果列表中那个索引开始取数据 * @param maxResult * 最多取多少条数据 * @return 一页的数据列表 + 总计录数 */ /** * @param firstResult * @param maxResult * @return */ @SuppressWarnings("unchecked") public QueryResult findAll(Integer firstResult, Integer maxResult) { Session session = HibernateUtils.opensession(); Transaction tx = null; try { tx = session.beginTransaction();// 开始事务 // 查询一页的数据列表 // 方式1 // Query query = session.createQuery("FROM User"); // query.setFirstResult(firstResult); // query.setMaxResults(maxResult); // List<User> list = query.list();// 操作 // 方式2 List<User> list = session.createQuery(// "FROM User")// .setFirstResult(firstResult)// .setMaxResults(maxResult)// .list(); // 查询总记录数 Long count = (Long) session.createQuery(// "SELECT COUNT(*) FROM User")// .uniqueResult(); tx.commit();// 提交事务 // 返回结果 return new QueryResult(count.intValue(), list); } catch (RuntimeException e) { tx.rollback();// 回滚事务 throw e; } finally { session.close();// 释放资源 } } }

package cn.itcast.b_dao; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.classic.Session; public class HibernateUtils { // SessionFactory全局只需要一个就行了 private static SessionFactory sessionFactory; static { // Configuration cfg = new Configuration(); // cfg.configure();// 读取默认配置文件(hibernate.cfg.xml) // // cfg.configure("hibernate.cfg.xml");//读取指定位置的配置文件 // sessionFactory = cfg.buildSessionFactory();//生成会话工厂 //初始化SessionFactory sessionFactory = new Configuration()// .configure()// .buildSessionFactory(); } /** * 获取全局唯一的SessionFactory * * @return 返回SessionFactory */ public static SessionFactory getSessionFactory() { return sessionFactory; } /** * 从全局唯一的SessionFactory中打开一个Session * * @return 返回Session */ public static Session opensession() { return sessionFactory.openSession(); } } package cn.itcast.b_dao; import java.util.List; /** * 查询结果分页 * * @author 风清杨 * @version V1.0 */ @SuppressWarnings("rawtypes") 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; } } User.hbm.xml

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- 导入包 --> <hibernate-mapping package="cn.itcast.a_helloworld"> <!-- 类名 --> <class name="User" table="t_user"> <!-- id int类型 --> <id name="id" type="int" column="id"> <!-- 自增长 --> <generator class="native"/> </id> <property name="name" type="string" column="name"/> </class> </hibernate-mapping>

Hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory name="foo"> <!-- 配置数据库信息 --> <!-- 方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- mysql连接配置 --> <property name="connection.url">jdbc:mysql://localhost:3306/hibernate_20170423</property> <!-- 配置连接mysql驱动 --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- mysql用户名 --> <property name="connection.username">root</property> <!-- mysql密码 --> <property name="hibernate.connection.password">root</property> <!-- 其它配置 --> <!-- 显示生成的SQL语句 --> <property name="hibernate.show_sql">true</property> <!-- 格式化SQL语 --> <property name="hibernate.format_sql">false</property> <!-- create:先删除,再创建。 update:如果表不存在就创建,不一样就更新,一样就什么都不做。 create-dorp:初始化时创建表,SessionFactory执行close()时删除表。 validate:验证表结构是否一致,如果不一致,就抛异常。 --> <property name="hbm2ddl.auto">update</property> <!-- 导入映射文件 --> <mapping resource="cn/itcast/c_hbm_property/User.hbm.xml" /> </session-factory> </hibernate-configuration>

转载请注明原文地址: https://www.6miu.com/read-22329.html

最新回复(0)