小工具知识网

当前位置: 首页 > 行业知识 > 一文教会你如何在SpringBoot项目里集成Hibernate

行业知识

一文教会你如何在SpringBoot项目里集成Hibernate

2026-11-13 04:31:26 来源:互联网转载

前言

一个老项目中使用了Hibernate,是SpringMVC项目,要把定时任务拆出来,使用SpringBoot集成Hibernate,今天整理下集成的过程。

基础概念

什么是Hibernate

Hibernate是一个流行的ORM(对象关系映射)框架,它可以将Java对象映射到数据库表,从而方便地进行持久化操作。

在Spring Boot项目中,集成Hibernate可以帮助我们更轻松地进行数据库操作。

Hibernate 的主要功能

1.对象关系映射(ORM):Hibernate可以自动将Java类和对象映射到关系数据库中的表和行。

2.透明持久性:Hibernate可以自动管理对象的生命周期,并将其持久化到数据库中,从而使开发人员可以专注于业务逻辑,而不必担心对象的状态管理。

3.查询语言:Hibernate提供了一种基于面向对象的查询语言(HQL),使开发人员可以使用面向对象的方式来查询和操作数据库。

4.缓存管理:Hibernate提供了一个高效的缓存管理机制,可以提高应用程序的性能。

5.事务管理:Hibernate可以自动管理数据库事务,从而确保数据的完整性和一致性。

使用Hibernate的好处

1.简化数据访问层:Hibernate简化了数据访问层的开发,开发人员只需要关注业务逻辑,而不必编写繁琐的SQL语句。

2.提高开发效率:Hibernate可以自动生成数据库表和列,省去了手动创建和维护数据库表的麻烦。此外,Hibernate还提供了一种基于对象的查询语言,使得查询和操作数据变得更加简单。

3.提高可维护性:Hibernate使得应用程序的代码更加清晰、简单易懂,使得应用程序更加易于维护。

4.支持多种数据库:Hibernate可以很方便地支持多种关系数据库,包括MySQL、Oracle、Microsoft SQL Server等。

5.提高性能:Hibernate提供了一个缓存机制,可以提高应用程序的性能。此外,Hibernate还支持批量处理和延迟加载等优化技术,可以进一步提高应用程序的性能。

6.支持事务管理:Hibernate可以自动管理数据库事务,从而确保数据的完整性和一致性。开发人员可以专注于业务逻辑,而不必手动处理事务。

添加依赖

    org.springframework.boot    spring-boot-starter-data-jpa    org.hibernate.common    hibernate-commons-annotations    4.0.4.Final

使用SessionFactory

我们这个老项目中使用 SessionFactory,所以这里整合了SessionFactory 用作数据库增删改查。

配置文件
spring:  datasource:    driver-class-name: com.p6spy.engine.spy.P6SpyDriver    url: jdbc:p6spy:oracle:thin:@ip:1521:ORCL    username: test    password: test    hikari:      maximum-pool-size: 30  jpa:    database: oracle    hibernate:      hbm2ddl_auto: none      dialect: org.hibernate.dialect.OracleDialect      show_sql: false      format_sql: false      use_jdbc_metadata_defaults: false      default-schema: ${spring.datasource.username}
public class HibernateSessionConfig {    @Autowired    private HibernateConfig hibernateConfig;    @Autowired    @Bean("sessionFactory")    public LocalSessionFactoryBean getSessionFactory(DataSource dataSource) {        return buildLocalSessionFactory(dataSource);    }    /**     * 设置Hibernate的配置属性     * @return     */    private Properties getHibernateProperties(){        Properties hibernateProperties = new Properties();        hibernateProperties.put("hibernate.dialect",hibernateConfig.getDialect());        hibernateProperties.put("default_schema",hibernateConfig.getDefaultSchema());        hibernateProperties.put("hibernate.show_sql", hibernateConfig.getShowSql());        hibernateProperties.put("hibernate.format_sql", hibernateConfig.getFormatSql());        hibernateProperties.put("hibernate.hbm2ddl.auto", hibernateConfig.getHbm2ddlAuto());        hibernateProperties.put("hibernate.temp.use_jdbc_metadata_defaults", hibernateConfig.getUseJdbcMetadataDefaults());        return hibernateProperties;    }    /**     * 构建LocalSessionFactoryBean实例     * @param dataSource 构建实例所使用的的数据源     * @return     */    private LocalSessionFactoryBean buildLocalSessionFactory(DataSource dataSource){        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();        sessionFactory.setDataSource(dataSource);        sessionFactory.setPackagesToScan("org.teamartframework.*","jdly.water.*");        sessionFactory.setHibernateProperties(getHibernateProperties());        return sessionFactory;    }}
@ConfigurationProperties(        prefix = "spring.jpa.hibernate")@Component@Datapublic class HibernateConfig {    private String dialect;    private String showSql;    private String formatSql;    private String hbm2ddlAuto;    private String useJdbcMetadataDefaults;    private String defaultSchema;}
创建Dao层
@Repositorypublic class CommonDao{        @Autowired@Qualifier("sessionFactory")private SessionFactory sessionFactory;        public Session getSession() {        // 事务必须是开启的(Required),否则获取不到        return sessionFactory.getCurrentSession();}        /** * 根据传入的实体持久化对象 */public  Serializable save(T entity) {try {Serializable id = getSession().save(entity);getSession().flush();if (logger.isDebugEnabled()) {logger.debug("保存实体成功," + entity.getClass().getName());}return id;} catch (RuntimeException e) {logger.error("保存实体异常", e);throw e;}}        /** * 根据Id获取对象。 */public  T get(Class entityClass, final Serializable id) {return (T) getSession().get(entityClass, id);}        /** * 根据主键更新实体 */public  void updateEntityById(Class entityName, Serializable id) {updateEntitie(get(entityName, id));}        /** * 根据主键删除指定的实体 *  * @param  * @param pojo */public  void deleteEntityById(Class entityName, Serializable id) {delete(get(entityName, id));getSession().flush();}    /** * 执行自定义sql *  * @param  * @param pojo */    public List findToMapList(String sql) {        Query query = getSession().createSQLQuery(sql);        List  lst = new ArrayList();        try {            query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);            lst = query.list();        } catch (HibernateException e) {            e.printStackTrace();        } finally {        }        return lst; }          /** * 返回实体 * @param sql * @param clazz * @param param  * @return */public List find(String sql,Class clazz, Object... param){Query query = null;query = getSession().createSQLQuery(sql).addEntity(clazz); //返回实体类的方法if (param != null && param.length > 0) {for (int i = 0; i  

使用Repository访问数据库

依赖和上面引入的一样,这里就不在重复了。

配置数据源
server:  port: 8030spring:  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://ip:3306/test?useSSL=false&serverTimezone=UTC    username: root    password: root  jpa:    hibernate:      ddl-auto: none    database: mysql    database-platform: org.hibernate.dialect.MySQLDialect    show-sql: true

Spring.jpa.hibernate.ddl-auto属性指定了Hibernate如何自动生成数据库表,create-drop表示每次启动应用程序时都会创建表,并在关闭应用程序时删除表。

none表示不用更新。

创建实体类
@Entity@Table(name = "person")@Datapublic class Person {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Long id;    @Column(name = "name")    private String name;    @Column(name = "age")    private int age;}
创建Repository
@Repositorypublic interface PersonRepository extends JpaRepository {        @Query("select t from Person t where t.name like :name")    public List findUserByName(@Param("name") String name);}
业务类
@Servicepublic class PersonService {    @Autowired    private PersonRepository personRepository;    public void savePerson(Person person) {        personRepository.save(person);    }    public List getPersons() {        return personRepository.findAll();    }}
接口类
@RestControllerpublic class PersionController {    @Autowired    private PersonService personService;    @GetMapping("save")    public String save(){        Person person = new Person();        person.setName("zhangsan");        personService.savePerson(person);        return "hello world";    }    @GetMapping("get")    public List get(String name){        return personService.findUserByName(name);    }}

总结

我们已经成功地在Spring Boot项目中集成了Hibernate,并且可以使用它来方便地进行数据库操作。当然,在实际的项目中,可能需要进行更复杂的配置和操作,但这个示例应该可以让你快速入门。

上一篇:短信API,高效通信的秘诀,一键接入,轻松发送!

下一篇:如何玩转CSDN AI工具集