一)使用DAO的jdbcsuport来简化开发

首先来清楚一个概念:

我们在进行配置文件来进行依赖注入的时候,主要是通过set方法来进行设置的。

正常我们使用spring的jdbctemplate的时候,我们需要注入DataSource和jdbctemplate两个类。而jdbcsuport帮我们做了这些事情。所以我们只需要在Dao层继承这类即可。

一起来看jdbcsuport源码:

首先提供了字段jdbctemplate字段:

然后分别给提供了该字段的set方法和get方法:

也就是说我们在获取该字段(private修饰),设置该字段(提供注入),可以给配置文件进行依赖注入。

然后在看:

如果获取jdbctemplate的时候,是null,会调用createJdbcTemplate方法,new jdbctemplate的对象。

所以现在我们可以不依赖注入:jdbctemplate。只是注入DataSource即可。

这种方法,其实并不好,因为spring 一直强调低耦合,实例化交给IOC处理。

完整代码例子:

Dao'层:

 //
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
// package org.springframework.jdbc.core.support; import java.sql.Connection;
import javax.sql.DataSource;
import org.springframework.dao.support.DaoSupport;
import org.springframework.jdbc.CannotGetJdbcConnectionException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.jdbc.support.SQLExceptionTranslator; public abstract class JdbcDaoSupport extends DaoSupport {
private JdbcTemplate jdbcTemplate; public JdbcDaoSupport() {
} public final void setDataSource(DataSource dataSource) {
if (this.jdbcTemplate == null || dataSource != this.jdbcTemplate.getDataSource()) {
this.jdbcTemplate = this.createJdbcTemplate(dataSource);
this.initTemplateConfig();
} } protected JdbcTemplate createJdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
} public final DataSource getDataSource() {
return this.jdbcTemplate != null ? this.jdbcTemplate.getDataSource() : null;
} public final void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
this.initTemplateConfig();
} public final JdbcTemplate getJdbcTemplate() {
return this.jdbcTemplate;
} protected void initTemplateConfig() {
} protected void checkDaoConfig() {
if (this.jdbcTemplate == null) {
throw new IllegalArgumentException("'dataSource' or 'jdbcTemplate' is required");
}
} protected final SQLExceptionTranslator getExceptionTranslator() {
return this.getJdbcTemplate().getExceptionTranslator();
} protected final Connection getConnection() throws CannotGetJdbcConnectionException {
return DataSourceUtils.getConnection(this.getDataSource());
} protected final void releaseConnection(Connection con) {
DataSourceUtils.releaseConnection(con, this.getDataSource());
}
}

service层:

 package jd.com.UserService;

 import jd.com.UserDao.userdao;
import org.springframework.stereotype.Service; import javax.annotation.Resource; public class UserServiceImpl implements UserService { private userdao userdaoIMpl; public void setUserdaoIMpl(userdao userdaoIMpl) {
this.userdaoIMpl = userdaoIMpl;
} @Override
public void toaccount(int mon1, int mon2) { System.out.println(this.userdaoIMpl);
userdaoIMpl.addMoney(mon1);
userdaoIMpl.delMoney(mon2);
}
}

配置文件:

 <?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:aop="http://www.springframework.org/schema/aop"
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/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"> <context:component-scan base-package="jd.com" /> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/day_spring" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<bean class="jd.com.UserDao.userdaoIMpl" id="userdao">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="userService" class="jd.com.UserService.UserServiceImpl">
<property name="userdaoIMpl" ref="userdao" />
</bean> </beans>

注意:

这里采用的xml配置文件方式进行注入和依赖注入。

  如果都使用注解,会导致datasource无法注入的情况。

个人认为合理方式:不继承jdbcsuport这个类。

JAVA框架 Spring 调用jdbcsuport简化开发的更多相关文章

  1. Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)

    在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...

  2. Java框架spring Boot学习笔记(六):Spring Boot事务管理

    SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.

  3. Java框架spring 学习笔记(十四):注解aop操作

    回见Java框架spring Boot学习笔记(十三):aop实例操作,这里介绍注解aop操作 首先编写一个切入点HelloWorld.java package com.example.spring; ...

  4. 对Java框架spring、hibernate、Struts的粗浅理解

    对 Struts 的理解:1. struts 是一个按 MVC 模式设计的 Web 层框架,其实它就是一个大大的 servlet,这个Servlet 名为 ActionServlet,或是 Actio ...

  5. Java框架spring Boot学习笔记(七):@Configuration,@bean注解

    @Configuration作用在类上,相当于一个xml文件 @bean作用于方法上,相当于xml配置中的<bean>标签 一个例子: 新建一个Springboot工程 新建一个User类 ...

  6. Java框架spring 学习笔记(三):Bean 的生命周期

    当一个 bean 被实例化时,它可能需要执行一些初始化使它转换成可用状态.当bean不再需要,并且从容器中移除时,需要做一些清除工作.为了定义安装和拆卸一个 bean,我们只要声明init-metho ...

  7. JAVA框架 Spring 入门

    一.阐述: IoC:我们以前写的框架虽然我们已经进行分层,web.业务层.持久层.但是各个层之间的关系.耦合性比较高,那个层调用其他层的时候,需要new对应层的类的对象,这样的话,我们以后做修改的时候 ...

  8. JAVA 框架 Spring Cache For Redis.

    一.概述 缓存(Caching)可以存储经常会用到的信息,这样每次需要的时候,这些信息都是立即可用的. 常用的缓存数据库: Redis   使用内存存储(in-memory)的非关系数据库,字符串.列 ...

  9. Java框架Spring Boot & 服务治理框架Dubbo & 应用容器引擎Docker 实现微服务发布

    微服务系统架构实践 开发语言Java 8 框架使用Spring boot 服务治理框架Dubbo 容器部署Docker 持续集成Gitlab CI 持续部署Piplin 注册中心Zookeeper 服 ...

随机推荐

  1. 4+1视图与UML对应关系

    4+1视图模型概况     Kruchten 提出了一个"4+1"视图模型,从5个不同的视角包括包括逻辑试图.进程视图.物理视图.开发视图.场景视图来描述软件体系结构.每一个视图只 ...

  2. oracle 11g 分区表创建(自动按年、月、日分区)

    前言:工作中有一张表一年会增长100多万的数据,量虽然不大,可是表字段多,所以一年下来也会达到 1G,而且只增不改,故考虑使用分区表来提高查询性能,提高维护性. oracle 11g 支持自动分区,不 ...

  3. Python 初识网络

    一. C/S架构:客户端(client)/服务端(server)架构 B/S架构:浏览器(browser) / 服务端(server)架构 软件cs架构: 浏览器,qq,微信等等 硬件cs架构:打印机 ...

  4. 实现卡片效果【DIV+CSS3】

    一.文字卡片效果 <html> <head> meta<charset="utf-8"> <title>文字卡片效果</tit ...

  5. 开源项目管理工具KanBoard

    KanBoard是一个很好用的项目管理软件,地址点此.它以网页形式存储在服务器或者本地,支持多标签.多项目.多用户和多种显示方式.编辑方式上支持markdown.它还提供多角度可视化的项目统计分析. ...

  6. WOSA/XFS PTR Form解析库—FormRule.h

    #ifndef _FORMRULE_H_#define _FORMRULE_H_ #include <XFSPTR.H>#include <string>#include &l ...

  7. SQLite 数据库增删改查

    布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...

  8. Android 机器人项目Pepper_Android

    github地址:https://github.com/ohwada/Pepper_Android

  9. Expo大作战(四)--快速用expo构建一个app,expo中的关键术语

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  10. Postsharp基本用法——方法、属性拦截与异常处理

    以下Demo代码基于 .NET Core 演示了Postsharp的基本使用方法,稍作修改(反射部分有些许差异)也适用于.NET Framework. 更多高级使用方法详见官方文档.http://sa ...