Spring07 —— Spring JdbcTemplate的使用
往期文章
Spring01 —— Spring概念及快速入门
Spring02 —— Spring配置文件详解和依赖注入
Spring03 —— SpringAPI和在Spring中配置数据源
Spring04 —— Spring的注解开发
Spring05 —— Spring集成Junit
Spring06 —— Spring集成web环境
SpringMVC01 —— SpringMVC简介&快速入门
SpringMVC02 —— SpringMVC的各组件详解
SpringMVC03 —— Spring的请求和响应
本文目录
- 往期文章
- Spring JdbcTemplate
-
- 1、Jdbctemplate简介
- 2、Jdbctemplate的使用步骤
- 3、jdbctemplate快速入门
- 4、Spring生成模板对象jdbctemplate
- 5、抽取jdbc.properties
- 6、jdbctemplate常用操作
-
- 6.1、更新操作
- 6.2、新增操作
- 6.3、删除操作
- 6.4、查询
- 7、知识小结
前言:
我们已经知道了 Spring提供的web框架是SpringMVC,业务层有Spring,那么对于数据库的操作Spring也提供了 Spring JDBC模块帮助我们进行简洁开发。
总所周知jdbc是一套操作所有关系型数据库的规则,即接口,各个数据库厂商去实现这个结构然后提供相应驱动jar包。但在实际的企业级应用开发中,我们很少直接使用原生的 JDBC API 进行开发,这是因为使用 JDBC API 对数据库进行操作十分繁琐,需要我们对每一步都做到“步步把控,处处关心”,例如我们需要手动控制数据库连接的开启,异常处理、事务处理、最后还要手动关闭连接释放资源等等。所以Spring就帮我们封装了原始的jdbc操作,提供一个Spring JDBC模块使得开发者使用起来更加简单。
Spring JdbcTemplate
1、Jdbctemplate简介
JdbcTemplate是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的JdbcTemplate和HibernateTemplate,操作nosql数据库的RedisTemplate,操作消息队列的JmsTemplate等等
开发者只需要关注一些必要的参数,无需过度关注驱动的加载,数据库连接的开启与关闭、SQL 语句的创建与执行、异常处理以及事务处理等繁杂乏味的工作。
JdbcTemplate 是 Spring JDBC 核心包(core)中的核心类,它可以通过配置文件、注解、Java 配置类等形式获取数据库的相关信息,实现了对 JDBC 开发过程中的驱动加载、连接的开启和关闭、SQL 语句的创建与执行、异常处理、事务处理、数据类型转换等操作的封装。我们只要对其传入SQL 语句和必要的参数即可轻松进行 JDBC 编程。
JdbcTemplate 的全限定命名为 org.springframework.jdbc.core.JdbcTemplate
2、Jdbctemplate的使用步骤
①导入spring-jdbc和spring-tx坐标
②创建数据库表和实体
③创建JdbcTemplate对象
④执行数据库操作
3、jdbctemplate快速入门
【1】导入依赖坐标
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zhou</groupId> <artifactId>spring_jdbcTemplete</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.0.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.0.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.0.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.0.5.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> </dependency> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.3</version> </dependency> </dependencies></project>
【2】准备数据库环境
CREATE TABLE IF NOT EXISTS products(id INT PRIMARY KEY AUTO_INCREMENT,pname VARCHAR(20),price DOUBLE);SELECT * FROM products;INSERT INTO products VALUES(NULL,'苹果',20);INSERT INTO products VALUES(NULL,'香蕉',8)INSERT INTO products VALUES(NULL,'栗子',14);INSERT INTO products VALUES(NULL,'猕猴桃',10);INSERT INTO products VALUES(NULL,'草莓',22);
【3】编码
public class JdbcTemplateTest { @Test public void test1() throws PropertyVetoException { // 创建数据源 ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/study"); dataSource.setUser("root"); dataSource.setPassword("123456"); // 创建jdbc模板对象 需要设置数据源信息 JdbcTemplate template = new JdbcTemplate(dataSource); // 定义sql String sql = "INSERT INTO products VALUES(NULL,'菠萝',12)"; // 执行sql int i = template.update(sql); System.out.println(i); }}
【4】测试
4、Spring生成模板对象jdbctemplate
我们可以将JdbcTemplate的创建权交给Spring,将数据源DataSource的创建权也交给Spring,在Spring容器内部将数据源DataSource注入到JdbcTemplate模版对象中,然后通过Spring容器获得JdbcTemplate对象来执行操作。
在spring核心配置文件applicationContext.xml文件中配置:
<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.xsd"> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/study"/> <property name="user" value="root"/> <property name="password" value="123456"/> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean></beans>
测试:
@Test public void test2(){ // 通过spring容器获取jdbctemplate ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml"); JdbcTemplate template = app.getBean("jdbcTemplate", JdbcTemplate.class); // 定义sql String sql = "select * from products"; // 执行sql List<Product> productList = template.query(sql, new BeanPropertyRowMapper<Product>(Product.class)); for (Product product : productList) { System.out.println(product); } }}
5、抽取jdbc.properties
将数据库的连接信息抽取到外面的配置文件中达到解耦和的目的,和Spring配置文件分离开,有利于后期维护。
在spring核心配置文件applicationContext.xml文件中引入
引入外部的配置文件需要context命名空间,所以要先引入context命名空间
6、jdbctemplate常用操作
jdbcTemplate的常用操作就是增删改查
其中增删改数据更新操作 使用update()方法
查询使用query方法,但是这里面有很多方法,query、queryForObject、queryForList等,这里不做详细描述。我们这里使用常用的两个方法,query queryForObject进行案例测试。
6.1、更新操作
使用Spring集成junit进行测试。回顾Spring集成junit的步骤
1、导入相关依赖
2、使用@RunWith改变运行期
3、使用@ContextConfiguration指定配置文件或配置类
4、使用@Autowired注入需要测试的对象
5、创建测试方法进行测试
@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class JdbcTemplateTest2 { @Resource(name = "jdbcTemplate") private JdbcTemplate template; // 更新操作 @Test public void testUpdate(){ String sql = "update products set price=? where id=?"; int row = template.update(sql, 90, 1); // 修改id为1的价格为90 System.out.println(row); }}
6.2、新增操作
// 新增@Testpublic void testInsert(){ String sql = "insert into products values(null,?,?)"; int row = template.update(sql, "哈密瓜", 30); // 新增一个水果种类 System.out.println(row);}
6.3、删除操作
// 删除@Testpublic void testDelete(){ String sql = "delete from products where id = ?"; int row = template.update(sql, 2); // 将id为2的删除 System.out.println(row);}
6.4、查询
// 查询@Testpublic void testSelect(){ String sql = "select * from products"; List<Product> products = template.query(sql, new BeanPropertyRowMapper<Product>(Product.class)); System.out.println(products);}
// 查询 @Test public void testSelect(){ String sql = "select count(id) from products"; Integer count = template.queryForObject(sql, Integer.class); System.out.println(count); }
7、知识小结
jdbctemplate的使用步骤
①导入spring-jdbc和spring-tx坐标
②创建数据库表和实体
③创建JdbcTemplate对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
④编写sql
⑤执行sql
与50位技术专家面对面 20年技术见证,附赠技术全景图