Spring  Jdbc的概述

它是Spring框架的持久层子框架。用于对数据库的操作

什么是数据库的操作?

答:对数据库的增删改查

在使用Spring  Jdbc框架,要用到一个类---->JdbcTemplate,他是spring  jdbc  子框架中提供的一个操作类,用于对原始jabc  API的简单封装

那么如何创建Template呢?

首先看一下它的源码:

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 对象,需要获得一个数据库连接的数据源

如何获得一个数据库连接的数据源呢?

org.springframework.jdbc.datasource.DriverManagerDataSource,这个路径位于jdbc驱动包中

再配置springjdbc的四要素:

实现代码:

配置文件代码:

<?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.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!--配置一个数据源
由于jjabc模块提供的DriverManagerDataSource数据源,是一个直连数据源,
所以每次访问数据库,都要去打开连接才能访问,效率不高!
所以引入了连接池的概念。。。
连接池中的四个重要属性
1.最大超时毫秒数
2.最大连接数
3.最小连接数
4.最大空闲时间 destroy-method:在连接池对象注销之前,先关闭数据库(关闭连接池) -->
<!-- 数据源的作用:获得数据库的链接,从而引出springJDBC的四要素 -->
<bean name="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<!-- 配置springJDBC四要素 -->
<!-- 驱动 -->
<property name="driverClassName" value="org.gjt.mm.mysql.Driver"></property>
<!-- 连接字符串 -->
<property name="url" value="jdbc:mysql://localhost:3306/sms"></property>
<!-- 用户名 -->
<property name="username" value="root"></property>
<!-- 密码 -->
<property name="password" value="1234"></property>
<!-- 最大超时毫秒数 -->
<property name="maxWaitMillis" value="30000"></property>
<!-- 最大连接数 -->
<property name="maxTotal" value="100"></property>
<!-- 最小连接数 -->
<property name="initialSize" value="50"></property>
<!-- 最大空闲连接 -->
<property name="maxIdle" value="55"></property>
</bean> <!-- 获得JDBCTemplate操作对象 -->
<bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 设置 -->
<property name="dataSource" ref="dataSource"></property>
</bean> <!-- 配置dao -->
<bean name="studentDAO" class="cn.gzsxt.dao.StudentDAO">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean> </beans>

dao层:

package cn.gzsxt.dao;

import org.springframework.jdbc.core.JdbcTemplate;

import cn.gzsxt.pojo.Student;

public class StudentDAO implements DAO<Student>{

    private JdbcTemplate JdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
JdbcTemplate = jdbcTemplate;
} @Override
public int insert(Student entity) {
// TODO Auto-generated method stub //事物的操作(增删改)都可以是update方法
Object [] objects = {entity.getStuName(),entity.getStuPwd()};
int update = JdbcTemplate.update("INSERT INTO t_student(stuName,stuPwd) VALUES(?,?)", objects);
return update;
} }

pojo层

package cn.gzsxt.pojo;

import java.io.Serializable;

public class Student implements Serializable{

    /**什么是序列化?
* 将对象通过流的形式写出去
* 反序列化
* 读取流形式的数据
*
*/
private static final long serialVersionUID = 114525114257637298L;
private int stuId;
private String stuName;
private String stuPwd;
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getStuPwd() {
return stuPwd;
}
public void setStuPwd(String stuPwd) {
this.stuPwd = stuPwd;
}
public Student(int stuId, String stuName, String stuPwd) {
super();
this.stuId = stuId;
this.stuName = stuName;
this.stuPwd = stuPwd;
}
public Student() {
super();
// TODO Auto-generated constructor stub
} }

测试代码:

package cn.gzsxt.test;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.gzsxt.dao.StudentDAO;
import cn.gzsxt.pojo.Student; public class ApplicationContextTest {
private StudentDAO studentDAO;
private ClassPathXmlApplicationContext conn; @Before
public void Before(){
conn = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
//获得数据源对象
studentDAO = conn.getBean(StudentDAO.class);
} @After
public void after(){
conn.close();
} /**
* junit代替main方法,使得类能同时有多个main方法的功能
* 使用时要注意,返回值必须为空,为void
*/
// @Test
// public void dataSource(){
// //通过配置文件创建容器
// ClassPathXmlApplicationContext conn = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
//
// //获取数据源对象
// DataSource dataSource = conn.getBean(DataSource.class);
//
// try {
// //打印数据库链接地址,测试连接是否成功
// System.out.println(dataSource.getConnection());
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//
// }
@Test
public void insert(){
Student entity = new Student();
entity.setStuName("王八");
studentDAO.insert(entity); }
}

spring jdbc 的优化!

由于jdbc模块提供的DriverManagerDataSource数据源,是一个直连数据源,所以每次访问数据库,都要去打开连接才能访问,效率不高,所以引入了连接池的概念,连接池的四个重要属性:

1.最大超时毫秒数

2.最大连接数

3.最小连接数

4.最大空闲时间

如何关闭连接池呢?

destroy-method:在连接池对象注销之前,先关闭数据库(关闭连接池)

Spring Jdbc 框架整合的第一天的更多相关文章

  1. RabbitMQ与Spring的框架整合之Spring Boot实战

    1.RabbitMQ与Spring的框架整合之Spring Boot实战. 首先创建maven项目的RabbitMQ的消息生产者rabbitmq-springboot-provider项目,配置pom ...

  2. Spring JDBC 框架使用JdbcTemplate 类的一个实例

    JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQ ...

  3. struts2 + spring + mybatis 框架整合详细介绍

    struts2 + spring + mybatis  框架整合详细介绍 参考地址: https://blog.csdn.net/qq_22028771/article/details/5149898 ...

  4. ref:Spring JDBC框架

    ref:https://blog.csdn.net/u011054333/article/details/54772491 Spring JDBC简介 先来看看一个JDBC的例子.我们可以看到为了执行 ...

  5. spring boot 学习(二)spring boot 框架整合 thymeleaf

    spring boot 框架整合 thymeleaf spring boot 的官方文档中建议开发者使用模板引擎,避免使用 JSP.因为若一定要使用 JSP 将无法使用. 注意:本文主要参考学习了大神 ...

  6. 11.Spring——JDBC框架

    1.DBC 框架概述 2.Spring JDBC 示例 3.Spring 中 SQL 的存储过程 1.DBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关 ...

  7. Spring JDBC 框架 简介

    在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等. 但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常 ...

  8. spring三大框架整合

        Spring概述 Spring介绍 Spring它是一个一站式的分层轻量级框架. Spring体系结构 1.      core container a)        beans与core ...

  9. SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

随机推荐

  1. 修复android 5.0 Xutils的框架问题retry error, curr request is null

    Android 5.0手机对xUtils-2.6.13.jar请求时会出现retry error, curr request is null 情况, 修复解决方式: 找到library/src/com ...

  2. idea java.lang.OutOfMemoryError: PermGen space

    测试修改 idea  vm.options 无效 , 跟eclipse类似 成功如下 -Xms800m -Xmx800m -XX:MaxNewSize=256m -XX:MaxPermSize=256 ...

  3. Golang学习教程

    字节跳动已经全线从Python转Golang了,可能开始学习Golang这门语言会觉得无所适从,和Java,C++,Python等都不大一样,但是用多了会发现这门语言设计的还是很优雅的,下面总结Gol ...

  4. 微信OAuth2.0网页授权设置一个域名需多个域名使用的问题

    最近遇到一个问题,一个微信公众号,需要在多个域名上使用OAuth2.0网页授权,但微信OAuth2.0网页授权回调域名只能设置一个. 解决办法: 通过多一次的跳转,解决了微信限制回调域名只能设置一个的 ...

  5. 6 个开源的家庭自己主动化工具 | Linux 中国

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79466841 wx_fmt=jpeg& ...

  6. 【Clojure 基本知识】小技巧s

    ;;模拟console原位更新输出 ;;空格擦除法,输出空格,是为了擦除短字符串尾部没有占用的位置,因为退格只是回退,并不删除(dotimes [_ 10](let [n (rand) sn (.su ...

  7. Python连接Mssql

    此篇使用的是Python3.6 下载pymssql包 打开网址http://www.lfd.uci.edu/~gohlke/pythonlibs/ 用pip安装whl文件.在cmd中输入 pip in ...

  8. 【netcore基础】ConcurrentDictionary 使用字符串作为key给代码加锁且使用EF事物防止并发调用数据混乱的问题

    业务场景需要锁住指定的字符串下的代码,防止并发创建多个订单 这里我们使用 ConcurrentDictionary 首先初始化一个字典 private static readonly Concurre ...

  9. Factory——工厂方法

    一.定义 GOF上对工厂方法的意图如此描述:定义一个用于创建对象的接口,让子类决定实例化哪个类.Factory Method使一个类的实例化延迟到其子类. 作为类的开发者,我们通常会在类中提供构造器方 ...

  10. ubuntu14.04 terminator字体挤在一起问题

    字体挤在一起:在ubuntu下请选择mono后缀的字体就可以了 右键—>首选项—>profile—>general—>字体设置成ubuntu mono 或Free mono