Spring DAO、Spring ORM、Spring JDBC的区别

  • Post category:Java

以下是关于Spring DAO、Spring ORM、Spring JDBC的区别的完整攻略。

Spring DAO

Spring DAO是Spring框架中的一个模块,它提供了一种简单的方式来访问持久化存储。它的主要目的是将数据访问逻辑从业务逻辑中分离出来,使得代码更加清晰和易于维护。Spring DAO提供了一些接口和类,用于访问各种数据源,如关系型数据库、NoSQL数据库、XML文件等。

下面是一个使用Spring DAO的示例:

@Repository
public class MyRepositoryImpl implements MyRepository {
    private JdbcTemplate jdbcTemplate;

    @Autowired
    public MyRepositoryImpl(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public List<MyEntity> findAll() {
        String sql = "SELECT * FROM my_table";
        return jdbcTemplate.query(sql, new MyEntityRowMapper());
    }

    // other methods
}

在上面的示例中,我们创建了一个MyRepositoryImpl类,并使用@Repository注解将其标记为Spring DAO。在类中,我们使用@Autowired注解将JdbcTemplate对象注入到MyRepositoryImpl中。在findAll()方法中,我们使用JdbcTemplate对象执行SQL查询,并使用MyEntityRowMapper将结果映射为MyEntity对象的列表。

Spring ORM

Spring ORM是Spring框架中的一个模块,它提供了一种简单的方式来访问ORM框架,如Hibernate、MyBatis等。它的主要目的是将ORM框架的使用与Spring框架集成起来,使得代码更加清晰和易于维护。Spring ORM提供了一些接口和类,用于访问ORM框架的各种功能,如事务管理、对象映射等。

下面是一个使用Spring ORM的示例:

@Repository
public class MyRepositoryImpl implements MyRepository {
    private SessionFactory sessionFactory;

    @Autowired
    public MyRepositoryImpl(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    @Override
    public List<MyEntity> findAll() {
        Session session = sessionFactory.getCurrentSession();
        CriteriaBuilder builder = session.getCriteriaBuilder();
        CriteriaQuery<MyEntity> query = builder.createQuery(MyEntity.class);
        Root<MyEntity> root = query.from(MyEntity.class);
        query.select(root);
        return session.createQuery(query).getResultList();
    }

    // other methods
}

在上面的示例中,我们创建了一个MyRepositoryImpl类,并使用@Repository注解将其标记为Spring DAO。在类中,我们使用@Autowired注解将SessionFactory对象注入到MyRepositoryImpl中。在findAll()方法中,我们使用SessionFactory对象获取当前Session,并使用Criteria API执行查询操作。

Spring JDBC

Spring JDBC是Spring框架中的一个模块,它提供了一种简单的方式来访问关系型数据库。它的主要目的是将JDBC的使用与Spring框架集成起来,使得代码更加清晰和易于维护。Spring JDBC提供了一些接口和类,用于访问JDBC的各种功能,如连接管理、事务管理、SQL查询等。

下面是一个使用Spring JDBC的示例:

@Repository
public class MyRepositoryImpl implements MyRepository {
    private JdbcTemplate jdbcTemplate;

    @Autowired
    public MyRepositoryImpl(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public List<MyEntity> findAll() {
        String sql = "SELECT * FROM my_table";
        return jdbcTemplate.query(sql, new MyEntityRowMapper());
    }

    // other methods
}

在上面的示例中,我们创建了一个MyRepositoryImpl类,并使用@Repository注解将其标记为Spring DAO。在类中,我们使用@Autowired注解将JdbcTemplate对象注入到MyRepositoryImpl中。在findAll()方法中,我们使用JdbcTemplate对象执行SQL查询,并使用MyEntityRowMapper将结果映射为MyEntity对象的列表。

区别

Spring DAO、Spring ORM、Spring JDBC都是Spring框架中用于访问持久化存储的模块,但它们的实现方式不同。

Spring DAO是使用JDBC访问持久化存储的一种方式,它提供了一些接口和类,用于访问各种数据源。Spring DAO的主要目的是将数据访问逻辑从业务逻辑中分离出来,使得代码更加清晰和易于维护。

Spring ORM是使用ORM框架访问持久化存储的一种方式,它提供了一些接口和类,用于访问ORM框架的各种功能。Spring ORM的主要目的是将ORM框架的使用与Spring框架集成起来,使得代码更加清晰和易于维护。

Spring JDBC是使用JDBC访问持久化存储的一种方式,它提供一些接口和类,用于访问JDBC的各种功能。Spring JDBC的主要目的是将JDBC的使用与Spring框架集成起来,使得代码更加清晰和易于维护。

示例

下面是一个使用Spring DAO、Spring ORM、Spring JDBC的示例:


public class MyRepositoryImpl implements MyRepository {
    private JdbcTemplate jdbcTemplate;
    private SessionFactory sessionFactory;
    private EntityManager entityManager;

    @Autowired
    public MyRepositoryImpl(JdbcTemplate jdbcTemplate, SessionFactory sessionFactory, EntityManager entityManager) {
        this.jdbcTemplate = jdbcTemplate;
        this.sessionFactory = sessionFactory;
        this.entityManager = entityManager;
    }

    @Override
    public List<MyEntity> findAll() {
        // using Spring JDBC
        String sql = "SELECT * FROM my_table";
        List<MyEntity> entities = jdbcTemplate.query(sql, new MyEntityRowMapper());

        // using Spring ORM
        Session session = sessionFactory.getCurrentSession();
        CriteriaBuilder builder = session.getCriteriaBuilder();
        CriteriaQuery<MyEntity> query = builder.createQuery(MyEntity.class);
        Root<MyEntity> root = query.from(MyEntity.class);
        query.select(root);
        entities.addAll(session.createQuery(query).getResultList());

        // using Spring DAO
        TypedQuery<MyEntity> typedQuery = entityManager.createQuery("SELECT e FROM MyEntity e", MyEntity.class);
        entities.addAll(typedQuery.getResultList());

        return entities;
    }

    // other methods
}

在上面的示例中,我们创建了一个MyRepositoryImpl类,并使用@Repository注解将其标记为Spring DAO。在类中,我们使用@Autowired注解将JdbcTemplate、SessionFactory、EntityManager对象注入到MyRepositoryImpl中。在findAll()方法中,我们使用Spring JDBC、Spring ORM、Spring DAO分别执行SQL查询、Criteria查询、JPQL查询,并将结果合并为一个列表。