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日

相关文章

  • Spring使用xml方式整合第三方框架流程详解

    Spring框架是一个非常流行的Java框架,通过使用Spring框架,我们可以更加容易地开发和管理Java应用程序。它提供了各种功能和模块,使得我们可以使用各种第三方框架和库来构建复杂的应用程序。同时,Spring框架也提供了与第三方框架的整合工具,以简化整合流程。 本文将主要介绍如何使用Spring的xml方式来整合第三方框架的流程和步骤。 引入第三方框…

    Java 2023年5月19日
    00
  • SpringMVC执行步骤、Model的使用详解

    以下是关于“SpringMVC执行步骤、Model的使用详解”的完整攻略,其中包含两个示例。 1. 前言 SpringMVC是一种常用的Java Web开发框架,它可以帮助开发者快速构建Web应用程序。本攻略将详细讲解SpringMVC的执行步骤和Model的使用方法,帮助读者更好地掌握SpringMVC框架的使用方法。 2. SpringMVC的执行步骤 …

    Java 2023年5月16日
    00
  • Mybatis实现数据的增删改查实例(CRUD)

    下面是详细的”Mybatis实现数据的增删改查实例(CRUD)”攻略: 前置知识 在使用Mybatis进行CRUD操作之前,需要先了解以下知识点: Mybatis的基本使用方法和配置 数据库的基本操作,包括增删改查 数据库准备 首先,我们需要在数据库中创建一个表,用于存储我们的数据。假设我们创建了一个名为”users”的表,表结构如下: CREATE TAB…

    Java 2023年5月20日
    00
  • windows下jsp+mysql网站环境配置方法

    下面是windows下jsp+mysql网站环境配置方法的完整攻略。 准备工作 配置jsp+mysql网站环境需要满足以下条件: 安装JDK 安装Tomcat 安装Mysql 安装JDBC驱动 如果您还没有完成这些准备工作,请按顺序进行安装。在安装过程中,请注意安装路径,以便后续操作时使用。 配置Tomcat 打开Tomcat安装目录,在conf目录下找到s…

    Java 2023年5月19日
    00
  • JNI实现最简单的JAVA调用C/C++代码

    下面是“JNI实现最简单的JAVA调用C/C++代码”的完整攻略: 1. JNI是什么? JNI(Java Native Interface)是Java提供的一种机制,使得Java程序可以调用本地(native)代码,也就是C/C++代码。 2. JNI实现步骤 为了实现Java程序调用C/C++代码,我们需要完成以下步骤: 2.1. 编写C/C++代码 我…

    Java 2023年5月23日
    00
  • JavaWeb Servlet实现文件上传与下载功能实例

    下面是 “JavaWeb Servlet实现文件上传与下载功能实例” 的完整攻略。 一、准备工作 在开始实现文件上传与下载功能之前,我们需要准备如下环境和工具: JDK:Java开发环境,最好使用JDK 1.8及以上版本; Eclipse:Java IDE,也可以使用其他Java IDE,比如IntelliJ IDEA等; Tomcat:JavaWeb服务器…

    Java 2023年5月19日
    00
  • SpringBoot入门系列之JPA mysql

    下面我来介绍一下“SpringBoot入门系列之JPA mysql”的完整攻略。 1. 简介 JPA(Java Persistence API)是一种JavaEE的标准ORM(对象关系映射)规范。Spring Boot集成JPA,可以让我们使用简单、方便的API操作数据库,从而提高开发效率。 2. 准备工作 在使用Spring Boot集成JPA进行MySQ…

    Java 2023年5月20日
    00
  • Java基于深度优先遍历的随机迷宫生成算法

    Java基于深度优先遍历的随机迷宫生成算法攻略 算法思路 这里介绍的是基于深度优先遍历(DFS)的随机迷宫生成算法。该算法的基本思路是,从起点开始,每次选择一个相邻且未被访问过的节点作为下一个遍历的节点,直到到达终点,期间可以任意回溯。在此基础上加入了随机化操作,即在选择相邻节点时随机打乱遍历顺序,以此生成”随机”的迷宫。 实现步骤 首先,我们需要定义一个M…

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