spring结合hibernate示例详解

Spring与Hibernate整合示例详解

简介

在实际开发中,使用Spring和Hibernate框架的组合是比较常见的,这样可以提高开发效率,降低代码耦合度,同时也能够保证数据访问效率。

本文将详细讲解Spring和Hibernate框架的整合过程和使用方法,并且提供两个实例来演示该过程,其中一个是基于XML配置方式,另一个是基于注解配置方式。在学习本文之前,建议先掌握Spring和Hibernate框架的基础知识。

基于XML配置的示例

1、搭建项目环境

首先我们需要创建一个Maven项目,所需依赖如下:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.9</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.9</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>5.3.9</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.5.7.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.5.7.Final</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.26</version>
    </dependency>
</dependencies>

2、创建实体类

在src/main/java目录下创建一个实体类User,代码如下:

public class User {

    private Integer id;

    private String name;

    private String password;

    // getter和setter方法省略

}

3、配置Hibernate

在src/main/resources目录下创建一个hibernate.cfg.xml文件,并添加如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC 
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test?characterEncoding=utf8&amp;serverTimezone=Asia/Shanghai</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">password</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <mapping class="com.example.demo.entity.User"/>
    </session-factory>
</hibernate-configuration>

4、配置Spring

在src/main/resources目录下创建一个applicationContext.xml文件,并添加如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans.xsd 
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd">

    <context:component-scan base-package="com.example.demo"/>

    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf8&amp;serverTimezone=Asia/Shanghai"/>
        <property name="username" value="root"/>
        <property name="password" value="password"/>
    </bean>

    <bean id="sessionFactory" 
          class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
        <property name="packagesToScan" value="com.example.demo.entity"/>
    </bean>

    <bean id="transactionManager" 
          class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>

</beans>

5、创建DAO

在src/main/java目录下创建一个DAO接口UserDao和其实现类UserDaoImpl,代码如下:

public interface UserDao {

    void save(User user);

    List<User> findAll();

}
@Repository
public class UserDaoImpl implements UserDao {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    @Transactional
    public void save(User user) {
        sessionFactory.getCurrentSession().save(user);
    }

    @Override
    @Transactional(readOnly = true)
    public List<User> findAll() {
        return sessionFactory.getCurrentSession().createQuery("from User").list();
    }

}

6、测试

在src/test/java目录下创建一个测试类UserServiceTest,代码如下:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class UserServiceTest {

    @Autowired
    private UserDao userDao;

    @Test
    public void testSave() {
        User user1 = new User();
        user1.setName("test1");
        user1.setPassword("123456");

        User user2 = new User();
        user2.setName("test2");
        user2.setPassword("123456");

        userDao.save(user1);
        userDao.save(user2);
    }

    @Test
    public void testFindAll() {
        List<User> userList = userDao.findAll();
        for (User user : userList) {
            System.out.println(user);
        }
    }

}

执行测试类中的两个方法,可以看到数据成功写入数据库,并且查询结果成功返回。

基于注解配置的示例

1、搭建项目环境

同样需要创建一个Maven项目,并添加与基于XML配置的示例中相同的依赖。

2、创建实体类

同样需要创建一个实体类User,代码如下:

@Entity
@Table(name = "user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @Column(name = "name")
    private String name;

    @Column(name = "password")
    private String password;

    // getter和setter方法省略

}

3、配置Hibernate

在src/main/resources目录下创建一个hibernate.properties文件,并添加如下配置:

hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=update

4、配置Spring

在src/main/resources目录下创建一个applicationContext.xml文件,并添加如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans.xsd 
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd">

    <context:component-scan base-package="com.example.demo"/>

    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf8&amp;serverTimezone=Asia/Shanghai"/>
        <property name="username" value="root"/>
        <property name="password" value="password"/>
    </bean>

    <bean id="sessionFactory" 
          class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="hibernateProperties" ref="hibernateProperties"/>
        <property name="packagesToScan" value="com.example.demo.entity"/>
    </bean>

    <bean id="transactionManager" 
          class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>

    <bean id="hibernateProperties" 
          class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <list>
                <value>classpath:hibernate.properties</value>
            </list>
        </property>
    </bean>

</beans>

5、创建DAO

需要创建一个DAO接口UserDao和其实现类UserDaoImpl,并添加注解以支持声明式事务,代码如下:

public interface UserDao {

    void save(User user);

    List<User> findAll();

}
@Repository
@Transactional
public class UserDaoImpl implements UserDao {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public void save(User user) {
        sessionFactory.getCurrentSession().save(user);
    }

    @Override
    @Transactional(readOnly = true)
    public List<User> findAll() {
        return sessionFactory.getCurrentSession().createQuery("from User").list();
    }

}

6、测试

在src/test/java目录下创建一个测试类UserServiceTest,代码如下:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
@Transactional
public class UserServiceTest {

    @Autowired
    private UserDao userDao;

    @Test
    public void testSave() {
        User user1 = new User();
        user1.setName("test1");
        user1.setPassword("123456");

        User user2 = new User();
        user2.setName("test2");
        user2.setPassword("123456");

        userDao.save(user1);
        userDao.save(user2);
    }

    @Test
    public void testFindAll() {
        List<User> userList = userDao.findAll();
        for (User user : userList) {
            System.out.println(user);
        }
    }

}

执行测试类中的两个方法,可以看到数据成功写入数据库,并且查询结果成功返回。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring结合hibernate示例详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java Validation Api实现原理解析

    Java Validation API 实现原理解析 简介 Java Validation API 是用于数据验证的标准 Java Bean 验证框架。该框架的目的是通过注释处理器来实现强类型的数据验证,以使编写验证代码变得简单易懂,同时保证数据验证的正确性和可维护性。 原理 Java Validation API 的实现原理主要包括以下几个方面: 注释处理…

    Java 2023年5月20日
    00
  • Java SpringBoot核心源码详解

    Java SpringBoot核心源码详解攻略 什么是SpringBoot SpringBoot是基于Spring Framework的快速构建容易维护的Web项目的框架。它的设计理念是提供开箱即用的功能,减少开发者的配置工作。 SpringBoot的核心源码 SpringBoot的启动流程 SpringBoot的启动过程基于Spring Framework…

    Java 2023年5月19日
    00
  • SpringBoot实现统一封装返回前端结果集的示例代码

    下面我来详细讲解如何实现SpringBoot的统一封装返回前端结果集的示例代码的完整攻略。 1. 为什么需要统一封装返回结果集 在我们使用SpringBoot开发Web应用时,通常经常会用到Controller来处理请求。Controller的主要作用是接收请求,处理业务逻辑,然后将结果返回给前端。通常情况下,我们在Controller方法中使用如下方式处理…

    Java 2023年5月26日
    00
  • Java8 将List转换为用逗号隔开的字符串的多种方法

    让我来详细讲解一下Java8将List转换为用逗号隔开的字符串的多种方法。 方法一:使用String.join()方法 使用String.join()方法是将List转换为用逗号隔开的字符串最为简单的方法之一。该方法java8中引入,允许我们将字符串列表连接起来,用指定的分隔符分隔。 示例代码如下: List<String> list = Arr…

    Java 2023年5月20日
    00
  • 你肯定能看懂的Java IO相关知识总结

    下面是详细的总结攻略。 Java IO 简介 Java IO(输入/输出) 是非常重要的一部分,在日常开发中我们经常需要读取文件或者网络数据。Java IO 可以帮助我们进行文件的读写、网络通讯等操作。我们可以通过 File、InputStream、OutputStream、Reader、Writer 等类来对IO进行操作。 Java IO 相关知识总结 下…

    Java 2023年5月19日
    00
  • Java中SSM框架实现增删改查功能代码详解

    让我来详细讲解Java中SSM框架实现增删改查功能代码的攻略,包括以下几个部分: SSM框架简介 数据库建表和配置文件 DAO层代码示例 Service层代码示例 Controller层代码示例 1. SSM框架简介 SSM框架是指Spring+SpringMVC+MyBatis三个框架的整合,三个框架各自担任不同角色,共同完成项目的开发。其中,Spring…

    Java 2023年5月19日
    00
  • Java创建子线程的两种方法

    当我们需要在Java程序中创建一个新的线程时,我们有两种主要的方式。 方法一:通过继承Thread类创建线程 创建一个继承自Thread类的新类。 public class MyThread extends Thread { @Override public void run() { // 新线程执行的代码 } } 在该类中重写run()方法,将需要新线程执…

    Java 2023年5月18日
    00
  • Spring Boot 整合持久层之Spring Data JPA

    下面我将为你详细讲解“Spring Boot 整合持久层之Spring Data JPA”的完整攻略,并提供两个示例。 Spring Boot 整合持久层之Spring Data JPA 什么是Spring Data JPA? Spring Data JPA 是Spring框架提供的一种基于 JPA 规范的持久化框架,它通过简化持久层的开发,让开发人员更专注…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部