欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hibernate的增删改查CRUD

程序员文章站 2022-05-08 08:45:56
...

Hibernate的增删改查 CRUD

  步骤一:

  在进行Hibernate的任何操作之前我们必须要做的步骤。(以下步骤在Hibernate的第一个小例子中有详解)

  1.导包(这里需要导入9个基础包)。

  2.建立与数据库项对应的实体对象类Employee

  3.编写实体类相对应的映射文件Employee.hbm.xml(要与Employee在同一目录下)

  4.编写hibernate.cfg.xml主配置文件(在其中进行数据库连接的配置,以及映射文件的配置)

 

步骤二: 

 我们需要建立一个进行crud的接口类IEmployee,在其中写好crud方法。

  Hibernate的增删改查CRUD结构展示

Hibernate的增删改查CRUD



步骤三:

我们建立一个接口IEmployee 的实现类 接口类EmployeeDaoImpl ,在其中实现crud的具体操作。

package cn.itcast.b_crud;

import java.io.Serializable;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import cn.itcast.a_hello.Employee;
import cn.itcast.utils.HibernateUtils;

public class EmployeeDaoImpl implements IEmployeeDao{
    
	//进行添加操作
	@Override
	public void save(Employee employee) {
		Session session=null;
		Transaction tx=null;
		try {
			session=HibernateUtils.getSession();//获取Session
			tx=session.beginTransaction();//开启事务
			session.save(employee);
		} catch (Exception e) {
		   throw new RuntimeException(e);
		}finally{
			tx.commit();
			session.close();
		}
	}
   //进行删除操作
	@Override
	public void delete(Serializable id) {
		Session session=null;
		Transaction tx=null;
		try {
			session=HibernateUtils.getSession();//获取Session
			tx=session.beginTransaction();//开启事务
			Object obj=session.get(Employee.class, id); //主键查询
			if(obj!=null){
				session.delete(obj);
			}
			
		} catch (Exception e) {
		   throw new RuntimeException(e);
		}finally{
			tx.commit();
			session.close();
		}
	}
	 //进行修改操作
	@Override
	public void update(Employee employee) {
		Session session=null;
		Transaction tx=null;
		try {
			session=HibernateUtils.getSession();//获取Session
			tx=session.beginTransaction();//开启事务
			session.update(employee);
		} catch (Exception e) {
		   throw new RuntimeException(e);
		}finally{
			tx.commit();
			session.close();
		}
	}
	//进行查询操作(直接查询所有)
		@Override
		public List<Employee> getAll() {
			Session session=null;
			Transaction tx=null;
			try {
				session=HibernateUtils.getSession();//获取Session
				tx=session.beginTransaction();//开启事务
				//HQL查询(不支持*)
				Query q=session.createQuery("from Employee");
				return (List<Employee>)q.list();
			} catch (Exception e) {
			   throw new RuntimeException(e);
			}finally{
				tx.commit();
				session.close();
			}
		}
	//进行查询操作(通过传入employeeName进行查询)
	@Override
	public List<Employee> getAll(String employeeName) {
		Session session=null;
		Transaction tx=null;
		try {
			session=HibernateUtils.getSession();//获取Session
			tx=session.beginTransaction();
			//Query q=session.createSQLQuery("select * from employee where empName="+employeeName);
			 Query q=session.createQuery("from Employee where empName=?");//注意这里的Employee和empName都是实体类中的对象属性不是数据库中的
			 q.setParameter(0, employeeName);  //当不知道属性类型时就用setParameter()第二个参数是Object类型,参数索引从0开始
			 return (List<Employee>)q.list();  //执行查询
		} catch (Exception e) {
		   throw new RuntimeException(e);
		}finally{
			tx.commit();
			session.close();
		}
	}
	//进行分页查询操作(通过传入起始的位置,以及每页显示的对象数量)
	@Override
	public List<Employee> getAll(int index, int count) {
		// 分页查询
		Session session=null;
		Transaction tx=null;
		try {
			session=HibernateUtils.getSession();//获取Session
			tx=session.beginTransaction();
			Query q=session.createQuery("from Employee");//不能在里面直接写Limit因素HQL查询是全对象的,支持任何数据库,而limit是mysql专用的
			q.setFirstResult(index);//设置查询的起始行
			q.setMaxResults(count);//设置返回的行数
			List<Employee> list=q.list(); //执行查询
			 return list; 
		} catch (Exception e) {
		   throw new RuntimeException(e);
		}finally{
			tx.commit();
			session.close();
		}
		
	}

	 //进行查询操作(通过传入id进行查询)
	@Override
	public Employee findById(Serializable id) {
		Session session=null;
		Transaction tx=null;
		try {
			session=HibernateUtils.getSession();//获取Session
			tx=session.beginTransaction();//开启事务
			//主键查询
			
			return (Employee) (session.get(Employee.class, 1));
		} catch (Exception e) {
		   throw new RuntimeException(e);
		   //当你异常块中有返回值,却一直报错要你添加返回值时,只要在异常中抛出运行时异常即可解决。
		}finally{
			tx.commit();
			session.close();
		}
	}
}



步骤四:

我们建立一个测试类TestApp ,对我们写好的crud进行测试。

小贴士:我们进行测试类的编写可以直接创建一个JUnit类,具体操作如下。

Hibernate的增删改查CRUD


Hibernate的增删改查CRUD


言归正传,我们还进行测试类的编写~


package cn.itcast.b_crud;

import java.util.Date;
import java.util.List;

import org.junit.Test;

import cn.itcast.a_hello.Employee;

public class TestApp {

	private EmployeeDaoImpl empDao=new EmployeeDaoImpl();
	@Test
	public void testSave() {
		Employee emp=new Employee();
         emp.setEmpName("小哈");
         emp.setWorkDate(new Date());
		 empDao.save(emp);
	}

	@Test
	public void testUpdate() {
		Employee emp=new Employee();
		emp.setEmpId(2);
        emp.setEmpName("美美");
        emp.setWorkDate(new Date());//必须数据库中的字段值全设置
        empDao.update(emp);
		
	}

	@Test
	public void testFindById() {
		System.out.println(empDao.findById(1));
		
	}

		@Test
	public void testGetAll() {
		System.out.println(empDao.getAll());
	}

		@Test
	public void testGetAllString() {
		empDao.getAll("哈哈");
	}

		@Test
	public void testGetAllIntInt() {
		System.out.println(empDao.getAll(2, 3));
		//因为索引从0开始,索引2指代的是数据库中的id值为3对应的数据,从id3开始后面三条数据
	}

		@Test
	public void testDelete() {
		empDao.delete(4);
	}

}