Spring JDBC概述
1、jdbc 概述
Spring JDBC是Spring框架的持久层子框架。用于对数据库的操作(增删改查)。
而JdbcTemplate它是spring jdbc子框架中提供的一个操作类,用于对原始Jdbc API对象的简单封装。
2、JdbcTemplate 的创建
我们如何创建一个JdbcTemplate对象呢?不妨,我们通过简单分析一下JdbcTemplate的源码,从而理解创建一个JdbcTemplate对象需要声明前提条件。
源码如下:
public JdbcTemplate() {
} /**
* Construct a new JdbcTemplate, given a DataSource to obtain connections from.
* <p>Note: This will not trigger initialization of the exception translator.
* @param dataSource the JDBC DataSource to obtain connections from
*/
public JdbcTemplate(DataSource dataSource) {
setDataSource(dataSource);
afterPropertiesSet();
} /**
* Construct a new JdbcTemplate, given a DataSource to obtain connections from.
* <p>Note: Depending on the "lazyInit" flag, initialization of the exception translator
* will be triggered.
* @param dataSource the JDBC DataSource to obtain connections from
* @param lazyInit whether to lazily initialize the SQLExceptionTranslator
*/
public JdbcTemplate(DataSource dataSource, boolean lazyInit) {
setDataSource(dataSource);
setLazyInit(lazyInit);
afterPropertiesSet();
}
通过这段代码我们可以理解,创建一个JdbcTemplate对象,需要一个获得数据库连接的的数据源。就类似于我们以前学习JDBC技术的时候,获得操作对象Statement对象,必须要有数据库连接一样!!所以要创建JdbcTemplate对象,必须学会在Spring里面配置数据源。
3、Spring 配置数据源
① 环境搭建
第一步:导入包
第二步:配置文件准备
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"> </beans>
第三步:配置数据源
市面上主流的连接池有两个。一个是C3P0,一个是DBCP。要想使用这两数据源都需要导入对应的jar包。
问题:我们原来使用数据库连接Connection就可以连接数据库了,但是为什么需要使用DataSource来获取数据库连接呢?
答:因为使用Connection获得数据库连接,每次操作都需要打开和关闭数据库,效率不高!
使用DataSource来获得数据库连接,涉及一个概念连接池!!!所以使用数据源的概念可以整合连接池!!市场上主流的连接池有:DBCP,C3P0.
配置C3P0数据源
导入 c3p0的jar包到工程的lib目录。在spring的配置文件中配置:
<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///spring_day04"></property>
<property name="user" value="root"></property>
<property name="password" value="1234"></property>
</bean>
配置DBCP数据源:
导入 commons-dbcp2-2.1.1.jar 和 commons-pool2-2.4.2.jar 到工程的 lib 目录。在 spring 的配置文件中配置:
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:// /spring_day04"></property>
<property name="username" value="root"></property>
<property name="password" value="1234"></property>
</bean>
配置 spring jdbc 内置数据源:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///spring_day04"></property>
<property name="username" value="root"></property>
<property name="password" value="1234"></property>
</bean>
4、JdbcTemoplate 的增删改查操作
注意:测试要导入spring-test-4.2.9.RELEASE.jar包
配置文件:
<?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-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/sms"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean> <!-- 配置JdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 配置指定连接池 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
实体类:
package com.sxt.entity; public class Student { private Long stuId;//BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '学生编号',
private String stuName;//VARCHAR(50) NULL DEFAULT NULL COMMENT '学生名字',
private String stuAge;//INT(11) NULL DEFAULT NULL COMMENT '学生年龄',
private String stuPassword;//VARCHAR(50) NULL DEFAULT NULL COMMENT '登录密码',
public Long getStuId() {
return stuId;
}
public void setStuId(Long stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getStuAge() {
return stuAge;
}
public void setStuAge(String stuAge) {
this.stuAge = stuAge;
}
public String getStuPassword() {
return stuPassword;
}
public void setStuPassword(String stuPassword) {
this.stuPassword = stuPassword;
}
}
实现代码:
package com.sxt.test; import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; import javax.sql.DataSource; import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.sxt.entity.Student; @RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:bean.xml")
public class JdbcTemplateTest { @Autowired
private DataSource datasource;
@Autowired
private JdbcTemplate jdbctemplate; /**
* 测试数据源是否成功
*/
@Test
public void dataSource() {
try {
System.out.println(datasource.getConnection());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
* 测试jdbctemplate对象是否成功
*/
@Test
public void jdbctemplate() {
System.out.println(jdbctemplate);
} /**
* 测试jdbctemplate插入数据
*/
@Test
public void insert() { jdbctemplate.update("INSERT INTO tb_student (stu_name, stu_age, stu_password) VALUES (?, ?, ?)", new Object[] {"o1",30,"999"});
} /**
* 测试jdbctemplate删除数据
*/
@Test
public void delete() { jdbctemplate.update("DELETE FROM tb_student WHERE stu_id=?", 15);
} /**
* 测试jdbctemplate更新数据
*/
@Test
public void update() { jdbctemplate.update("UPDATE tb_student SET stu_name=? WHERE stu_id=?", new Object[] {"测试",16});
} /**
* 测试jdbctemplate查询所有数据返回List
*/
@Test
public void findAll() {
List<Map<String, Object>> students = jdbctemplate.queryForList("SELECT * FROM tb_student"); for (Map<String, Object> student : students) {
System.out.println("学生名:" + student.get("stu_name"));
}
} /**
* 测试jdbctemplate查询返回一个Map
*/
@Test
public void getByMap() {
Map<String, Object> entity = jdbctemplate.queryForMap("SELECT * FROM tb_student WHERE stu_id=?",1);
System.out.println(entity.get("stu_name"));
} /**
* 测试jdbctemplate查询返回一个JavaBean
*/
@Test
public void getByEntity() {
ResultSetExtractor<Student> rowMapper = new ResultSetExtractor<Student>() {
@Override
public Student extractData(ResultSet rs) throws SQLException, DataAccessException {
Student student=new Student();
if(rs.next()) { student.setStuName(rs.getString("stu_name"));
}
return student;
}
}; Student student = jdbctemplate.query("SELECT * FROM tb_student WHERE stu_id=?",new Object[] {1}, rowMapper);
System.out.println(student.getStuName());
} /**
* 测试测试jdbctemplate查询返回一个JavaBean元素的List
*/
@Test
public void getByEntityList() {
ResultSetExtractor<List<Student>> rowMapper = new ResultSetExtractor<List<Student>>() { @Override
public List<Student> extractData(ResultSet rs) throws SQLException, DataAccessException {
List<Student> students =new ArrayList<Student>();
while(rs.next()) {
Student student=new Student();
student.setStuId(rs.getLong("stu_id"));
student.setStuName(rs.getString("stu_name"));
student.setStuPassword(rs.getString("stu_password"));
students.add(student);
}
return students;
}
}; List<Student> query = jdbctemplate.query("SELECT * FROM tb_student", rowMapper);
for (Student student : query) {
System.out.println(student.getStuName());
}
}
}
Spring JDBC概述的更多相关文章
- Spring JDBC Framework详解——批量JDBC操作、ORM映射
转自:https://blog.csdn.net/yuyulover/article/details/5826948 一.spring JDBC 概述 Spring 提供了一个强有力的模板类JdbcT ...
- Spring JDBC
转载:博客主页:http://blog.csdn.NET/chszs 一.概述 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1)core即核心包,它包含了JDBC的核心功能.此包内 ...
- Spring Jdbc 框架整合的第一天
Spring Jdbc的概述 它是Spring框架的持久层子框架.用于对数据库的操作 什么是数据库的操作? 答:对数据库的增删改查 在使用Spring Jdbc框架,要用到一个类---->J ...
- 11.Spring——JDBC框架
1.DBC 框架概述 2.Spring JDBC 示例 3.Spring 中 SQL 的存储过程 1.DBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关 ...
- (转)Spring的概述
http://blog.csdn.net/yerenyuan_pku/article/details/69663685 Spring的概述 什么是Spring 据度娘所载: Spring是一个开源框架 ...
- Spring JDBC 框架使用JdbcTemplate 类的一个实例
JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQ ...
- spring jdbc 查询结果返回对象、对象列表
首先,需要了解spring jdbc查询时,有三种回调方式来处理查询的结果集.可以参考 使用spring的JdbcTemplate进行查询的三种回调方式的比较,写得还不错. 1.返回对象(queryF ...
- spring jdbc获取插入记录的主键id
在JDBC3.0规范中,当新增记录时,允许将数据库自动产生的主键值绑定到Statement或PreparedStatement中.使用Statement时,可以通过以下方法绑定主键值: int exe ...
- Spring JDBC实现查询
1 db.properties jdbc.user=root jdbc.password=920614 jdbc.driverClass=com.mysql.jdbc.Driver jdbc.jdbc ...
随机推荐
- 方法join()使用详解
在线程的常见方法一节中,已经接触过join()方法的使用. 在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程将早于子线程结束.这时,如果主线程想等子线程执行完成才结束,比 ...
- C++拷贝构造函数(深拷贝&浅拷贝)
对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=88; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. ...
- Jquery的一些常见用法
谨以此文怀念我们大学的时光,Jquery3.4.0下载 https://code.jquery.com/jquery-3.4.0.min.js ⒈常用方法 $("#div1").h ...
- 【MongoDB】 Failed to connect to 127.0.0.1:27017, reason: Connection refused
由于项目需要,在一台虚拟机上安装了MongoDB,但是在启动的时候,出现如下错误: [root@localhost bin]# ./mongo MongoDB shell version v3.4.0 ...
- 【ARTS】01_20_左耳听风-20190325~20190331
zz## ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 ...
- Deep Learning Tutorial - Convolutional Neural Networks(LENET)
CNN很多概述和要点在CS231n.Neural Networks and Deep Learning中有详细阐述,这里补充Deep Learning Tutorial中的内容.本节前提是前两节的内容 ...
- windowns下excel2013快速生成月报表
作者:邓聪聪 windowns下excel快速生成月报表,省去了手工复制繁琐的过程 Sub AutoCopySheets() Dim i, j As Integer i = 1 j = 11 For ...
- 题解-poj3682King Arthur's Birthday Celebration
Problem poj-3682 题目大意:抛一次硬币有\(p\)的概率得到正面,当有\(n\)次正面时停止,抛第\(i\)次的花费为\(2i-1\),求抛的期望次数和期望花费 Solution 本来 ...
- Unity3D Shader 入门
什么是Shader Shader(着色器)是一段能够针对3D对象进行操作.并被GPU所执行的程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这 ...
- sqlserver 2012 分页
--2012的OFFSET分页方式 select number from spt_values where type='p' order by number offset 10 rows fetch ...