单县做网站,省 两学一做 专题网站,关键字优化,php购物网站开发背景如果你项目中一直用的是 Spring Boot#xff0c;那么恭喜你没有经历过用 Spring 手动集成其它框架的痛苦。
都说 Spring Boot 大大简化了 Spring 框架开发 Web 应用的难度#xff0c;这里我们通过配置 Hibernate 的两种方式来深刻体会这一点#xff1a;
使用 Spring 框架集…如果你项目中一直用的是 Spring Boot那么恭喜你没有经历过用 Spring 手动集成其它框架的痛苦。
都说 Spring Boot 大大简化了 Spring 框架开发 Web 应用的难度这里我们通过配置 Hibernate 的两种方式来深刻体会这一点
使用 Spring 框架集成 Hibernate 手动配置使用 Spring Boot 集成 Hibernate 自动配置 Hibernate 手动配置
我们先来看看手动配置 Hibernate 有多么麻烦。
第一步、引入JAP依赖
!-- JPA 的相关依赖 --
dependencygroupIdorg.springframework/groupIdartifactIdspring-orm/artifactIdversion6.1.4/version
/dependency
dependencygroupIdorg.springframework.data/groupIdartifactIdspring-data-jpa/artifactIdversion3.2.4/version
/dependency第二步、引入Hibernate依赖
!-- Hibernate作为JPA 实现 --
dependencygroupIdorg.hibernate/groupIdartifactIdhibernate-core/artifactIdversion5.4.30.Final/version
/dependency
dependencygroupIdorg.hibernate/groupIdartifactIdhibernate-entitymanager/artifactIdversion5.4.30.Final/version
/dependency第三步、引入数据库相关的依赖
!-- JDBC 驱动程序 --
dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.28/version
/dependency!-- 数据库连接池 --
dependencygroupIdcom.mchange/groupIdartifactIdc3p0/artifactIdversion0.10.0/version
/dependency这么多个包用哪些包用什么版本一般人谁记得住 更糟糕的是如果运气不好你还得花很多时间解决各个依赖之间的兼容问题 这还只是持久层的相关依赖如果还要集成其它框架工作量非常大 第四步、配置数据源
在applicationContext.xml 中配置各种bean。 首先要配置的是数据源
bean iddataSource classcom.mchange.v2.c3p0.ComboPooledDataSource destroy-methodcloseproperty namedriverClass valuecom.mysql.cj.jdbc.Driver/property namejdbcUrl valuejdbc:mysql://localhost:3306/test/property nameuser valueroot/property namepassword value123456/
/bean第五步、配置实体管理器
定义实体管理器的 bean并设置 JPA 实现类如 Hibernate、数据源等属性。 注意在早期的JPA版本中配置的是sessionFactory bean identityManagerFactory classorg.springframework.orm.jpa.LocalContainerEntityManagerFactoryBeanproperty namedataSource refdataSource /property namepackagesToScan valuecom.example.domain /property namejpaVendorAdapterbean classorg.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter //property
/bean第六步、配置事务管理器 bean idtransactionManager classorg.springframework.orm.jpa.JpaTransactionManagerproperty nameentityManagerFactory refentityManagerFactory/
/bean第七步、开启注解式事务
tx:annotation-driven transaction-managertransactionManager/第八步、编写持久层代码
到这里你终于把 JPA (Hibernate) 用Spring集成好了并且配置好了。 终于你可以开始动手写代码了。
Repository
public interface UserRepository extends JpaRepositoryUser, Long {
}Hibernate 自动配置
在前面我们经历千辛万苦终于用Spring 集成 Hibernate框架并且配置好了。好了接下来你还要集成 Web、集成 Spring Security等等你会不会暗暗叫苦呢
前面的手动配置存在很明显的缺陷
集成某个框架我们需要记住所有必要的依赖不然很容易抛出 NoSuchClassException 的异常。我们还需要谨慎使用相关依赖的版本不然很容易出现版本不兼容的情况。上面的依赖和xml配置是模块化的配置100个项目有99个基本一致。
还在Spring Boot 带来了自动配置的机制它帮我们悄悄的完成了绝大部分的工作。
下面我们看看通过Starter 和 自动配置集成和配置 Hibernate有多么的简易
第一步、引入starter-data-jpa
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId
/dependency第二步、引入数据库驱动
dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.28/version
/dependency第三步、配置数据库连接信息
在application.properties中配置数据库信息
spring.datasource.urljdbc:mysql://localhost:3306/test
spring.datasource.usernameroot
spring.datasource.password123456
spring.jpa.properties.hibernate.dialectorg.hibernate.dialect.MySQL8Dialect
spring.datasource.driver-class-namecom.mysql.jdbc.Driver到这里我们就完成了 Spring Boot 对 Hibernate的集成
看看我们做了什么
依赖中引入 starter-data-jpa 和 mysql驱动两个依赖只在主配置中配置了数据库账号密码等最基本信息
其它的事情全部有 starter 和 自动配置机制完成
对比
starter
我们引入了一个 starter 依赖基本完成所有的依赖的配置。 可以看到传递依赖会把必要的依赖都自动包含进来
自动配置
对于配置其实就更容易理解了其实我们在“手动配置”中做的事情都是必须的比如创建配置 DataSource、entityManagerFactory、transactionManager 这些bean 并注入到Spring 容器中。
只不过自动配置机制偷偷的帮我们做完了一切。
总结
通过手动配置和自动配置两种方式集成 一个框架我们可以强烈的感受到 Spring Boot的starter 和 自动配置机制的强大。
这对于我们专栏后面从原理和源码级别理解 starter 和 自动配置 机制是非常非常有帮助的欢迎大家点赞收藏后续的文章我们会更深层次的角度去学习这两个重点。