JAVA框架 Spring 调用jdbcsuport简化开发
一)使用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简化开发的更多相关文章
- Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)
在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...
- Java框架spring Boot学习笔记(六):Spring Boot事务管理
SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.
- Java框架spring 学习笔记(十四):注解aop操作
回见Java框架spring Boot学习笔记(十三):aop实例操作,这里介绍注解aop操作 首先编写一个切入点HelloWorld.java package com.example.spring; ...
- 对Java框架spring、hibernate、Struts的粗浅理解
对 Struts 的理解:1. struts 是一个按 MVC 模式设计的 Web 层框架,其实它就是一个大大的 servlet,这个Servlet 名为 ActionServlet,或是 Actio ...
- Java框架spring Boot学习笔记(七):@Configuration,@bean注解
@Configuration作用在类上,相当于一个xml文件 @bean作用于方法上,相当于xml配置中的<bean>标签 一个例子: 新建一个Springboot工程 新建一个User类 ...
- Java框架spring 学习笔记(三):Bean 的生命周期
当一个 bean 被实例化时,它可能需要执行一些初始化使它转换成可用状态.当bean不再需要,并且从容器中移除时,需要做一些清除工作.为了定义安装和拆卸一个 bean,我们只要声明init-metho ...
- JAVA框架 Spring 入门
一.阐述: IoC:我们以前写的框架虽然我们已经进行分层,web.业务层.持久层.但是各个层之间的关系.耦合性比较高,那个层调用其他层的时候,需要new对应层的类的对象,这样的话,我们以后做修改的时候 ...
- JAVA 框架 Spring Cache For Redis.
一.概述 缓存(Caching)可以存储经常会用到的信息,这样每次需要的时候,这些信息都是立即可用的. 常用的缓存数据库: Redis 使用内存存储(in-memory)的非关系数据库,字符串.列 ...
- Java框架Spring Boot & 服务治理框架Dubbo & 应用容器引擎Docker 实现微服务发布
微服务系统架构实践 开发语言Java 8 框架使用Spring boot 服务治理框架Dubbo 容器部署Docker 持续集成Gitlab CI 持续部署Piplin 注册中心Zookeeper 服 ...
随机推荐
- C#生成二维码,裁切边框
使用google zxing生成的二维码带有白色边框,显示在报告(使用Crystal Report 水晶报表)上时,由于空间有限造成二维码过小难以扫描识别. 通过将白色边框裁切掉,可以在有限的空间内最 ...
- es7新增的2个特性
- HDU3622(二分+2-SAT)
Bomb Game Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- DOM基础练习代码(二)
上一篇给大家的三段代码不知到大家有没有练习呢?今天再给大家带来两段DOM的练习! 4.封装函数,实现children功能,最好哎原型链上编程 Element.prototype.getChildren ...
- js-权威指南-Web套接字
HTTP是一种无状态的协议,,由客户端请求和服务端响应组成.HTTP实际上是比较特殊的网络协议. 大多数基于因特网的网络连接通常包含长连接和基于TCP套接字的双向消息交换.让不信任的客户端脚本访问底层 ...
- 3D-爱心
520把爱心送给她 用自己独有的方式表白,也是爱的一种体现! 所以呢,我就利用自己现有的知识,做了一个3D爱心! 今天是5月21日,博主在这里希望所有看到这个博客的朋友们能够拥有自己美好的爱情! 同时 ...
- SAP wonderful links
http://sapbrainsonline.com/help/sap-r3-architecture-introduction.html http://www.guru99.com/learning ...
- Xrdp vnc password failed
I try to login Ubuntu 16.04 xrdp through window 10 with mstsc. It was successful in 2019/01/09 night ...
- ubuntu 搭建samba共享方案
1.samba服务安装搭建 sudo apt-get install samba sudo vim /etc/samba/smb.conf workgroup = szsoft 设置用户密码登陆方式s ...
- springcloud 入门 2 (Enreka的服务和注册)
spring cloud eureka: eureka 用以服务发现.服务注册,比较流行的有consul(后面再介绍) eureka介绍: eureka为netflix开源软件,分为三个部分: eur ...