Spring之ORM模块代码详解

Spring之ORM模块代码详解

Spring的ORM模块是一套全面的数据库访问和操作框架。该模块提供了各种ORM实现,如Hibernate、MyBatis、JPA等,使得开发人员可以轻松地将对象映射到关系数据库上,并且大大降低了开发复杂度。

在这篇文章中,我将详细介绍Spring ORM模块的代码设计和API使用方法,以及如何使用Spring ORM来处理ORM操作。

Spring ORM的基本原理

Spring ORM模块封装了Hibernate和JPA等持久化框架,为Spring应用程序提供了简单的配置、管理和使用,使得Spring应用程序可以更加容易地利用对象关系映射(ORM)进行数据访问和持久化。

Spring ORM模块的基本原理如下:

  1. 定义数据源:定义一个数据源对象,指定数据库的连接信息。
  2. 配置ORM框架:通过配置ORM框架的SessionFactory,从而获得访问数据库的会话管理器(Session Manager)。
  3. 定义持久化操作:定义持久化操作的DAO(Data Access Object),并将其注入到业务逻辑组件中,从而在业务逻辑组件中使用持久化操作。

Spring ORM的使用示例

下面我们将通过两个示例来阐述Spring ORM的使用方法。

示例1:使用Hibernate进行ORM操作

首先,我们需要在Spring配置文件中配置数据源和Hibernate的SessionFactory。

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</bean>

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

然后,我们需要定义DAO接口和DAO实现类,并在业务逻辑组件中注入DAO对象以使用持久化操作。

DAO接口:

public interface UserDao {
    void save(User user);
    List<User> getAllUsers();
    User getUserById(int id);
}

DAO实现类:

@Repository
public class UserDaoImpl implements UserDao {
    @Autowired
    private SessionFactory sessionFactory;

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

    @Override
    public List<User> getAllUsers() {
        Session session = sessionFactory.getCurrentSession();
        CriteriaQuery<User> criteriaQuery = session.getCriteriaBuilder().createQuery(User.class);
        criteriaQuery.from(User.class);
        return session.createQuery(criteriaQuery).getResultList();
    }

    @Override
    public User getUserById(int id) {
        Session session = sessionFactory.getCurrentSession();
        return session.get(User.class, id);
    }
}

接着,我们可以定义业务逻辑组件,并注入DAO对象来使用持久化操作。

业务逻辑组件:

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    @Override
    @Transactional
    public void saveUser(User user) {
        userDao.save(user);
    }

    @Override
    public List<User> getAllUsers() {
        return userDao.getAllUsers();
    }

    @Override
    public User getUserById(int id) {
        return userDao.getUserById(id);
    }
}

最后,我们可以使用业务逻辑组件来进行持久化操作。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-config.xml")
public class UserServiceImplTest {
    @Autowired
    private UserService userService;

    @Test
    public void saveUserTest() {
        User user = new User();
        user.setName("Test User");
        user.setAge(20);
        userService.saveUser(user);
        List<User> userList = userService.getAllUsers();
        Assert.assertEquals(1, userList.size());
    }

    @Test
    public void getUserByIdTest() {
        User user = new User();
        user.setName("Test User");
        user.setAge(20);
        userService.saveUser(user);
        User newUser = userService.getUserById(user.getId());
        Assert.assertNotNull(newUser);
    }
}

示例2:使用JPA进行ORM操作

使用JPA进行ORM操作与使用Hibernate基本相同,只是需要使用不同的持久化框架和注解。

首先,在Spring配置文件中配置数据源和JPA的EntityManagerFactory。

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="com.example.entities"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>

然后,我们需要定义DAO接口和DAO实现类,并在业务逻辑组件中注入DAO对象以使用持久化操作。

DAO接口:

public interface UserRepository extends JpaRepository<User, Integer> {
    List<User> findByName(String name);
}

DAO实现类:

@Repository
public class UserRepositoryImpl implements UserRepository {
    @PersistenceContext
    EntityManager entityManager;

    @Override
    public List<User> findByName(String name) {
        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        CriteriaQuery<User> criteriaQuery = criteriaBuilder.createQuery(User.class);
        Root<User> root = criteriaQuery.from(User.class);
        criteriaQuery.select(root).where(criteriaBuilder.equal(root.get("name"), name));
        return this.entityManager.createQuery(criteriaQuery).getResultList();
    }
}

接着,我们可以定义业务逻辑组件,并注入DAO对象来使用持久化操作。

业务逻辑组件:

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserRepository userRepository;

    @Override
    public List<User> findUsersByName(String name) {
        return userRepository.findByName(name);
    }
}

最后,我们可以使用业务逻辑组件来进行持久化操作。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-config.xml")
public class UserServiceImplTest {
    @Autowired
    private UserService userService;

    @Test
    public void findUsersByNameTest() {
        User user = new User();
        user.setName("Test User");
        user.setAge(20);
        userRepository.save(user);
        List<User> userList = userService.findUsersByName(user.getName());
        Assert.assertEquals(1, userList.size());
    }
}

总结

Spring ORM模块是一个灵活且易于使用的ORM框架,可以让开发人员轻松地进行ORM操作,从而降低了开发复杂度。本文介绍了Spring ORM的基本原理和使用方法,并提供了两个示例来演示如何使用Hibernate和JPA进行ORM操作,希望可以对读者有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring之ORM模块代码详解 - Python技术站

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

相关文章

  • SpringBoot快速整合SpringSecurity的详细步骤(新手都会!)

    Spring Security是一个功能强大的安全框架,可以为Spring Boot应用程序提供身份验证、授权、攻击防护等功能。本文将详细讲解如何快速整合Spring Security到Spring Boot应用程序中,包括如何配置Spring Security、如何定义用户、如何控制访问等。 配置Spring Security 在Spring Boot应用…

    Java 2023年5月15日
    00
  • Java中文件的读写方法之IO流详解

    Java中文件的读写方法之IO流详解 什么是Java IO流 Java IO(Input/Output)流是一种用于处理输入输出的机制,它为我们提供了读取和写入数据的方法,可从不同来源读取数据,例如网络、文件等,也可以将数据写入到不同的位置,例如文件、网络等。Java IO流分为输入流和输出流,其中,输入流用于读取数据,输出流用于写入数据。 Java IO流…

    Java 2023年5月19日
    00
  • 详解如何更改SpringBoot TomCat运行方式

    下面为您详细讲解如何更改SpringBoot Tomcat运行方式的完整攻略。 1. SpringBoot默认的Tomcat运行方式 SpringBoot默认使用嵌入式的Tomcat运行Web应用程序。这意味着您不需要单独部署一个Tomcat实例,而是可以使用SpringBoot提供的maven或gradle插件,在本地构建和运行应用程序。 要在Spring…

    Java 2023年5月19日
    00
  • Java spring的三种注入方式详解流程

    Java Spring的三种注入方式详解流程 在Java Spring中,有三种常用的依赖注入方式:构造函数注入、Setter方法注入以及字段注入。下面将分别给出这三种方式的详细讲解流程。 构造函数注入 步骤一:定义一个接口 首先,我们需要定义一个接口。这个接口将会被一个实现类所实现。在这个接口中,我们可以定义一些方法,让实现类去具体实现这些方法。 publ…

    Java 2023年5月19日
    00
  • 闲言碎语-逐步了解Spring

    当我们开始学习 Spring 的时候,我们经常会被各种概念和组件迷惑。为了逐步了解 Spring,以下是一些基本步骤: 1. 了解Spring的核心概念 在学习 Spring 之前,需要先了解 Spring 的基础概念。以下是一些常见的 Spring 核心概念: 依赖注入(Dependency Injection,DI) 依赖注入是 Spring 框架的核心…

    Java 2023年5月19日
    00
  • Java工具之ja-netfilter 2022.1 配置教程

    Java工具之ja-netfilter 2022.1 配置教程 简介 ja-netfilter 是一款基于 Java 开发的网络过滤工具,它能够实现网络数据包的过滤、转发、拦截等功能。本教程将详细介绍该工具的配置过程。 安装 首先需要安装 Java 运行环境,官方推荐使用 Java 8 或更高版本。 下载最新版本的 ja-netfilter,可以从官方网站h…

    Java 2023年5月27日
    00
  • Java之如何关闭流

    关闭流是Java程序中常见的操作之一,它能够避免资源的浪费与泄漏。接下来,我将为您详细讲解关闭流的完整攻略。 为什么要关闭流 Java程序中使用流来读取和写入数据,如果我们没有正确关闭流,那么会出现以下两种问题: 资源浪费:流对象占用系统资源,如果没有关闭流,那么这些资源就一直被占用,导致资源浪费,可能会影响其它程序的执行。 资源泄漏:如果没有关闭流,那么流…

    Java 2023年5月26日
    00
  • RMI使用学习 小结

    RMI使用学习 小结 1. RMI简介 RMI(远程方法调用)是Java编程语言中用于实现远程过程调用的应用程序编程接口。RMI使一个Java虚拟机上的对象能够调用在另一个Java虚拟机上的对象的方法。RMI实现了对象级别的远程过程调用,用户不必关心底层的网络通讯细节。 RMI使用Java远程调用(Java Remote Method Invocation)…

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