加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Spring(十二)之JDBC框架

发布时间:2020-12-15 07:12:51 所属栏目:Java 来源:网络整理
导读:JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等。但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常,处理事务,到最后关闭连接。 所以当从数据库中获取数

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());      
       }
}

?

运行结果如下:

?

数据表数据由无变为有:

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读