原生JPA的Hibernate实现的5种常用查询

1. 根据id查询 find getReference

@Test
	public void test() {

		// 获取EntityManager
		EntityManager em = JpaUtil.createEntityManager();
		// 获取事务对象
		EntityTransaction tx = em.getTransaction();
		// 开启事务
		tx.begin();
		// 执行持久化操作
		Customer c = em.find(Customer.class, 1);
		System.out.println(c);
		// 提交事务
		tx.commit();
		// 关闭相关资源
		em.close();
	}

2.对象导航查询

	@Test
	public void test1() {

		// 获取EntityManager
		EntityManager em = JpaUtil.createEntityManager();
		// 获取事务对象
		EntityTransaction tx = em.getTransaction();
		// 开启事务
		tx.begin();
		// 执行持久化操作
		Customer c = em.find(Customer.class, 1);
		// 对象导航查询
		Set<LinkMan> linkMams = c.getLinkMams();
		System.out.println(linkMams);
		// 提交事务
		tx.commit();
		// 关闭相关资源
		em.close();
	}

3.JPQL查询(位置定位法与参数指定法)

@Test
	public void test2() {

		// 获取EntityManager
		EntityManager em = JpaUtil.createEntityManager();
		// 获取事务对象
		EntityTransaction tx = em.getTransaction();
		// 开启事务
		tx.begin();
		// 创建Query对象
		/**
		 * 查询所有
		 */
		// Query query = em.createQuery("select c from Customer c");
		/**
		 * 带条件查询
		 */
		// 位置指定法
		// Query query = em.createQuery("from Customer where custName = ? and
		// custAddress like ?");
		// query.setParameter(1, "客户1");
		// query.setParameter(2, "%1%");
		// :参数指定法
		Query query = em.createQuery("from Customer where custName = :custName and custAddress like :custAddress");
		query.setParameter("custName", "客户1");
		query.setParameter("custAddress", "%1%");
		List<Customer> list = query.getResultList();
		for (Customer l : list) {
			System.out.println(l);
		}
		// 提交事务
		tx.commit();
		// 关闭相关资源
		em.close();
	}

JPQL(分页查询)

	/**
	 * <p>
	 * Title: test3
	 * </p>
	 * <p>
	 * Description:JPQL(分页查询)
	 * </p>
	 * mysql limit 两个必填参数 起始页索引 每页显示条数 分页公式: 起始页索引 = (当前页 - 1)* 每页显示条数
	 */
	@Test
	public void test3() {

		// 获取EntityManager
		EntityManager em = JpaUtil.createEntityManager();
		// 获取事务对象
		EntityTransaction tx = em.getTransaction();
		// 开启事务
		tx.begin();
		// 创建Query对象
		Query query = em.createQuery("from Customer");
		// 添加分页参数
		query.setFirstResult(0);
		query.setMaxResults(2);
		List<Customer> list = query.getResultList();
		for (Customer l : list) {
			System.out.println(l);
		}
		// 提交事务
		tx.commit();
		// 关闭相关资源
		em.close();
	}

4.本地sql语句

	@Test
	public void test4() {

		// 获取EntityManager
		EntityManager em = JpaUtil.createEntityManager();
		// 获取事务对象
		EntityTransaction tx = em.getTransaction();
		// 开启事务
		tx.begin();
		// 创建查询对象 where cust_name = ? and cust_address like ?
		Query query = em.createNativeQuery("select * from cst_customer  where cust_name = ? and cust_address like ?",
				Customer.class);
		query.setParameter(1, "客户1");
		query.setParameter(2, "%1%");
		List<Customer> list = query.getResultList();
		for (Customer l : list) {
			System.out.println(l);
		}
		// 提交事务
		tx.commit();
		// 关闭相关资源
		em.close();
	}

5.QBC(完全摒弃sql语句)

	/**
	 * <p>
	 * Title: test5
	 * </p>
	 * <p>
	 * Description: QBC Query By Criteria
	 * </p>
	 * 完全摈弃SQL或者 JPQL 更加的面向对象
	 */
	@Test
	public void test5() {

		// 获取EntityManager
		EntityManager em = JpaUtil.createEntityManager();
		// 获取事务对象
		EntityTransaction tx = em.getTransaction();
		// 开启事务
		tx.begin();
		// 创建一个 CriteriaBuilder 构建器  它还给我们提供了拼接sql中的 运算方法
		CriteriaBuilder cb = em.getCriteriaBuilder();
		// 创建CriteriaQuery
		CriteriaQuery<Customer> cq = cb.createQuery(Customer.class);
		// 创建Root对象(我们以后操作任何实体类都可以看作是Root类型)
		Root<Customer> root = cq.from(Customer.class); // from Customer
		// 生成条件
		Predicate p = cb.and(cb.equal(root.get("custName"), "客户1"),
				cb.like(root.get("custAddress"), "%1%"));
		// 拼接条件where
		cq.where(p);
		// 创建Query对象
		Query query = em.createQuery(cq);
		List<Customer> list = query.getResultList();
		for (Customer l : list) {
			System.out.println(l);
		}
		// 提交事务
		tx.commit();
		// 关闭相关资源
		em.close();
	}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值