Spring框架第六篇之Spring与DAO
一、Spring与JDBC模板
1、搭建环境
首先导入需要的jar包:

以上jar中多导入了DBCP和C3P0的jar包,因为这里需要演示怎么配置多种数据源,所以导入了这两个包,在实际开发中无需导入这两个包。
2、数据源的配置
数据源的配置分为3中情况:
1、Spring内置的连接池DriverManagerDataSource;
2、DBCP数据源 BasicDataSource;
3、C3P0数据源 ComboPooledDataSource;
具体在XML中的配置如下:
<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <!-- 注册数据源:1、Spring内置连接池 -->
<!--<bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>--> <!-- 注册数据源:2、DBCP -->
<!--<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>--> <!-- 注册数据源:3、C3P0 -->
<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/test"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
</bean> <!-- 注册JdbcTemplate -->
<bean id="myJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="myDataSource"/>
</bean> <!-- 注册Dao -->
<bean id="studentDao" class="com.ietree.spring.dao.basic.dao.StudentDaoImpl">
<property name="jdbcTemplate" ref="myJdbcTemplate"/>
</bean> <!-- 注册Service -->
<bean id="studentService" class="com.ietree.spring.dao.basic.service.StudentServiceImpl">
<property name="dao" ref="studentDao"/>
</bean> </beans>
3、从属性文件读取数据库连接信息
创建db.properties数据库配置文件:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test
jdbc.user=root
jdbc.password=root
配置Spring配置文件:
<!-- 注册数据源:3、C3P0 -->
<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</bean> <!--注册属性文件:方式一-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:db.properties"/>
</bean> <!--注册属性文件:方式二-->
<context:property-placeholder location="classpath:db.properties"/>
4、配置JDBC模板
<bean id="myJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="myDataSource"/>
</bean>
<!-- 注册Dao -->
<bean id="studentDao" class="com.ietree.spring.dao.basic.dao.StudentDaoImpl">
<property name="jdbcTemplate" ref="myJdbcTemplate"/>
</bean>
5、DAO实现类继承JdbcDaoSupport类,对数据库的增删改查操作
package com.ietree.spring.dao.basic.dao; import com.ietree.spring.dao.basic.bean.Student;
import com.ietree.spring.dao.basic.bean.StudentRowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport; import java.util.List; /**
* Created by Root on 2017/7/9.
*/
public class StudentDaoImpl extends JdbcDaoSupport implements IStudentDao { @Override
public void insertStudent(Student student) {
String sql = "INSERT INTO tbl_student(name,age) VALUES(?,?)";
this.getJdbcTemplate().update(sql,student.getName(),student.getAge());
} @Override
public void deleteStudent(int id) {
String sql = "DELETE FROM tbl_student WHERE id = ?";
this.getJdbcTemplate().update(sql,id);
} @Override
public void updateStudent(Student student) {
String sql = "UPDATE tbl_student SET name=?,age=? WHERE id = ?;";
this.getJdbcTemplate().update(sql,student.getName(),student.getAge(),student.getId());
} @Override
public List<String> selectAllStudentNames() {
String sql = "SELECT name FROM tbl_student";
return this.getJdbcTemplate().queryForList(sql,String.class);
} @Override
public String selectStudentNameById(int id) {
String sql = "SELECT name FROM tbl_student WHERE id = ?";
return this.getJdbcTemplate().queryForObject(sql,String.class,id);
} @Override
public List<Student> selectAllStudent() {
String sql = "SELECT id,name,age FROM tbl_student";
return this.getJdbcTemplate().query(sql, new StudentRowMapper());
} @Override
public Student selectStudentById(int id) {
String sql = "SELECT id,name,age FROM tbl_student WHERE id = ?";
return this.getJdbcTemplate().queryForObject(sql, new StudentRowMapper(),id);
}
}
StudentRowMapper类:
package com.ietree.spring.dao.basic.bean; import org.springframework.jdbc.core.RowMapper; import java.sql.ResultSet;
import java.sql.SQLException; /**
* Created by Root on 2017/7/11.
*/
public class StudentRowMapper implements RowMapper<Student> { /**
* 这里的rs代表的是查询出来的结果中的一行数据,并非代表所有数据。只要能执行到这个方法,就说明rs不可能为空
*/
@Override
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
Student student = new Student();
student.setId(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setAge(rs.getInt("age"));
return student;
}
}
以上案例完整的配置文件如下:
<?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"
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"> <!-- 注册数据源:1、Spring内置连接池 -->
<!--<bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>--> <!-- 注册数据源:2、DBCP -->
<!--<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>--> <!-- 注册数据源:3、C3P0 -->
<!--<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/test"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
</bean>--> <!-- 注册数据源:3、C3P0 -->
<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</bean> <!--注册属性文件:方式一-->
<!--<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:db.properties"/>
</bean>--> <!--注册属性文件:方式二-->
<context:property-placeholder location="classpath:db.properties"/> <!-- 根据JdbcDaoSupport类的源码可以省略JdbcTemplate的注册,将DataSource作为Dao的属性 -->
<!-- 注册JdbcTemplate -->
<bean id="myJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="myDataSource"/>
</bean>
<!-- 注册Dao -->
<bean id="studentDao" class="com.ietree.spring.dao.basic.dao.StudentDaoImpl">
<property name="jdbcTemplate" ref="myJdbcTemplate"/>
</bean> <!-- 注册Dao -->
<bean id="studentDao" class="com.ietree.spring.dao.basic.dao.StudentDaoImpl">
<property name="dataSource" ref="myDataSource"/>
</bean> <!-- 注册Service -->
<bean id="studentService" class="com.ietree.spring.dao.basic.service.StudentServiceImpl">
<property name="dao" ref="studentDao"/>
</bean> </beans>
二、Spring的事务管理
1、Spring事务管理API
2、使用Spring的事务代理工厂管理事务
3、使用Spring的事务注解管理事务
4、使用AspectJ的AOP配置管理事务
Spring框架第六篇之Spring与DAO的更多相关文章
- Spring框架第五篇之Spring与AOP
一.AOP概述 AOP(Aspect Orient Programming),面向切面编程,是面向对象编程OOP的一种补充.面向对象编程是从静态角度考虑程序的结构,而面向切面编程是从动态角度考虑程序运 ...
- 跟我学SpringCloud | 第六篇:Spring Cloud Config Github配置中心
SpringCloud系列教程 | 第六篇:Spring Cloud Config Github配置中心 Springboot: 2.1.6.RELEASE SpringCloud: Greenwic ...
- [Spring Cloud实战 | 第六篇:Spring Cloud Gateway+Spring Security OAuth2+JWT实现微服务统一认证授权
一. 前言 本篇实战案例基于 youlai-mall 项目.项目使用的是当前主流和最新版本的技术和解决方案,自己不会太多华丽的言辞去描述,只希望能勾起大家对编程的一点喜欢.所以有兴趣的朋友可以进入 g ...
- Spring Cloud实战 | 最终篇:Spring Cloud Gateway+Spring Security OAuth2集成统一认证授权平台下实现注销使JWT失效方案
一. 前言 在上一篇文章介绍 youlai-mall 项目中,通过整合Spring Cloud Gateway.Spring Security OAuth2.JWT等技术实现了微服务下统一认证授权平台 ...
- Spring框架学习(7)spring mvc入门
内容源自:spring mvc入门 一.spring mvc和spring的关系 spring mvc是spring框架提供的七层体系架构中的一个层,是spring框架的一部分,是spring用于处理 ...
- Spring Cloud实战 | 第九篇:Spring Cloud整合Spring Security OAuth2认证服务器统一认证自定义异常处理
本文完整代码下载点击 一. 前言 相信了解过我或者看过我之前的系列文章应该多少知道点我写这些文章包括创建 有来商城youlai-mall 这个项目的目的,想给那些真的想提升自己或者迷茫的人(包括自己- ...
- Spring框架学习(1)Spring简介
内容源自:Spring 框架简介 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序 ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring框架的基本思想
EJB的学习成本很高,开发效率却不高,需要编写很多重复的代码,这些问题阻止了EJB的继续发展.就在EJB技术止步不前的时候,Spring框架在合适的时机出现了,Spring框架和EJB不同,Sprin ...
- Spring Cloud第六篇 | Hystrix仪表盘监控Hystrix Dashboard
本文是Spring Cloud专栏的第六篇文章,了解前五篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud ...
随机推荐
- 【BZOJ】1088: [SCOI2005]扫雷Mine(递推)
http://www.lydsy.com/JudgeOnline/problem.php?id=1088 脑残去想递推去了... 对于每一个第二列的格子,考虑多种情况,然后转移.....QAQ 空间可 ...
- iOS开发 - CALayer图层
CALayer的基本使用 在iOS中.你能看得见摸得着的东西基本上都是UIView.比方一个button.一个文本标签.一个文本输入框.一个图标等等.这些都是UIView 事实上UIView之所以能显 ...
- ie设置ActiveX控件不提示
ie设置自动允许activex: 对安全设置-受信任的站点区域-对未标记为可安全执行脚本的ActiveX控件初始化并执形脚本(启用)
- AWS系列-使用Could Events定时对EC2打快照
第1章 使用Could Events定时对EC2打快照 1.1 打开控制台搜索CloudWatch 在搜索栏输入CloudWatch,点击进入CloudWatch控制台 1.2 选择进入Events ...
- jquery如何书写一个根据下拉选择列表的选择值 控制其他标签时候显示的功能
有时候我们在一些表单搜集信息的时候,需要根据上一项的选择情况设定下面的某些输入信息是否显示,是否需要被收集等,这个时候就要对下拉列表的选择事件做一个监听. 代码如下: <!DOCTYPE HTM ...
- 阿里云CentOS6.8安装MySQL5.6
1.使用SSH Secure Shell工具连接阿里云服务器 2.使用SSH Secure File Transfer工具上传MySQL压缩包 3.解压MySQL压缩包到指定目录(需要在先/usr/l ...
- ios8推送问题
博文转载至 http://blog.csdn.net/cerastes/article/details/39546625 ios8push推送通知适配 ios8推送问题 registerForRem ...
- 微软笔试题-highways
题目大意 一条单向的高速公路上有N辆车,在0时刻,每辆车分别在起点A[0],A[1]....处开始从北向南出发,每辆车有个终点B[0],B[1]....且每辆车有个限制速度 V[0],V[1]... ...
- poj_1836 动态规划
题目大意 N个士兵排成一排,不是按照高度顺序排列.现在想要从中去掉几名士兵,从而使得队伍中剩余的士兵能够看到这排最左边或者最右边的那个士兵,某士兵能够看到最左边(或最右边)的士兵指这名士兵和最左边(或 ...
- 170406、用uid分库,uname(用户名)上的查询怎么办
[缘起] 用户中心是几乎每一个公司必备的基础服务,用户注册.登录.信息查询与修改都离不开用户中心. 当数据量越来越大时,需要多用户中心进行水平切分.最常见的水平切分方式,按照uid取模分库: 通过ui ...