![9fcaf4b303db593f59ad8f6aee831a37.png](https://img-blog.csdnimg.cn/img_convert/9fcaf4b303db593f59ad8f6aee831a37.png)
训练大纲(第107天)
大家如果想快速有效的学习,思想核心是“以建立知识体系为核心”,具体方法是“守破离”。确保老师课堂上做的操作,反复练习直到熟练。
第213次(Hibernate)
学习主题:Hibernate
学习目标:
1 掌握Spring整合Hibernate
2 掌握Hibernate的CURD
3 掌握HQL语句
对应视频:
http://www.itbaizhan.cn/course/id/85.html
对应文档:
无
对应作业
1. Spring Data课程中的技术介绍
(1) 什么是Hibernate?
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将pojo与数据库表建立映射关系,是一个全自动的ORM框架,Hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库
(2) 什么是JPA?
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
(3) 什么是Hibernate JPA?
Hibernate在3.2以后根据JPA规范提供了一套操作持久层的JPA
(4) 什么是Spring Data?
SpringData是一个用于简化数据库访问,支持云服务的开源框架
Spring Data: Spring 的一个子项目。用于简化数据库访问,支持NoSQL和关系数据库存储。其主要目标是使数据库的访问变得方便快捷。
(5) 什么是Spring Data JPA?
Spring Data JPA 是 spring data 项目下的一个模块。提供了一套基于 JPA
标准操作数据库的简化方案。底层默认的是依赖 Hibernate JPA 来实现的。
(6) 什么是Spring Data Redis
Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。
2. Spring整合Hibernate
(1) 如何在Spring的配置文件中配置DataSource?
<!--配置读取properties文件的工具类-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--配置c3p0数据库连接池-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="driverClass" value="${jdbc.driver.class}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
(2) 如何在Spring的配置文件中配置SessionFactory?
<!--配置Hibernate的sessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!--hibernatePropeties属性:配置与hibernate相关的内容,如显示sql语句,开启正向工程-->
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!--扫描实体所在的包-->
<property name="packagesToScan">
<list>
<value>com.bjsxt.pojo</value>
</list>
</property>
</bean>
(3) 如何在Spring的配置文件中配置Hibernate的事物管理器?
<!--配置Hibernate的事务管理-->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
3. Hibernate添加、修改、删除操作
(1) @Entity注解的作用是什么?
对实体注解,声明这是实体类
(2) @Table注解的作用是什么?
声明映射到数据库的数据表
(3) @Id注解的作用是什么?
声明此属性为主键
(4) @GeneratedValue注解的作用是什么?
指定主键的生成策略
(5) @Column注解的作用是什么?
声明属性和数据库的映射关系
4. Hibernate-HQL查询
(1) 什么是HQL语言?
hql 是hibernate查询语言
(2) HQL语言的语法是什么?
就是将原来的 sql 语句中的表与字段名称换成对象与属性的名称就可以了
(3) getCurrentSession与openSession的区别?
getCurrentSession:当前 session 必须要有事务边界,且只能处理唯一 的一个事务。当事务提交或者回滚后 session 自动失效openSession:每次都会打开一个新的 session.加入每次使用多次。则获 得的是不同 session 对象。使用完毕后我们需要手动的调用 colse 方法关闭 session
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。
第214次(Hibernate)
学习主题:Hibernate
学习目标:
1 掌握在Hibernate中编写原生SQL语句
2 掌握在Hibernate中编写QBC
3 掌握Hibernate-JAP
对应视频:
http://www.itbaizhan.cn/course/id/85.html
对应文档:
无
对应作业
5. Hibernate-SQL查询
(1) 使用SQL查询方式,根据用户姓名查询用户。
@Override
public List<Users> selectUserBySQLUsername(String username) {
Session session = this.hibernateTemplate.getSessionFactory().getCurrentSession();
SQLQuery sqlQuery = session.createSQLQuery("select * from t_users where username=?").addEntity(Users.class);
Query query = sqlQuery.setString(0, username);
return query.list();
}
6. Hibernate-QBC查询
(1) 什么是QBC查询?
@Override
public List<Users> selectUsesByUsername(String username) {
//getCurrentSession:当前 session 必须要有事务边界,且只能处理唯一 的一个事务。当事务提交或者回滚后 session 自动失效
// openSession:每次都会打开一个新的 session.加入每次使用多次。则获 得的是不同 session 对象。使用完毕后我们需要手动的调用 colse 方法关闭 session
Session session = this.hibernateTemplate.getSessionFactory().getCurrentSession();
Query query = session.createQuery("from Users where username= :abc");//类对应表,属性对应字段
Query queryTemp = query.setString("abc", username);
return queryTemp.list();
}
7. hibernate-jpa环境搭建
(1) 什么是JPA?
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
(2) 什么是Hibernate JPA?
Hibernate在3.2以后根据JPA规范提供了一套操作持久层的JPA
(3) Spring在整合Hibernate JPA时需要添加什么jar包?
![f3053a85ac7bf223ae952378641872c2.png](https://img-blog.csdnimg.cn/img_convert/f3053a85ac7bf223ae952378641872c2.png)
(4) 如何配置EntityManagerFactory?
<!-- Spring整合JPA 配置EntityManagerFactory-->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<!-- hibernate相关的属性的注入 -->
<!-- 配置数据库类型 -->
<property name="database" value="MYSQL"/>
<!-- 正向工程 自动创建表 -->
<property name="generateDdl" value="true"/>
<!-- 显示执行的SQL -->
<property name="showSql" value="true"/>
</bean>
</property>
<!-- 扫描实体的包 -->
<property name="packagesToScan">
<list>
<value>com.bjsxt.pojo</value>
</list>
</property>
</bean>
8. hibernate-jpa中的CRUD操作
(1) @PersistenceContext注解的作用是什么?
注入的是实体管理器,执行持久化操作的
9. hiberante-jpa中的HQL语句
(1) 在Hibernate JAP中通过使用HQL方式,根据用户名查询用户信息。
return entityManager.createQuery(" from Users where username = :abc").setParameter("abc", username).getResultList();
10. hibernate-jpa中的SQL语句
(1) 在Hibernate JAP中通过使用SQL方式,根据用户名查询用户信息。
return this.entityManager.createNativeQuery("select * from t_users where username=?",Users.class).setParameter(1,username).getResultList();
11. hibernate-jpa中的Criteria操作
(1) 在Hibernate JAP中通过使用Criteria方式,根据用户名查询用户信息。
//CriteriaBuilder对象:创建一个CriteriaQuery,创建查询条件
CriteriaBuilder builder = this.entityManager.getCriteriaBuilder();
//CriteriaQuery对象:执行查询的对象 select * from t_users
CriteriaQuery<Users> query = builder.createQuery(Users.class);
//获取要查询的实体类的对象
Root<Users> root = query.from(Users.class);
//封装查询条件
Predicate username1 = builder.equal(root.get("username"), username);
query.where(username1);
//执行查询
TypedQuery<Users> query1 = this.entityManager.createQuery(query);
return query1.getResultList();
12. Spring整合SpringDataJpa
(1) 什么是Spring Data JPA?
Spring Data JPA 是 spring data 项目下的一个模块。提供了一套基于 JPA
标准操作数据库的简化方案。底层默认的是依赖 Hibernate JPA 来实现的。
(2) Spring Data JPA技术有哪些特点?
我们只需要定义接口并集成 Spring Data JPA 中所提供的接
口就可以了。不需要编写接口实现类。
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。