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 Spring Controller 获取请求参数的几种方法详解

    下面是关于“Java Spring Controller 获取请求参数的几种方法详解”的完整攻略,包含两个示例说明。 Java Spring Controller 获取请求参数的几种方法详解 在Java Spring应用程序中,Controller是处理HTTP请求的核心组件。在处理请求时,我们通常需要获取请求参数。本文将详细介绍Java Spring Co…

    Java 2023年5月17日
    00
  • 搭建简单的Spring-Data JPA项目

    搭建简单的Spring-Data JPA项目可分为以下几个步骤: 第一步:创建Maven项目 首先需要创建一个Maven项目,然后在pom.xml中导入Spring-Data JPA以及Hibernate等相关依赖。 示例代码: <dependency> <groupId>org.springframework.data</gr…

    Java 2023年6月3日
    00
  • 微信小程序中weui用法解析

    微信小程序中weui用法解析 什么是weui WeUI 是微信官方推出的一个基于Vue.js和Webpack构建的一套移动端UI组件库,适用于微信内网页开发和微信小程序开发。WeUI拥有丰富的UI组件,涉及常用的表单、列表、卡片、操作反馈等等。使用WeUI可以极大地提高小程序的开发效率和用户体验,帮助开发人员快速地开发出适应微信生态的小程序。 在微信小程序中…

    Java 2023年5月30日
    00
  • Java SpringBoot 使用拦截器作为权限控制的实现方法

    下面我详细讲解“Java SpringBoot 使用拦截器作为权限控制的实现方法”的完整攻略。 前言 在 Web 应用中,通常需要对不同的用户(或用户组)进行权限控制,以保证数据和资源的安全。其中,Spring Security 是目前比较流行的安全框架,它提供了很多种安全特性,比如:认证、授权、防止 CSRF 攻击等。然而,在某些场景下,我们可能只需要简单…

    Java 2023年5月19日
    00
  • Hibernate懒加载之标签上的lazy

    Hibernate是一个流行的开源ORM(对象关系映射)框架,可以将Java对象关联到数据库表。在开发中,为了提高系统性能,开发人员通常会使用懒加载技术,延迟加载需要的数据,而不是在一次完整的数据库查询中同时加载完所有的数据。 在Hibernate中,懒加载的配置是通过在Hibernate映射文件中的标签上添加lazy属性实现的。接下来,我们将详细讲解如何在…

    Java 2023年5月20日
    00
  • java实现多人聊天系统

    Java实现多人聊天系统需要考虑网络通信、多线程编程以及GUI等方面,下面我将为您提供完整攻略。 一、基本框架设计 1.客户端 客户端的基本框架设计如下: 登录界面:输入用户名和密码进行登录操作; 聊天窗口:展示聊天信息,提供发送聊天内容的输入框和发送按钮; 好友列表:展示当前在线的好友列表,支持选择好友进行私聊。 2.服务器端 服务器需要处理以下事项: 处…

    Java 2023年5月24日
    00
  • Tomcat搭建本地服务器的图文教程

    Tomcat搭建本地服务器的完整攻略 什么是Tomcat Tomcat是一种开源的Web应用服务器,可实现Java Servlet、JavaServer Page和Java WebSocket技术。其内核实现了Java Servlet 和 JavaServer Page 规范, 作为Web服务器可以处理静态页面, 还可以扩展Servlet来处理动态内容。 如…

    Java 2023年5月19日
    00
  • SpringBoot可视化接口开发工具magic-api的简单使用教程

    SpringBoot可视化接口开发工具magic-api的简单使用教程 介绍 magic-api是一款SpringBoot可视化接口开发工具,可以让开发人员在图形化界面上快速构建RESTful API接口。其特点是通过简单的配置即可生成接口代码,支持对接口文档的在线管理和修改。 安装 首先,你需要在项目的pom.xml文件中添加magic-api的依赖: &…

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