三 Spring整合Hibernate-Hibernate

本Spring Data系列的内容均是根据 百战程序员关于Sping Data视频 编写而成。

一 HQL查询

HQL:HIbernate Query Language

HQL的语法:就是将原来的sql语句中的表与字段名称换成对象与属性的名称。

1.1 在UsersDao中添加如下代码

List<Users> selectUsersByUserName(String userName);

1.2 在UsersDaoImpl中添加如下代码

	public List<Users> selectUsersByUserName(String userName) {
		/**
		 * sessionFactory.getCurrentSession():当前session必须要有事务边界(查询也必须有事务),且还能处理唯一的一个事务,当事务提交或者回滚后session自动失效
		 * sessionFactory.openSession():每次都会打开一个新的session,加入每次使用多次,则获得的是不同的session对象,使用完毕后我们需要调用close手动的关闭session
		 */
		SessionFactory sessionFactory = this.hibernateTemplate.getSessionFactory();
		Session session = sessionFactory.getCurrentSession();
		Query query = session.createQuery("from Users where userName=:userName");
		query.setString("userName", userName);
		return query.list();
	}

1.3 在UsersDaoImplTest中添加如下代码

	/**
	 * 没加事务注解执行会异常:
	 * org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
	 * 加上@Transactional事务注解后的执行结果:
		Hibernate: select users0_.id as id1_0_, users0_.age as age2_0_, users0_.user_name as user_nam3_0_ from ts_users users0_ where users0_.user_name=?
		[Users(id=5, userName=路飞-海贼王, age=28)]
	 */
	@Test
	@Transactional
	public void testSelectUsersByUserName() {
		List<Users> list = this.userDao.selectUsersByUserName("路飞-海贼王");
		System.out.println(list);
	}

二 SQL查询

2.1 在UsersDao添加如下代码

List<Users> selectUsersByUserNameSQL(String userName);

2.2 在UsersDaoImpl添加如下代码

	public List<Users> selectUsersByUserNameSQL(String userName) {
		SessionFactory sessionFactory = this.hibernateTemplate.getSessionFactory();
		Session session = sessionFactory.getCurrentSession();
		SQLQuery query = session.createSQLQuery("select * from ts_users where user_name=?");
		query.addEntity(Users.class);
		query.setString(0, userName);
		return query.list();
	}

2.3 在UsersDaoImplTest添加如下代码

	/**
	 * 执行结果:
		Hibernate: select * from ts_users where user_name=?
		[Users(id=5, userName=路飞-海贼王, age=28)]
	 */
	@Test
	@Transactional
	public void testSelectUsersByUserNameSQL() {
		List<Users> list = this.userDao.selectUsersByUserNameSQL("路飞-海贼王");
		System.out.println(list);
	}

三 QBC查询

QBC:Query By Criteria

3.1 在UsersDao添加如下代码

	List<Users> selectUsersByUserNameQBC(String userName);

3.2 在UsersDaoImpl添加如下代码

	public List<Users> selectUsersByUserNameQBC(String userName) {
		SessionFactory sessionFactory = this.hibernateTemplate.getSessionFactory();
		Session session = sessionFactory.getCurrentSession();
		Criteria criteria = session.createCriteria(Users.class);
		criteria.add(Restrictions.eq("userName", userName));
		return criteria.list();
	}

3.3 在UsersDaoImplTest添加如下代码

	/**
	 * 执行结果:
		Hibernate: select this_.id as id1_0_0_, this_.age as age2_0_0_, this_.user_name as user_nam3_0_0_ from ts_users this_ where this_.user_name=?
		[Users(id=5, userName=路飞-海贼王, age=28)]
	 */
	@Test
	@Transactional
	public void testSelectUsersByUserNameQBC() {
		List<Users> list = this.userDao.selectUsersByUserNameQBC("路飞-海贼王");
		System.out.println(list);
	}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值