三 Spring整合Hibernate-Hibernate
程序员文章站
2022-04-14 21:36:53
...
本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);
}
上一篇: iOS进阶面试题
下一篇: 国内CSS 设计欣赏
推荐阅读
-
02Spring基于xml的IOC配置--实例化Bean的三种方式
-
Spring 学习指南 第三章 bean的配置 (未完结)
-
spring整合struts2过程详解
-
Spring-Data-JPA整合MySQL和配置的方法
-
Spring Boot整合WebSocket
-
微服务架构下使用Spring Cloud Zuul作为网关将多个微服务整合到一个Swagger服务上
-
spring MVC扩展和SSM整合
-
SSM(Spring+SpringMVC+Mybatis)框架整合
-
spring boot整合hessian的示例
-
spring cloud 入门系列八:使用spring cloud sleuth整合zipkin进行服务链路追踪