zoukankan      html  css  js  c++  java
  • Sping-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。

    配置数据源

    在数据库springtest中创建一个数据表Student。本文使用MySQL数据库。

    DROP DATABASE IF EXISTS springtest;
    CREATE DATABASE springtest;
    CREATE TABLE Student(
     id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
     NAME VARCHAR(20) NOT NULL,
     age INT NOT NULL
    );

    现在,我们需要提供一个数据源到JdbcTemplate中,所以它可以配置本身来获得数据库访问,你可以在XML文件中配置数据源,其中一段代码如下所示:

    <bean id="dataSource" class="org.springframework.jdbc.dataSource.DriverManagerDataSource">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
            <property name="url" value="jdbc:mysql://10.0.10.33:3306/springtest"></property>
            <property name="username" value="root"></property>
            <property name="password" value="123456"></property>
        </bean>

    数据访问对象(DAO)

    DAO代表常用的数据库交互的数据库访问对象。DAOs提供一种方法来读取数据并将数据写入数据库中,它们应该通过一个接口显示此功能,应用程序的其余部分访问它们。

    在Spring中,数据访问对象(DAO)支持很容易用统一的方法使用数据访问技术,如JDBC,Hibernate,JPA或者JDO。

    Spring JDBC示例

    创建实体类Student.java

    Student.java

    package com.fpc.JdbcTemplate;
    
    public class Student {
        private Integer id;
        private String name;
        private Integer age;
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
        
        
    }

    创建数据访问对象接口文件StudentDAO.java文件:

    StudentDAO.java

    package com.fpc.JdbcTemplate.Dao;
    
    import javax.sql.DataSource;
    
    import com.fpc.JdbcTemplate.Entity.Student;
    
    import java.util.List;
    
    public interface StudentDao {
        public void setDataSource(DataSource ds);
        
        //CRUD-C
        public void create(String name,Integer age);
        
        //CRUD-R
        public void getStudent(Integer id);
        public List<Student> listStudents();
        
        //CRUD-U
        public void update(Integer id ,String name, Integer age);
        
        //CRUD-D
        public void delete(Integer id);
    }

    创建数据库表与实体类的映射类StudentMapper.java文件

    StudentMapper.java

    package com.fpc.JdbcTemplate.Mapper;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import org.springframework.jdbc.core.RowMapper;
    
    import com.fpc.JdbcTemplate.Entity.Student;
    
    public class StudentMapper implements RowMapper<Student> {
    
        @Override
        public Student mapRow(ResultSet resultSet, int rowNum) throws SQLException {
            // TODO Auto-generated method stub
            Student student = new Student();
            student.setId(resultSet.getInt("id"));
            student.setName(resultSet.getString("name"));
            student.setAge(resultSet.getInt("age"));
            return student;
        }
    
    }

    StudentDao接口的实现类StudentJDBCTemplate.java

    StudentJDBCTemplate.java

    package com.fpc.JdbcTemplate.DaoImpl;
    
    import java.util.List;
    
    import javax.sql.DataSource;
    
    import org.springframework.jdbc.core.JdbcTemplate;
    
    import com.fpc.JdbcTemplate.Dao.StudentDao;
    import com.fpc.JdbcTemplate.Entity.Student;
    import com.fpc.JdbcTemplate.Mapper.StudentMapper;
    
    public class StudentJDBCTemplate implements StudentDao {
        private DataSource dataSource;
        private JdbcTemplate jdbcTemplate;
        @Override
        public void setDataSource(DataSource ds) {
            // TODO Auto-generated method stub
            dataSource = ds;
            jdbcTemplate = new JdbcTemple(dataSource);
        }
    
        @Override
        public void create(String name, Integer age) {
            // TODO Auto-generated method stub
            String sql = "insert into Student (name,age) values(?,?)";
            jdbcTemplate.update(sql,name,age);
        }
    
        @Override
        public Student getStudent(Integer id) {
            // TODO Auto-generated method stub
            String sql = "select * from Student where id = ?";
            Student student = jdbcTemplate.queryForObject(sql, new Object[] {id},new StudentMapper());
            return student;
        }
    
        @Override
        public List<Student> listStudents() {
            // TODO Auto-generated method stub
            String sql = "select * from Student";
            List<Student> students = jdbcTemplate.query(sql,new StudentMapper());
            return students;
        }
    
        @Override
        public void update(Integer id, String name, Integer age) {
            // TODO Auto-generated method stub
            String sql = "update Student set name = ? ,age = ? where id = ?";
            jdbcTemplate.update(sql,name,age,id);
        }
    
        @Override
        public void delete(Integer id) {
            // TODO Auto-generated method stub
            String sql = "delete from Student where id = ?";
            jdbcTemplate.update(sql,id);
    
        }
    
    }

    编写测试类StudentJDBCTemplateTest.java

    package com.fpc.JdbcTemplate.Test;
    
    import java.util.List;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.fpc.JdbcTemplate.DaoImpl.StudentJDBCTemplate;
    import com.fpc.JdbcTemplate.Entity.Student;
    
    public class StudentJDBCTemplateTest {
        public static void main(String[] args) {
            ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
            StudentJDBCTemplate studentJDBCTemplate = (StudentJDBCTemplate) context.getBean("studentJDBCTemplate");
            
            //测试create功能
            studentJDBCTemplate.create("fpc", 23);
        }
    }

    Bean.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">
         <bean id="dataSource" 
          class="org.springframework.jdbc.datasource.DriverManagerDataSource">
          <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
          <property name="url" value="jdbc:mysql://10.0.10.33:3306/springtest"/>
          <property name="username" value="root"/>
          <property name="password" value="123456"/>
       </bean>
         <!-- Definition for studentJDBCTemplate bean -->
       <bean id="studentJDBCTemplate" 
          class="com.fpc.JdbcTemplate.DaoImpl.StudentJDBCTemplate">
          <property name="dataSource"  ref="dataSource" />    
       </bean>
    </beans>

    测试插入功能:

    //测试create功能
    studentJDBCTemplate.create("fpc", 23);

    查看数据库中的结果:

    测试getStudent功能

    //测试getStudent功能
            Student student = studentJDBCTemplate.getStudent(1);
            System.out.println("student'id : " + student.getId() + " student'name : " + student.getName() + " student'age : " + student.getAge());

    运行结果:

    测试update功能:

    //测试update功能
            System.out.println("before update: ");
            Student student = studentJDBCTemplate.getStudent(1);
            System.out.println("student'id : " + student.getId() + " student'name : " + student.getName() + " student'age : " + student.getAge());
            System.out.println("after update: ");
            studentJDBCTemplate.update(1, "fpc", 24);
            Student student1 = studentJDBCTemplate.getStudent(1);
            System.out.println("student'id : " + student1.getId() + " student'name : " + student1.getName() + " student'age : " + student1.getAge());

    测试listStudents功能:

    //测试listStudent功能
            studentJDBCTemplate.create("Lily", 25);
            List<Student> list = studentJDBCTemplate.listStudents();
            for (Student student : list ) {
                System.out.println("student'id : " + student.getId() + " student'name : " + student.getName() + " student'age : " + student.getAge());
            }

    测试delete功能:

    //测试delete功能
            System.out.println("before delete: ");
            List<Student> list1 = studentJDBCTemplate.listStudents();
            for (Student student : list1 ) {
                System.out.println("student'id : " + student.getId() + " student'name : " + student.getName() + " student'age : " + student.getAge());
            }
            studentJDBCTemplate.delete(1);
            
            System.out.println("after delete: ");
            List<Student> list = studentJDBCTemplate.listStudents();
            for (Student student : list ) {
                System.out.println("student'id : " + student.getId() + " student'name : " + student.getName() + " student'age : " + student.getAge());
            }

    运行结果:

  • 相关阅读:
    软考过后
    最近
    软考复习初体验
    再看提高班
    C语言深入学习系列 字节对齐&内存管理
    C++ 阶段一(已完成)
    小弟,开博学习了!!
    [学习心得] 我总结的进制转换
    《深入浅出设计模式》一书学习(.net版—简单工厂)
    安装mysql 获得 mysql.h 建立C接口
  • 原文地址:https://www.cnblogs.com/fangpengchengbupter/p/7890743.html
Copyright © 2011-2022 走看看