Java——框架-Hibernate

梁晋鹏
2023-12-01

Hibernate 初体验

1.导入框架(共12个包)

required文件夹下 所有的包

+ jpa-metamodel-generator文件夹下的包

+ mysql的驱动包

 2.创建Hibernate的主配置文件 

默认放到src

 文件名字 默认 hibernate.cfg.xml

 3.创建实体类(User)

建议:数据库字段名和对象的属性名 相同

4.创建与实体类 对应的 配置文件

命名规范:实体类名.bm.xml

作用:配置实体类 与 数据库 表的 映射关系

5.从主配置文件中 配置 映射文件的路径


使用junit测试

可以单独运行一个方法

只能public 无参 无反 修饰

@Test
	public void fun1() {
		// 1.读取主配置文件
		// 默认读取src下的 hibernate.cfg.xml文件
		Configuration configuration = new Configuration().configure();
		// 2.创建session工厂(管理一堆session)
		// 相当于数据库连接池
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		// 3.获取session工厂中 获取session对象
		// 获取一个全新的session对象
		Session session = sessionFactory.openSession();
		// 通过session操作数据库
		// 4.开启事务
		Transaction transaction = session.beginTransaction();

		// 5.向数据库插入一条数据(一条记录)
		User user = new User();
		user.setUsername("xiaofeng");
		user.setPassword("111");
		// 将对象写到数据库中
		session.save(user);
		// 6.提交事务
		transaction.commit();
		// 7.关闭资源
		session.close();
		sessionFactory.close();
	}


load方法与get方法的区别

get方法 只要改方法执行 就会产生sql语句

并查询数据库返回对象

load方法 懒加载方式进行查询

load方法 执行了 不会立即去查询数据库

而是 当你使用该查询结果时

才会去查询数据库

(如果这时候session释放了 会报错)

根据id查询

@Test
	public void fun2() {
		// Session.get(查询对象的.class,id);
		Configuration configuration = new Configuration().configure();
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();

		User user = session.get(User.class, 1);

		transaction.commit();
		// 7.关闭资源
		session.close();
		sessionFactory.close();

		System.out.println(user);
	}



@Test
	public void fun3() {
		Configuration configuration = new Configuration().configure();
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		// ---------------------
		// 使用load方法查询 按id查询
		User user = session.load(User.class, 1);

		// ---------------------
		transaction.commit();
		// 7.关闭资源
		session.close();
		sessionFactory.close();
		// 找不到session对象了 报错
		System.out.println(user);

	}
	

修改对象 根据id

@Test
	public void fun4() {
		Configuration configuration = new Configuration().configure();
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		// ---------------------
		// 修改对象 根据id
		// 根据这个对象 查询出来
		User user = session.get(User.class, 1);
		// 修改对象的值
		user.setUsername("xiao");
		// 同步到数据库
		session.update(user);

		// ---------------------
		transaction.commit();
		// 7.关闭资源
		session.close();
		sessionFactory.close();
		// 找不到session对象了 报错
		System.out.println(user);

	}

根据id 删除

@Test
	public void fun5() {
		Configuration configuration = new Configuration().configure();
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		// ---------------------
		// 根据id 删除
		
		User user = new User();
		user.setId(1);
		session.delete(user);

		// ---------------------
		transaction.commit();
		// 7.关闭资源
		session.close();
		sessionFactory.close();
		// 找不到session对象了 报错
		System.out.println(user);

	}

HQL语句查询 面向对象的查询方式

语句中写对象 都不是是实体类

或实体类中的属性

@Test
	public void fun6() {
		Configuration configuration = new Configuration().configure();
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		// ---------------------
		// 查询数据中的所有User对象
//		Query<User> query = session.createQuery("from com.lanou3g.User");
		Query<User> query = session. createQuery("from User", User.class);
		// 从查询的结果集去除数据 并且取出的是个集合
		List<User> list = query.list();
		for (User u : list) {
			System.out.println(u);
		}
		
		// ---------------------
		transaction.commit();
		// 7.关闭资源
		session.close();
		sessionFactory.close();
		
	}

使用原生sql语句查询

@Test
	public void fun7() {
		Configuration configuration = new Configuration().configure();
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		// ---------------------
		// 使用原生sql语句查询
		NativeQuery<Object[]> query = session.createNativeQuery("select * from user where username = ?");
		// 替换占位符
		// 参数1 占位符的索引 从1开始
		// 参数2 要替换的值
		query.setParameter(1, "xiaoyu");
		// 获取结果
		List<Object[]> list = query.list();
		for (Object[] objects : list) {
			for (Object object : objects) {
				System.out.print(object + "  ");
			}
			System.out.println();
		}
		
		// ---------------------
		transaction.commit();
		// 7.关闭资源
		session.close();
		sessionFactory.close();
		
	}





 类似资料: