学习主题:Hibernate
学习目标:
1 掌握Spring整合Hibernate
2 掌握Hibernate的CURD
3 掌握HQL语句
对应视频:
http://www.itbaizhan.cn/course/id/85.html
对应文档:
无
对应作业
1. Spring Data课程中的技术介绍
(1) 什么是Hibernate?
对象关系映射:实现思想: 将关系数据库中表的数据映射成为对象,以对象的形式展现,
一个全自动化的ORM(对象关系映射框架)
(2) 什么是JPA?
即java Persistence API 规范
实现ORM思想的 (O/R映射)的标准规范
(3) 什么是Hibernate JPA?
Hibernate JPA 在遵循JPA基础上,
自身扩展的带有自身特色JPA - Hibernate JPA
(4) 什么是Spring Data?
Spring Data是一个用于简化数据库访问,并支持云服务的开源框架,其主要目标是使得数据库的访问变得方便快捷,并支持map-reduce框架和云计算数据服务,
(5) 什么是Spring Data JPA?
Spring Data是遵循了JPA规范的一个框架 ,而自身的实现带有自身特色就是spring Data JPA
(6) 什么是Spring Data Redis
Spring Data Redis 是spring大家族的一部分,提供了在spring应用中通过简单的配置访问redis服务 对开发包(Jedis,JRedis,and RJC)进行了高度封装,
RedisTemplate提供了redis各种操作,异常处理及序列化,支持发布订阅
2. Spring整合Hibernate
(1) 如何在Spring的配置文件中配置DataSource?
<!-- 配置 c3p0 数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="driverClass" value="${jdbc.driver}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
(2) 如何在Spring的配置文件中配置SessionFactory?
<!-- 配置 Hibernate 的 SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" /> <!-- hibernateProperties 属性:配置与 hibernate 相关的内容,如显示 sql 语句,开启正向工程 -->
<property name="hibernateProperties">
<props> <!-- 显示当前执行的 sql 语句 -->
<prop key="hibernate.show_sql">true</prop> <!-- 开启正向工程 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
(3) 如何在Spring的配置文件中配置Hibernate的事物管理器?
<!-- 配置 Hibernate 的事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
3. Hibernate添加、修改、删除操作
(1) @Entity注解的作用是什么?
声明该类为持久类,将一个javabean类生命为一个实体的数据库表映射类,最好实现序列化,此时,默认情况下,所有的类属性都为映射到数据表的持久化字段如果其中有属性不需要映射数据库 添加TranSient注解
(2) @Table注解的作用是什么?
@Table(name=”promotion_name”)
持久化映射的表(表名 promotion_name) 定义在@Entity下,为实体类bean映射表,目录和schema的名字,默认为实体bean的类名,不带包名
(3) @Id注解的作用是什么?
持久化映射的表的独特标识符(数据库中的主键)
(4) @GeneratedValue注解的作用是什么?
定义自动增长的主键的生成策略
(5) @Column注解的作用是什么?
持久化映射的属性字段
4. Hibernate-HQL查询
(1) 什么是HQL语言?
就是将原来的sql语句中的表和字段名称换成对象和属性的名称就可以了
(2) HQL语言的语法是什么?
(3) getCurrentSession与openSession的区别?
//getCurrentSession:当前session必须要有事务边界,且只能处理唯一的一个事务
//当事务提交或回滚后session自动失效
//openSession:每次都会打开一个新的session,加入每次使用多次,则获得的是不同的session对象
//使用完毕后我们需要手动的调用close方法关闭session
Session session = hibernateTemplate.getSessionFactory().getCurrentSession();
//sql: from t_users where username=
Query query = session.createQuery("from User where username= :a");
Query queryTemp = query.setString("a", username);
return queryTemp.list();
}
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。
第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<User> selectUserBynameSql(String username) {
Query session = hibernateTemplate.getSessionFactory().getCurrentSession().createSQLQuery("select * from t_user where username=?").addEntity(User.class).setString(0, username);
return session.list();
}
6. Hibernate-QBC查询
(1) 什么是QBC查询?
@Override
public List<Users> selectUserByNameUseCriteria(String username) {
Session session =
This.hibernateTemplate.getSessionFactory().getCurrentSession();
//sql:select * from t_users where username = 张三
Criteria c = session.createCriteria(Users.class);
c.add(Restrictions.eq("username", username));
return c.list();
}
7. hibernate-jpa环境搭建
(1) 什么是JPA?
由Sun公司提供了一对对于持久层操作的标准(接口+文档)
(2) 什么是Hibernate JPA?
是在Hibemate3.2版本那种提供了对于JPA的标准的实现,提供了一套按照JPA标准来实现持久层开发的API
(3) Spring在整合Hibernate JPA时需要添加什么jar包?
(4) 如何配置EntityManagerFactory?
<!-- spring整合实现了JPA规范的Hiberator -->
<!-- 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>
<!-- 配置 Hibernate 的事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
8. hibernate-jpa中的CRUD操作
(1) @PersistenceContext注解的作用是什么?
从工厂中实例化一个对象赋值
9. hiberante-jpa中的HQL语句
(1) 在Hibernate JAP中通过使用HQL方式,根据用户名查询用户信息。
@Override
public List<User> selectUserByname(String username) {
return this.entityManager.createQuery("from User where username=:abc").setParameter("abc", username).getResultList();
}
10. hibernate-jpa中的SQL语句
(1) 在Hibernate JAP中通过使用SQL方式,根据用户名查询用户信息。
@Override
public List<User> selectUserBynameSql(String username) {
/*
* 在Hibernate JPA中如果是通过?方式顶替参数,那么它的查数是从1开始的,而原生的Hiberator的查数是从0开始的
* */
return this.entityManager.createNativeQuery("select * from t_user where username=?",User.class).setParameter(1, username).getResultList();
}
11. hibernate-jpa中的Criteria操作
(1) 在Hibernate JAP中通过使用Criteria方式,根据用户名查询用户信息。
/*
* QBC查询
* */
@Override
public List<User> selectUserBynameCriteria(String username) {
//CriteriaBuilder对象,创建一个CriteriaQuery,创建查询条件
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
//CriteriaQuery对象:执行查询的Criteria对象
//select * from t_users
CriteriaQuery<User> query=builder.createQuery(User.class);
//获取要查询的实体类的对象
Root<User> root = query.from(User.class);
//封装查询条件 where username= zhangsan
Predicate cate = builder.equal(root.get("username"),username);
query.where(cate);
//执行查询
TypedQuery<User> typedQuery = entityManager.createQuery(query);
return typedQuery.getResultList();
}
12. Spring整合SpringDataJpa
(1) 什么是Spring Data JPA?
Spring Data JPA 是spring data项目下的一个模块.提供了一套基于JPA标准操作数据库的简化方案,底层默认的是依赖Hibernate JPA来实现的
(2) Spring Data JPA技术有哪些特点?
我们只需要定义接口并集成Spring Data JPA中提供的接口就可以了,不需要编写接口实现类
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。