DAO究竟如何访问数据库
传统的JDBC太底层,即使用户自行一条很简单的查询语句,都必须执行如下过程:获取连接-创建Statement-执行数据操作-获取结果-关闭Statement-关闭结果集-关闭链接,另外还要进行异常处理。Spring Jdbc 对传统的JDBC API 进行了封装,将样板式代码和必不可少的代码交给了SpringJDBC处理
样板式的操作都被JDBCTemplate封装起来了,JDBCTemplate本身需要一个DataSource,这样它就可以根据需要从DataSource中获取或返回链接,UserDao和LoginLog都提供了一个带有@Autowired 注解的JDBCTemplate变量。
所以我们先需要声明一个数据源。
然后定义一个JDBCTemplate Bean ,通过spring 的容器上下文自动绑定机制进行Bean 的注入
在项目工程的scr\resources(在maven工程中,资源文件统一放在resources文件夹中),目录创建一个smart-context.xml的spring配置文件
111111111111111 <!-- 扫描类包,将标注Spring注解的类自动转化Bean,同时完成Bean的注入 --> <context:component-scan base-package="com.smart.dao"/> 222222222222222 <!-- 配置数据源 --> <!--使用Jakarta的DBCP 开源数据源实现方法定义一个数据源,数据库驱动器类为 com.mysql.jdbc.Driver, 由于这里mysql数据库的服务端口为3306, 默认的为3306, 不对可在此处进行修改--> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost:3306/sampledb" p:username="root" p:password="12345678" /> 3333333333333333 <!-- 配置Jdbc模板 --> <!-- 配置了jdbcTeamplate Bean , 将配置数据源 dataSource 注入jdbcTeamplate中, 而这个jdbcTeamplate 将通过@Autowired 自动注入loginLog ,UserDao的bean中, 可见Spring 可以很好地将注解配置和xml配置统一起来--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource" /> </beans>
在1111111111处,使用<context:component-scan>扫描指定类包下的所有类,这样的类中定义的Spring注解(如:@Repository @Autowired)才能生效。
在222222222处,使用jakartade DBCP开源数据源实现方案定义了一个数据源,数据库驱动类库为com.mysql.jdbc.Driver
在333333333处配置了jdbcTeamplate Bean , 将配置数据源 dataSource 注入jdbcTeamplate中, 而这个jdbcTeamplate 将通过@Autowired 自动注入loginLog ,UserDao的bean中, 可见Spring 可以很好地将注解配置和xml配置统一起来