Hibernate之实现数据库的基本操作

配置过程省略。

数据库连接的公共类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 exception
			transaction.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 exception
			transaction.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 exception
			transaction.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 exception
			transaction.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 exception
			transaction.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 exception
			transaction.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();

	@Test
	public 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);
		}
	}

	@Test
	public void testUpdate() {
		User user = userDao.getById(2);
		user.setName("历史");
		userDao.update(user);
	}

	@Test
	public void testDelete() {
		userDao.delete(2);
	}

	@Test
	public void testGetById() {
		User user = userDao.getById(1);
		System.out.println(user);
	}

	@Test
	public void testFindAll() {
		List<User> list = userDao.findAll();
		for (User user : list) {
			System.out.println(user);
		}
	}

	@Test
	public 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);
		}
	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。转载请注明出处http://blog.csdn.net/lindonglian

时间: 2024-10-05 15:12:14

Hibernate之实现数据库的基本操作的相关文章

对数据库的基本操作步骤

对数据库的基本操作步骤 + 面试题 MyBatis 最初的设计是基于 XML 配置文件的,但随着 Java 的发展(Java 1.5 开始引入注解)和 MyBatis 自身的迭代升级,终于在 MyBatis 3 之后就开始支持基于注解的开发了. 下面我们使用 Spring Boot + MyBatis 注解的方式,来实现对数据库的基本操作,具体实现步骤如下. MyBatis 注解版 1)创建数据表 drop table if exists `t\_user`; create table `t\_

TP框架对数据库的基本操作

数据库的操作,无疑就是连接数据库,然后对数据库中的表进行各种查询,然后就是对数据的增删改的操作,一步步的讲述一下框架对数据库的操作 想要操作数据库,第一步必然是要:链接数据库 一.链接数据库 (1)找到模块文件夹中的Conf文件夹,然后进行编写config.php文件 我这里是这样的文件路径 (2)打开这个config.php文件,然后找到父类配置文件convention.php文件,将关于"数据库"的部分复制粘贴到config.php配置文件中 1 2 3 4 5 6 7 8 9 /

hibernate 自动生成数据库表

只要在hibernate.cfg.xml添加这句话,就可以自动生成数据表 <property name="hibernate.hbm2ddl.auto">update</property> update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表:如果表里缺少列,则自动添加列. 还有其他的参数: create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失.

Hibernate自动生成数据库表

在hibernate.cfg.xml中添加: 引用 <properties> <property name="hibernate.hbm2ddl.auto" value="create" /> </properties> value的值可选项如下: 引用 validate  加载hibernate时,验证创建数据库表结构 create  每次加载hibernate,重新创建数据库表结构. create-drop  加载hibern

hibernate动态创建数据库表名几种方式

数据库中数据量很大, 但又不可以删除时同时又要优化程序检索数据时间. 答:方式有很多比如 创建数据库表分区,创建索引, 存储过程等; 我这里采用动态创建数据库表的方式. 完全可以在不创建表分区情况下实行分表管理 例如 日志记录表 将日期(yyyy-MM)作为默认表后缀动态追加, 例如 文章发布表 将用户名作为后缀名进行动态追加 ; 动态创建数据库表的方式要具体问题具体分析, 比如JDBC中直接使用create table 表名_dynamicStr(...); 文章发布系统 dynamicStr

通过Hibernate配置获取数据库表的具体信息

/** * 通过Hibernate配置获取数据库表的具体信息 * @author 晚风工作室 www.soservers.com * */ 标签: Hibernate [1].[代码] [Java]代码 跳至 [1] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 5

Linux下MYSQL数据库的基本操作

建立数据库: mysql> create database test; //建立一个名为"test"的数据库 建立数据库表: mysql> create table test -> (name char(16) not null, -> passwd char(16) ->); //建立一个名为"test"的表,里面有两个字段,一个字段名为"name",类型为char,大小为16,非空:另一个字段名为"pa

PHP对于数据库的基本操作——更新数据

PHP对于数据库的基本操作--更新数据 主要的语句:$update = mysql_query("update user set password='abc' where username='123'"); 这句话的意思是,更新user表,设置passWord字段的值为abc,筛选条件为username为123的数据.就是修改user表里面username为123字段里面的password,将password的值为abc. 前面的随笔里面忘了说  where 这个了,这个我理解为筛选,

android小功能实现之SQLite数据库的基本操作

 创建一个Android工程 一 新建数据库 1 新建一个类DBOpenHelper 内容如下: import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBOpenHelper extends SQLiteOpenHelper { public DBOpenHelpe