Spring(十二)之JDBC框架
JDBC 框架概述在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等。但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常,处理事务,到最后关闭连接。 所以当从数据库中获取数据时,你所做的是定义连接参数,指定要执行的 SQL 语句,每次迭代完成所需的工作。 Spring JDBC 提供几种方法和数据库中相应的不同的类与接口。我将给出使用?JdbcTemplate?类框架的经典和最受欢迎的方法。这是管理所有数据库通信和异常处理的中央框架类。 ? JdbcTemplate 类JdbcTemplate 类执行 SQL 查询、更新语句和存储过程调用,执行迭代结果集和提取返回参数值。它也捕获 JDBC 异常并转换它们到 org.springframework.dao 包中定义的通用类、更多的信息、异常层次结构。 JdbcTemplate?类的实例是线程安全配置的。所以你可以配置 JdbcTemplate 的单个实例,然后将这个共享的引用安全地注入到多个 DAOs 中。 使用 JdbcTemplate 类时常见的做法是在你的 Spring 配置文件中配置数据源,然后共享数据源 bean 依赖注入到 DAO 类中,并在数据源的设值函数中创建了 JdbcTemplate。 ? 演示示例如下: (1)建立mysql数据库,并导入该脚本,库名可任意命名,这里命名为test,sql脚本为: CREATE TABLE Student( ID INT NOT NULL AUTO_INCREMENT,NAME VARCHAR(20) NOT NULL,AGE INT NOT NULL,PRIMARY KEY (ID) ); ? (2)创建实体 package com.tutorialspoint; public class Student { private Integer age; String name; Integer id; void setAge(Integer age) { this.age = age; } public Integer getAge() { return setName(String name) { this.name = name; } String getName() { setId(Integer id) { this.id = id; } Integer getId() { id; } } ? (3)创建DAO import java.util.List; javax.sql.DataSource; interface StudentDAO { /** * This is the method to be used to initialize * database resources ie. connection. */ setDataSource(DataSource ds); * This is the method to be used to create * a record in the Student table. create(String name,Integer age); * This is the method to be used to list down * a record from the Student table corresponding * to a passed student id. Student getStudent(Integer id); * This is the method to be used to list down * all the records from the Student table. public List<Student> listStudents(); * This is the method to be used to delete * a record from the Student table corresponding * to a passed student id. delete(Integer id); * This is the method to be used to update * a record into the Student table. update(Integer id,Integer age); } ? (4)创建StudentMapper java.sql.ResultSet; java.sql.SQLException; org.springframework.jdbc.core.RowMapper; class StudentMapper implements RowMapper<Student> { public Student mapRow(ResultSet rs,int rowNum) throws SQLException { Student student = new Student(); student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setAge(rs.getInt("age")); student; } } ? (5)创建StudentJDBCTemplate org.springframework.jdbc.core.JdbcTemplate; class StudentJDBCTemplate implements DataSource dataSource; JdbcTemplate jdbcTemplateObject; setDataSource(DataSource dataSource) { this.dataSource = dataSource; this.jdbcTemplateObject = JdbcTemplate(dataSource); } ; jdbcTemplateObject.update( SQL,name,age); System.out.println("Created Record Name = " + name + " Age = " + age); ; } Student getStudent(Integer id) { String SQL = "select * from Student where id = ?"; Student student = jdbcTemplateObject.queryForObject(SQL,new Object[]{id},1)"> StudentMapper()); student; } listStudents() { String SQL = "select * from Student"; List <Student> students = jdbcTemplateObject.query(SQL,1)"> students; } delete(Integer id){ String SQL = "delete from Student where id = ?"; jdbcTemplateObject.update(SQL,id); System.out.println("Deleted Record with ID = " + id ); ; } } ? (6)编写对应的Beans.xml <?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-3.0.xsd "> <!-- Initialization for data source --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="1234"/> </bean> <!-- Definition for studentJDBCTemplate bean --> <bean id="studentJDBCTemplate" class="com.tutorialspoint.StudentJDBCTemplate"> <property name="dataSource" ref="dataSource" /> </bean> </beans> ? (7)编写MainApp.java并运行 java.util.List; org.springframework.context.ApplicationContext; org.springframework.context.support.ClassPathXmlApplicationContext; MainApp { static main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); StudentJDBCTemplate studentJDBCTemplate = (StudentJDBCTemplate)context.getBean("studentJDBCTemplate"); System.out.println("------Records Creation--------" ); studentJDBCTemplate.create("Zara",11); studentJDBCTemplate.create("Nuha",2); studentJDBCTemplate.create("Ayan",15); System.out.println("------Listing Multiple Records--------" ); List<Student> students = studentJDBCTemplate.listStudents(); for (Student record : students) { System.out.print("ID : " + record.getId() ); System.out.print(",Name : " + record.getName() ); System.out.println(",Age : " + record.getAge()); } System.out.println("----Updating Record with ID = 2 -----" ); studentJDBCTemplate.update(2,20); System.out.println("----Listing Record with ID = 2 -----" ); Student student = studentJDBCTemplate.getStudent(2); System.out.print("ID : " + student.getId() ); System.out.print(",1)"> student.getName() ); System.out.println(",1)"> student.getAge()); } } ? 运行结果如下: ? 数据表数据由无变为有: ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |