当前位置: 首页 > ops >正文

Spring 框架的JDBC 模板技术

一、JDBC 模板技术概述

1、什么模板技术?

  Spring 框架中提供了很多持久层的模板类来简化编程,使用模板类编写程序会变的简单。

2、template 模板

  都是 Spring 框架来提供XxxTemplate,比如Spring框架提供了 JDBC 模板。

  JdbcTemplate 类,Connection 表示连接,管理事务 Statement ResultSet。

二、JDBC 的模板类使用

  Jdbc 模板类的使用,创建 maven 工程,引入坐标依赖。

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.12</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>aopalliance</groupId><artifactId>aopalliance</artifactId><version>1.0</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.13</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.0.2.RELEASE</version></dependency>
</dependencies>

    其中,Spring框架的JDBC模板是否能使用取决于Spring-jdbc包。

    编写测试代码(自己来 new 对象的方式)

package com.qcbyjy.test;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;public class Demo1 {
/**
* 使用 new 对象方式完成
*/@Testpublic void run1(){// 创建连接池对象,Spring 框架内置了连接池对象DriverManagerDataSource dataSource = new DriverManagerDataSource();// 设置 4 个参数dataSource.setDriverClassName("com.mysql.jdbc.Driver");dataSource.setUrl("jdbc:mysql:///spring_db");dataSource.setUsername("root");dataSource.setPassword("2005");// 提供模板,用有参构造器创建对象JdbcTemplate template = new JdbcTemplate(dataSource);// 完成数据的增删改查template.update("insert into account values (null,?,?)","熊大",1000);}
}

   在上述代码中,通过new关键字使用有参构造器创建template对象,而这个参数传的是连接池对象dataSource,其中包括了四个参数。

  此外,除了有参构造器创建对象,还可以使用set方法。

  所有的修改都用update,所有的查询都用select。

三、使用 Spring 框架来管理模板类

刚才编写的代码使用的是 new 的方式,应该把这些类交给 Spring 框架来管理。

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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-be
ans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/springcontext.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.
xsd">
<!--配置连接池-->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"
/>
<property name="url" value="jdbc:mysql:///spring_db" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<!--配置 jdbc 模板-->
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
编写测试方法
package com.qcbyjy.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* 达内教育 -- 腾讯课程认证机构
* 史招阳
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = "classpath:applicationContext_jdbc.xml")
public class Demo1_1 {
@Autowired
private JdbcTemplate jdbcTemplate;
/**
* 测试的方式
*/
@Test
public void run1(){
jdbcTemplate.update("insert into account values (null,?,?)"," 熊二",500);
}
}

四、Spring 框架管理开源的连接池

配置开源的连接池,使用 Druid 开源的连接池,引入坐标如下

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
将数据库连接的信息配置到属性文件中
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///spring_db
jdbc.username=root
jdbc.password=root
完成核心配置
<?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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-be
ans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/springcontext.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.
xsd">
<!--配置连接池,使用的是 Spring 框架内置的连接池
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"
/>
<property name="url" value="jdbc:mysql:///spring_db" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
-->
<!--使用开源连接池
<bean id="dataSource"
class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"
/>
<property name="url" value="jdbc:mysql:///spring_db" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
-->
<!--加载属性文件
<bean id="placeholderConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderC
onfigurer">
<property name="location" value="classpath:jdbc.properties" />
</bean>
-->
<!--第二种写法:使用提供标签的方式-->
<context:property-placeholder
location="classpath:jdbc.properties" />
<!--加载属性的文件-->
<bean id="dataSource"
class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName"
value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!--配置 jdbc 模板-->
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>

五、Spring 框架的 JDBC 模板的简单操作

增删改查代码编写

import com.qcbyjy.demo1.Account;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.test.context.ContextConfiguration;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = "classpath:applicationContext_jdbc.xml")
public class Demo1_1 {
@Autowired
private JdbcTemplate jdbcTemplate;
/**
* 测试的方式
*/
@Test
public void run1(){
jdbcTemplate.update("insert into account values (null,?,?)"," 熊四",800);
}
/**
* 修改
*/
@Test
public void run2(){
jdbcTemplate.update("update account set name = ?,money = ? where
id = ?","光头强",100,7);
}
/**
* 删除
*/
@Test
public void run3(){
jdbcTemplate.update("delete from account where id = ?",7);
}
/**
* 通过 id 查询
*/
@Test
public void run4(){
Account account = jdbcTemplate.queryForObject("select * from
account where id = ?", new BeanMapper(), 6);
System.out.println(account);
}
/**
* 查询所有的数据
*/
@Test
public void run5(){
List<Account> list = jdbcTemplate.query("select * from account",
new BeanMapper());
for (Account account : list) {
System.out.println(account);
}
}
}
/**
* 实现类,用来进行数据封装的
*/
class BeanMapper implements RowMapper<Account>{
/**
* 是一行一行进行数据封装的
* @param resultSet
* @param i
* @return
* @throws SQLException
*/
@Override
public Account mapRow(ResultSet resultSet, int i) throws
SQLException {
Account account = new Account();
account.setId(resultSet.getInt("id"));
account.setName(resultSet.getString("name"));
account.setMoney(resultSet.getDouble("money"));
return account;
}
}

http://www.xdnf.cn/news/8504.html

相关文章:

  • 使用Python控制Arduino——入门与实战
  • Axure酒店管理系统原型
  • 【如何做好一份技术文档?】用Javadoc与PlantUML构建高质量技术文档(API文档自动化部署)
  • 正则表达式进阶(四):性能优化与调试技巧
  • STM32中的IIC协议和OLED显示屏
  • day26CSS-Sass、Stylus、Less
  • 使用Spring Boot和Spring Security结合JWT实现安全的RESTful API
  • DOM事件的注册和移除
  • 算法学习——从零实现循环神经网络
  • JavaScript从入门到精通(一)
  • JVM学习(四)--对象内存布局
  • AMD硬件笔试面试题型解析
  • 从 0 到 1!Java 并发编程基础全解析,零基础入门必看!
  • 【音频】drc 限幅器、多带限幅器、压缩器、多带压缩器
  • 自制操作系统day9内存管理(cache、位图、列表管理、内存的释放)
  • STM32 CubeMX时钟配置PWM信号输出
  • 生成模型——PixelRNN与PixelCNN
  • 生成模型——扩散模型(Diffusion Model)
  • 阿里云服务器 篇十五:自动签到服务(基于Cookie,脚本和数据分离)
  • 论文学习记录之《DiffusionVel》
  • 文档结构化专家:数字化转型的核心力量
  • Java[IDEA]里的debug
  • 对称加密中GCM和CBC俩种加密模式的区别
  • 八股碎碎念02——Synchronized
  • 氢气传感器维护常见问题及解决方法
  • RK常见系统属性设置/获取命令使用
  • 文章记单词 | 第102篇(六级)
  • STM32 SPI通信(软件)
  • K3S集群使用自签署证书拉取私有仓库镜像
  • 图片转excel表格 非常好用