• Spring JDBC 框架使用JdbcTemplate 类的一个实例


    JDBC 框架概述

    在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等。但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常,处理事务,到最后关闭连接。

    所以当从数据库中获取数据时,你所做的是定义连接参数,指定要执行的 SQL 语句,每次迭代完成所需的工作。

    Spring JDBC 提供几种方法和数据库中相应的不同的类与接口。我将给出使用 JdbcTemplate 类框架的经典和最受欢迎的方法。这是管理所有数据库通信和异常处理的中央框架类。

    JdbcTemplate 类

    JdbcTemplate 类执行 SQL 查询、更新语句和存储过程调用,执行迭代结果集和提取返回参数值。它也捕获 JDBC 异常并转换它们到 org.springframework.dao 包中定义的通用类、更多的信息、异常层次结构。

    JdbcTemplate 类的实例是线程安全配置的。所以你可以配置 JdbcTemplate 的单个实例,然后将这个共享的引用安全地注入到多个 DAOs 中。

    使用 JdbcTemplate 类时常见的做法是在你的 Spring 配置文件中配置数据源,然后共享数据源 bean 依赖注入到 DAO 类中,并在数据源的设值函数中创建了 JdbcTemplate。

    环境:导入: mysql-connector-java.jarorg.springframework.jdbc.jar这两个包

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

     1 package com.spring.jdbcTemplate;
     2 
     3 import java.util.List;
     4 
     5 import javax.sql.DataSource;
     6 /**
     7  * 接口StudentDao,是用来封装查询方法
     8  * @author Administrator
     9  *
    10  */
    11 
    12 public interface StudentDao {
    13     
    14     public void setDataSource(DataSource ds);
    15     //添加记录
    16     public void addStudent(String name,Integer age);
    17     //通过Student ID查询学生记录,返回值为Student类型
    18     public Student getStudentId(Integer id);
    19     //删除数据通过Student ID
    20     public void delectStudent(Integer id);
    21     //更新数据
    22     public void updata(Integer id,Integer age);
    23     //查询所有数据
    24     public List<Student> SelectAllStudent();
    25 }

    2.创建一个实体类Student:

     1 package com.spring.jdbcTemplate;
     2 
     3 public class Student {
     4     /**
     5      * 定义学生类
     6      */
     7     private String name;
     8     private Integer age;
     9     private Integer id;
    10 
    11     public Integer getId() {
    12         return id;
    13     }
    14 
    15     public void setId(Integer id) {
    16         this.id = id;
    17     }
    18 
    19     public String getName() {
    20         return name;
    21     }
    22 
    23     public void setName(String name) {
    24         this.name = name;
    25     }
    26 
    27     public Integer getAge() {
    28         return age;
    29     }
    30 
    31     public void setAge(Integer age) {
    32         this.age = age;
    33     }
    34 
    35     public void printAdvice() {
    36         System.out.println("name:" + name + ",age:" + age);
    37 
    38     }
    39 
    40 }

    3.创建一个StudentMapper.java 文件,用来映射结果集(通常用于查询语句~)内容如下:

     1 package com.spring.jdbcTemplate;
     2 
     3 import java.sql.ResultSet;
     4 import java.sql.SQLException;
     5 
     6 import org.springframework.jdbc.core.RowMapper;
     7 
     8 public class StudentMapper implements RowMapper<Student>{
     9     /**
    10      * 接口RowMapper被JdbcTemplate 用来映射每一行结果集的数据  
    11      * JdbcTemplate 用来执行query方法或者调用存储过程 包含方法mapRow(ResultSet rs, int rowNum)
    12      * 第一个参数表示获取到的结果集、第二个表示结果集中获取到的结果个数,通常用于查询语句~
    13      */
    14     @Override
    15     public Student mapRow(ResultSet rs, int row) throws SQLException {
    16         Student student=new Student();
    17         student.setId(rs.getInt("id"));
    18         student.setName(rs.getString("name"));
    19         student.setAge(rs.getInt("age"));
    20         return student;
    21     }
    22 
    23 }

    4.下面是为定义的 DAO 接口 StudentDAO 的实现类文件 StudentJDBCTemplate.java,具体实现到数据库的操作

     1 package com.spring.jdbcTemplate;
     2 
     3 import java.util.List;
     4 
     5 import javax.sql.DataSource;
     6 
     7 import org.springframework.jdbc.core.JdbcTemplate;
     8 /**
     9  * 利用Spring 内置jdbc JdbcTemplate来实现StudentDao接口,连接数据库。
    10  * @author Administrator
    11  *
    12  */
    13 public class StudentJdbcTemplate implements StudentDao {
    14     private DataSource dataSource;
    15     private JdbcTemplate jdbcTemplateObject;
    16 
    17     // 设置数据源
    18     @Override
    19     public void setDataSource(DataSource dataSource) {
    20         this.dataSource = dataSource;
    21         this.jdbcTemplateObject = new JdbcTemplate(dataSource);
    22     }
    23 
    24     // 添加学生数据
    25     @Override
    26     public void addStudent(String name, Integer age) {
    27         String sql = "insert into Student(name,age) value(?,?)";
    28         jdbcTemplateObject.update(sql, name, age);
    29         System.out.println("Created Record Name = " + name + " Age = " + age);
    30         return;
    31     }
    32 
    33     // 查询学生
    34     @Override
    35     public Student getStudentId(Integer id) {
    36         String sql = "select * from Student where id=?";
    37         Student student = jdbcTemplateObject.queryForObject(sql, new Object[] { id }, new StudentMapper());
    38         return student;
    39     }
    40 
    41     // 删除学生记录
    42     @Override
    43     public void delectStudent(Integer id) {
    44         String sql = "delete  from Student where id=?";
    45         jdbcTemplateObject.update(sql, id);
    46         System.out.println("Deleted Record with ID = " + id);
    47         return;
    48     }
    49     //更新数据
    50     @Override
    51     public void updata(Integer id,Integer age) {
    52         String SQL = "update Student set age = ? where id = ?";
    53         jdbcTemplateObject.update(SQL, age, id);
    54         System.out.println("Updated Record with ID = " + id);
    55         return;
    56     }
    57     //查询所有数据
    58     @Override
    59     public List<Student> SelectAllStudent() {
    60         String SQL = "select * from Student";
    61         List<Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());
    62         return students;
    63     }
    64 
    65 
    66 }

    5.建立一个 MainApp.java 文件,用于测试。内容如下:

     1 package com.spring.jdbcTemplate;
     2 
     3 import java.util.List;
     4 
     5 import org.springframework.context.support.ClassPathXmlApplicationContext;
     6 import org.springframework.jdbc.core.JdbcTemplate;
     7 
     8 public class MainApp {
     9 
    10     public static void main(String[] args) {
    11         ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring_xml/bean.xml");
    12             //获取getBean("StudentJdbcTemplate")对象,调用其方法操作数据库
    13         StudentJdbcTemplate jdbcTemplate = (StudentJdbcTemplate)applicationContext.getBean("StudentJdbcTemplate");
    14         
    15             //插入数据
    16         /*    jdbcTemplate.addStudent("张三", 23);
    17             jdbcTemplate.addStudent("李四", 24);
    18             jdbcTemplate.addStudent("王五", 25);
    19             jdbcTemplate.addStudent("赵六", 26);
    20             jdbcTemplate.addStudent("田七", 27);*/
    21             
    22             //查询所有数据
    23         /*    List<Student> list=jdbcTemplate.SelectAllStudent();
    24             for(Student student:list){
    25                 System.out.println(student.getId()+student.getName()+student.getAge());
    26             }*/
    27             //查询单条记录
    28         /*    Student student=jdbcTemplate.getStudentId(1);
    29             System.out.println(student.getId()+student.getName()+student.getAge());*/
    30             
    31             //删除单条记录
    32             /*jdbcTemplate.delectStudent(2);*/
    33             
    34             //更新数据
    35             jdbcTemplate.updata(3, 45);
    36     }
    37 
    38 }

     

    测试结果:

  • 相关阅读:
    Golang gRPC 入门
    ProtoBuf编解码
    Proto3语法入门
    Golang RPC入门
    Windows用mstsc(远程桌面)远程Ubuntu 12.04时无法显示Ubuntu桌面解决办法
    ABAPSM30配置TCODE
    eclipselog4j.properties配置
    Hadoop—配置3个副本,但是实际只有1个副本。
    Hadoop—org.apache.hadoop.io.nativeio.NativeIO$Windows.access0
    Jmeter BeanShell使用场景
  • 原文地址:https://www.cnblogs.com/ysource/p/12869779.html
Copyright © 2020-2023  润新知