Hibernate的基本CRUD

48 篇文章 0 订阅
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>






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值