在我的上个博客中对Spring的JDBC模板类进行了源码分析。我们在使用时只需要使用JdbcTemplate类就能完成数据库操作。下面我们看一个例子:
1、DAO实现类
package com.dao.jdbc;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import com.dao.UserDao;
import com.domain.User;
public class UserDaoImpl implements UserDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public int getMatchCount(String userName, String password) {
String sqlStr = " SELECT count(*) FROM t_user "
+ " WHERE user_name =? and password=? ";
return jdbcTemplate.queryForInt(sqlStr, new Object[] { userName, password });
}
public User findUserByUserName(final String userName) {
String sqlStr = " SELECT user_id,user_name,credits "
+ " FROM t_user WHERE user_name =? ";
final User user = new User();
jdbcTemplate.query(sqlStr, new Object[] { userName },
new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
user.setUserId(rs.getInt("user_id"));
user.setUserName(userName);
user.setCredits(rs.getInt("credits"));
}
});
return user;
}
public void updateLoginInfo(User user) {
String sqlStr = " UPDATE t_user SET last_visit=?,last_ip=?,credits=? "
+ " WHERE user_id =?";
jdbcTemplate.update(sqlStr, new Object[] { user.getLastVisit(),
user.getLastIp(),user.getCredits(),user.getUserId()});
}
}
从上面我们可以看出,我们在进行数据库操作时只需要JdbcTemplate类就可以完成所有操作。在DAO的实现类中并没有看到数据库连接、关闭等操作。只是根据具体的CRUD操作用面向对象的方式来传递查询参数和返回领域对象DO。
然而,我们的Spring中DAO是怎样来反问数据库的呢?
实际上在讲JdbcTemplate实现机制时我就讲到:JdbcTemplate实现了接口JdbcOperations的所有的数据库操作方法,同时它继承了JdbcAccessor类。JdbcAccessor可以从DataSource中获取相应的属性。所以JdbcTemplate就是从一个DataSource中获取或返回连接。而我们具体的DAO实现类中都有一个JdbcTemplate属性和一个setJdbcTemplate();
所以,我们要想DAO获取数据库连接,就必须事先声明一个数据源。
2、数据源声明
<beans>
<!-- 配置数据源 -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/sampledb" />
<property name="username" value="root" />
<property name="password" value="admin" />
</bean>
...
</beans>
注:这里使用Jakarta的DBCP开源数据库实现方案定义一个数据源。并设置了数据库连接的相关属性。
3、接下来,我们需要配置所使用的JDBC模板类并设置模板类所使用的数据源
<!-- 配置Jdbc模板 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ><ref bean="dataSource"/> </property>
</bean>
注:其中的<ref bean="dataSource"/> 中的dataSource即前面定义的数据源Bean ID。
4、为DAO分配模板类:将模板类传入DAO实现类的setJdbcTemplate()
<!-- 配置dao -->
<bean id="loginLogDao" class="com.dao.jdbc.LoginLogDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<bean id="userDao" class="com.dao.jdbc.UserDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
为每一个DAO都要配置一个关联的JdbcTemplate Bean。
注:其中的ref="jdbcTemplate"中的jdbcTemplate为JDBC模板类配置中的Bean ID。
5、当然,可以将这些配置全部放在一个Spring配置文件中。Spring配置文件的基本结构如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean>...<bean>
...
</beans>
前面的数据源配置、JDBC模板类配置、DAO配置分别对应于Spring配置文件中的一个bean标记。
分享到:
相关推荐
7. **在 Spring 中装配 DAO** 在提供的配置示例中,可以看到如何通过XML配置来装配数据源、JdbcTemplate和DAO。数据源(dataSource)的配置用于连接数据库,JdbcTemplate是Spring提供的简化JDBC操作的工具,DAO...
在这个"spring自动装配项目struts2"中,我们将探讨如何整合Spring的自动装配特性与Struts2框架,以及Hibernate作为持久层框架的使用。 首先,让我们了解Spring的自动装配(Auto-Wiring)。自动装配是Spring框架的...
2.3.4 在Spring中装配DAO 2.4 业务层 2.4.1 UserService 2.4.2 在Spring中装配Service 2.4.3 单元测试 2.5 展现层 2.5.1 配置Spring MVC框架 2.5.2 处理登录请求 2.5.3 JSP视图页面 2.6 运行Web应用 2.7 小结 第2篇...
2.3.4 在Spring中装配DAO 2.4 业务层 2.4.1 UserService 2.4.2 在Spring中装配Service 2.4.3 单元测试 2.5 展现层 2.5.1 配置Spring MVC框架 2.5.2 处理登录请求 2.5.3 JSP视图页面 2.6 运行Web应用 2.7 小结 第2篇...
- **在Spring中装配DAO**:使用 Spring 来管理 DAO 的生命周期。 - **2.4 业务层** - **UserService**:实现具体的业务逻辑。 - **在Spring中装配Service**:通过 Spring 管理 Service 组件。 - **单元测试**:...
在这个项目中,“原始Dao”指的是直接继承自Mybatis提供的BaseMapper接口,而不是使用Mybatis-Spring的MapperScannerConfigurer来扫描并自动装配Mapper。这种方式需要手动在Spring配置文件中定义每个Dao Bean。 5....
`spring-beans.jar`对Bean的定义和装配提供了更深层次的支持,是实现Spring框架中IoC容器的关键组件。 #### spring-aop.jar 面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架的另一大特色。`spring-...
Spring还提供了大量的模块,如数据访问/集成(DAO)、Web MVC、JMS、交易管理等。在数据访问层,Spring支持JDBC、ORM(Hibernate、MyBatis等)框架的集成,使得数据库操作变得简单。在Web MVC模块中,`...
Spring装配Bean的3种方式总结 Spring框架是Java EE应用程序的核心框架之一,它提供了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等功能。依赖注入是Spring框架的核心...
12.2.2. 在Spring的application context中创建 SessionFactory 12.2.3. HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. ...
- `@Autowired`:Spring的自动装配注解,可以自动将匹配类型的bean注入到字段或方法中。如果存在多个相同类型的bean,Spring会抛出异常,除非使用`@Qualifier`来指定具体哪一个bean。 - `@Qualifier`:当有多个...
1. **Spring Core Container**:这是Spring框架的基础,包含Bean Factory和ApplicationContext,负责管理和装配应用的bean。 2. **Data Access/Integration**:提供数据库访问的支持,如JDBC抽象层、ORM(Object-...
Spring自动装配是指Spring框架中的一种机制,用于自动装配 Bean 之间的依赖关系,而无需手动编写大量的XML配置文件。这种机制可以大大简化Spring应用程序的配置和维护工作。 在Spring中,自动装配可以通过两种方式...
同时,Spring的`@Autowired`注解可以帮助我们自动装配所需的依赖。 总的来说,Spring与Hibernate的集成能够充分利用各自的优势,使得Java应用的开发更加便捷。通过Spring对Hibernate的管理,我们可以更好地控制事务...
这里的`service` bean依赖于`dao` bean,Spring容器会在运行时自动将`dao`注入到`service`的`dao`属性中。 **AOP(面向切面编程)**是Spring提供的另一大特性,它允许我们在不修改原有业务代码的情况下,对程序进行...
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
在Spring中,XML文件中的bean配置是实现Spring IOC的核心配置文件,在早版本的Spring中,只能基于XML配置文件,配置各个对象之间的依赖关系。在Spring 2.5以后出现了注解,使用注解结合XML的方式,简化了XML配置的...
在文件"1606SpringDay02-3"中,可能包含了对这些概念的详细讲解和示例代码,通过学习这部分内容,我们可以更深入地理解Spring如何管理和装配bean,从而更好地设计和构建Spring应用。同时,合理使用`parent`、`...
Spring3引入了大量注解,如`@Autowired`实现自动装配,`@Service`、`@Repository`和`@Controller`对Bean进行分类,`@Transactional`用于声明事务管理,使得代码更加模块化和易于测试。 3. **Hibernate**:Hibernate...