使用Hibernate设计通用接口实现对Java对象进行增查改删(CRUD)的工作

设计了一个学生表,实现简单的增删改查功能:

总体结构如下:
在这里插入图片描述

主要代码如下:

public class MyCRUD {
	public static void main(String[] args) {
		
		System.out.println("1.查询");
		System.out.println("2.新增");
		System.out.println("3.更新");
		System.out.println("4.删除");
//		System.out.println("5.关联映射");
		int n;
		Scanner cin = new Scanner(System.in);
		n= cin.nextInt();
		
		switch(n) {
		case 1:{
			System.out.println("输入学号");
			int c = cin.nextInt();
			SelectDao  select = new SelectDao();
			select.testSelect(c);
			break;
		}
		case 2:{
			System.out.println("输入姓名");
			String name = cin.next();
			System.out.println("输入年龄");
			int age = cin.nextInt();
			System.out.println("输入成绩");
			int score = cin.nextInt();
			Student stu = new Student(name,age,score);
			SaveDao save = new SaveDao();
			save.testSave(stu);
			break;
		}
		case 3:{
			System.out.println("输入学号");
			int c = cin.nextInt();
			System.out.println("输入新名字");
			String name = cin.next();
			UpdateDao update = new UpdateDao();
			update.testUpdate(c, name);
			break;
		}
		case 4:{
			System.out.println("输入学号");
			int c = cin.nextInt();
			DeleteDao delete = new DeleteDao();
			delete.testDel(c);
			break;
		}
		default:{
			System.out.println("输入错误");
		}}}

主要运行界面如下:
在这里插入图片描述
(1)查询功能:

public class SelectDao {
	//函数功能:通过id查找学生
	//函数参数:要查找记录的id
	//返回值:无
public void testSelect(int n_id){
			Configuration configure = new Configuration().configure().addClass(Student.class);
			
			ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configure.getProperties()).build();
			SessionFactory sessionFactory = configure.buildSessionFactory(serviceRegistry);
			Session session = sessionFactory.openSession();
			try{
				Transaction t = session.beginTransaction();
				//Student student = session.load(Student.class,n_id);
				Query query = session.createQuery("select s.name, s.age, s.score from Student s where s.id=?");
				query.setParameter(0, n_id);
				List<Object[]> ss = query.list();
				for(Object[] s: ss) {
					System.out.println("姓名是:"+s[0]);
					System.out.println("年龄是:"+s[1]);
					System.out.println("分数是:"+s[2]);
				}
				t.commit();
			}catch(Exception e){
				e.printStackTrace();
				session.getTransaction().markRollbackOnly();
			}finally {
				session.close();
				sessionFactory.close();
			}}}

在这里插入图片描述
(2)新增功能:

public class SaveDao {
//函数功能:将一个新对象保存
	//函数参数:保存的对象
	//返回值:无
	public void testSave(Student stu){
			Configuration configure = new Configuration().configure().addClass(Student.class);
			ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configure.getProperties()).build();
			SessionFactory sessionFactory = configure.buildSessionFactory(serviceRegistry);
			Session session = sessionFactory.openSession();
			try{
				Transaction t = session.beginTransaction();	
				session.save(stu);//持久态
				System.out.println("保存成功");
				t.commit();
			}catch(Exception e){
				e.printStackTrace();
	
				session.getTransaction().markRollbackOnly();
			}finally {
				session.close();
				sessionFactory.close();
			}}}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)更新功能:

public class UpdateDao {
//函数功能:通过id修改姓名
	//函数参数:arg0 要修改记录的id arg1 修改后的名字
	//返回值:无
	public void testUpdate(int n_id,String new_name){
		Configuration configure = new Configuration().configure().addClass(Student.class);
		ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configure.getProperties()).build();
		SessionFactory sessionFactory = configure.buildSessionFactory(serviceRegistry);
		Session session = sessionFactory.openSession();
		//Student student = new Student("Levi",18,100);//瞬时态
		try{
			Transaction t = session.beginTransaction();
			Student student = session.get(Student.class,n_id);
			student.setName(new_name);
			session.saveOrUpdate(student);//保存并更新
			t.commit();
			System.out.println("姓名更新成功");
		}catch(Exception e){
			e.printStackTrace();
	
			session.getTransaction().markRollbackOnly();
		}finally {
			session.close();
			sessionFactory.close();
		}}}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(4)删除功能:

public class DeleteDao {
	//函数功能:通过对象找到数据,并删除对应id的一条记录
	//函数参数:要删除的记录id
	//返回值:无
	public void testDel(int n_id){
			
		Configuration configure = new Configuration().configure().addClass(Student.class);
		
		ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configure.getProperties()).build();
		SessionFactory sessionFactory = configure.buildSessionFactory(serviceRegistry);
		Session session = sessionFactory.openSession();
		try{

			Transaction t = session.beginTransaction();
			
			Student student = session.get(Student.class, n_id);//持久态
			session.delete(student);
			
			t.commit();
			System.out.println("删除成功");
		}catch(Exception e){
			e.printStackTrace();
			session.getTransaction().markRollbackOnly();
		}finally {
			session.close();
			sessionFactory.close();
		}}}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结:

通过实验的学习,不仅学到了这些session缓存,以及各种方法,包括hql和sql的使用,更是学到了这种思想,包括线程绑定session,可以避免全局资源带来的多线程访问冲突,由对象去管理数据库,而我们操作完全可以不在涉及数据库,只需要操作对象就可以,既避免了SQL语句的编写错误,又解开了程序与数据库的耦合,达到了一个令人满意的效果,在实际编程中,可以借鉴这种思想。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值