Spring JDBC Template Spring 框架中的 JDBC Template,有了 JDBC Template 就不需要自己再手动书写很长的 JDBC 代码来访问数据库了。
知识点
Spring JDBC Template 增
Spring JDBC Template 删
Spring JDBC Template 改
Spring JDBC Template 查
Spring JDBC 框架
Spring 框架核心的思想就是建立一个 Java 对象的大工厂,用户只要给工厂一个指令,工厂就能将用户需要的对象根据配置文件组装好返还给用户。用户需要做的许多工作则可以写成简单的配置文件。传统的使用 JDBC 的方法,有时候需要组合复杂的的 SQL 语句,还需要去拼接,稍不注意空格、引号,都会导致错误。Spring Jdbc Template 正是为了减少上述的麻烦而设计出来的。它是对 JDBC 的一种封装,抽象我们常用的一些方法。Simple and Stupid 就是它的目标。
Spring Jdbc Template 使用 Spring 的注入功能,可以把 DataSource 注册到 JdbcTemplate 之中。JdbcTemplate 的全限定命名为 org.springframework.jdbc.core.JdbcTemplate。要使用 JdbcTemlate 还需一个 spring-tx 包,这个包包含了事务和异常控制。
JdbcTemplate 主要提供以下五类方法:
execute 方法:可以用于执行任何 SQL 语句,一般用于执行 DDL 语句。
update 方法:用于执行新增、修改、删除等语句。
batchUpdate 方法:用于执行批处理相关语句。
queryForXXX 方法:用于执行查询相关语句。
call 方法:用于执行查询相关语句,执行存储过程、函数相关语句。
接下来我们就将依次看看 JdbcTemplate 中的常用方法,来实现对数据库的增删改查。
Spring JDBC Template 增 为了方便,我们在这里新建一个数据库并取名 jdbc 用作本次编程。
1 2 3 4 create database jdbc; use jdbc; create tables student(id int,name varchat(20),age int); insert into student values(1,'admin',18);
完成上面的sql
新建项目 1 mvn archetype:generate -DgroupId=com.learn.jdbc -DartifactId=springJdbc -DarchetypeArtifactId=maven-archetype-quickstart
修改 pom.xml 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 <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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.learn.jdbc</groupId> <artifactId>springJdbc</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>springJdbc</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <spring.version>5.1.1.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project>
我们先在 src/main/ 下新建一个 Folder,命名为 resources,现在可以开始创建 Spring Bean 配置文件,创建文件 SpringBeans.xml,配置 bean 如下。文件位于 src/main/resources 下。
编辑 SpringBeans.xml 文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <?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"> <context:annotation-config/> <bean id = "dataSource" class = "org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name = "driverClassName" value = "com.mysql.jdbc.Driver"/> <property name = "url" value = "jdbc:mysql://localhost/jdbc"/> <property name = "username" value = "root"/> <property name = "password" value = ""/> </bean> <bean id = "jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate"> <property name = "dataSource" ref = "dataSource"/> </bean> </beans>
注意 上面的mysql 配置 一定要配置自己的 (如果你的环境和我不一样的话)
最后创建 App.java,在包路径 com.learn.jdbc 下,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package com.learn.jdbc; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jdbc.core.JdbcTemplate; public class App { private static ApplicationContext context; public static void main(String[] args) { context = new ClassPathXmlApplicationContext("SpringBeans.xml"); JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate"); String sql = "insert into student values(?,?,?)"; int count = jdbcTemplate.update(sql,new Object[]{2,"learn2",18}); System.out.println(count); } }
运行程序:
1 2 mvn compile mvn exec:java -Dexec.mainClass = "com.learn.jdbc.App"
然后我们去查看数据库 应该可以 查看 到数据库已经多了一条数据
Spring JDBC Template 删 JdbcTemplate 删除数据还是通过调用 update() 方法实现的,修改 App.java 中的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package com.learn.jdbc; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jdbc.core.JdbcTemplate; public class App { private static ApplicationContext context; public static void main(String[] args) { context = new ClassPathXmlApplicationContext("SpringBeans.xml"); JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate"); String sql = "delete from student where id=?"; int count = jdbcTemplate.update(sql,2); System.out.println(count); } }
运行:
1 2 mvn compile mvn exec:java -Dexec.mainClass = "com.learn.jdbc.App"
运行完毕之后 我们会发现,ID=2的数据已经被删除了.
Spring JDBC Template 改 JdbcTemplate 修改数据还是通过调用 update() 方法实现的,修改 App.java 中的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package com.learn.jdbc; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jdbc.core.JdbcTemplate; public class App { private static ApplicationContext context; public static void main(String[] args) { context = new ClassPathXmlApplicationContext("SpringBeans.xml"); JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate"); String sql = "update student set name=?,age=? where id=?"; int count = jdbcTemplate.update(sql,new Object[]{"learn1",20,1}); System.out.println(count); } }
运行:
1 2 mvn compile mvn exec:java -Dexec.mainClass = "com.learn.jdbc.App"
Spring JDBC Template 查 JdbcTemplate 查询数据可以通过 queryForObject 和 query 来实现,queryForObject 用于查询单条数据,query 用于查询多条语句。
查询单条语句 首先创建包 com.learn.jdbc.entity,创建 Student.java,代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package com.learn.jdbc.entity; public class Student { private int id; private String name; private int age; public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
修改 App.java 中的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package com.learn.jdbc; import com.learn.jdbc.entity.Student; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; public class App { private static ApplicationContext context; public static void main(String[] args) { context = new ClassPathXmlApplicationContext("SpringBeans.xml"); JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate"); String sql = "select * from student"; RowMapper<Student> rowMapper = new BeanPropertyRowMapper<Student>(Student.class); Student student = jdbcTemplate.queryForObject(sql,rowMapper); System.out.println(student); } }
运行程序:
1 2 mvn compile mvn exec:java -Dexec.mainClass = "com.learn.jdbc.App"
可以看到终端中已经打印出了查询到的数据
查询多条语句 首先在 student 数据库中添加几条数据
修改 App.java 中的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package com.learn.jdbc; import com.learn.jdbc.entity.Student; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import java.util.List; public class App { private static ApplicationContext context; public static void main(String[] args) { context = new ClassPathXmlApplicationContext("SpringBeans.xml"); JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate"); String sql = "select * from student"; RowMapper<Student> rowMapper = new BeanPropertyRowMapper<Student>(Student.class); List<Student> students = jdbcTemplate.query(sql,rowMapper); for(Student student:students){ System.out.println(student); } } }
运行程序:
1 2 mvn compile mvn exec:java -Dexec.mainClass = "com.learn.jdbc.App"
可以看到终端中已经打印了三条数据