Spring | Spring的“数据库开发“ (Srping JDBC)

目录:

    • [Spring JDBC](#Spring JDBC)
      • [1.Spring JDBC的核心类 ( JdbcTemplate类 )](#1.Spring JDBC的核心类 ( JdbcTemplate类 ))
      • [2.Srping JDBC 的配置](#2.Srping JDBC 的配置)
      • 3.JdbcTemplate类的"常用方法"
        • [execute( ):直接执行"sql语句",没有返回值](#execute( ):直接执行“sql语句”,没有返回值)
        • [update( ) :"增删改",返回 "影响的行数"](#update( ) :“增删改”,返回 “影响的行数”)
        • [query( ) : "查询",返回 "T类型 / List类型" 的结果](#query( ) : “查询”,返回 “T类型 / List类型” 的结果)

作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习!

该文章参考学习教材 为:
《Java EE企业级应用开发教程 (Spring + Spring MVC +MyBatis)》 黑马程序员 / 编著

文章以课本知识点 + 代码为主线,结合自己看书学习过程中的理解和感悟 ,最终成就了该文章

文章用于本人学习使用 , 同时希望能帮助大家。

欢迎大家点赞👍 收藏⭐ 关注💖哦!!!

(侵权教材方可联系我,进行删除,如果雷同,纯属巧合)


Spring JDBC

SpringJDBC模块 负责数据库资源管理错误处理 ,大大简化了 开发人员对数据库的操作 ,使得开发人员可以从烦琐的数据库操作中解脱出来 ,从而将更多的精力投入到编写业务逻辑中

1.Spring JDBC的核心类 ( JdbcTemplate类 )

  • 针对数据库的操作 ,Spring 框架 (Spring JDBC )提供了 JdbcTemplate类,该类是Spring框架数据抽象层基础,其他更高层次的抽象类却是构建于JdbcTemplate类之上。

  • JdbcTemplate 类是Spring JDBC核心类

  • JdbcTemplate继承 / 实现 关系 为 :

    抽象类 赋予JdbcTemplate属性接口 赋予JdbcTemplate操作的方法,具体内容如下 :

    一、
    JdbcTemplate 继承 抽象类 JdbcAccessorJdbcAccessor 是 JdbcTemplate的直接父类 ,该 (JdbcAccessor) 为子类 (JdbcTemplate) 提供了一些访问数据库时使用公共属性

    DataSource : 其主要功能是获取数据库连接具体实现时 还可以引入对数据库连接
    冲池分布式事务的支持 ,它可以作为访问数据库资源的标准接口。

    SQLExceptionTranslator

    org.springframework.jdbc support.SQLExceptionTranslator 接口负责对 SQLException 进行转译工作 。通过必要的设置 或者 获取SQLExceptionTranslator中的方法 ,可以使 JdbcTemplate 在需要处理SQLException时,委托SQLExceptionTranslator实现类完成相关的转译工作

    二、
    JdbcTemplate 实现了 JdbcOperations 接口。JdbcOperations接口定义 了在JdbcTemplate 类中可以使用的操作集合 ,包括 添加修改查询删除 等操作。

2.Srping JDBC 的配置

  • Spring JDBC模块 主要由 4个包 组成,分别是core (核心包)dataSource (数据源包)object (对象包)support (支持包)

  • 想实现 Spring JDBC功能,要进行Spring JDBC配置 :
    配置 core (核心包) 中的 JdbcTemplate 类
    配置 dataSource (数据源包) 中的 DriverManagerDataSource类

    (在 applicationContext.xml 中进行配置)

包名 说明
core包 (要配置JdbcTemplate 类) ① 包含了JDBC核心功能,包括 JdbcTemplate 类SimpleJdbcInsert类SimpleJdbcCall类 以及 NamedParameterJdbcTemplate类 。 ② 定义JdbcTemplate 时,要将已经配置好的dataSource 注入到JdbcTemplate中。
dataSource包 (要配置dataSource 数据源 : DriverManagerDataSource类 ) ① 访问数据源实用工具类,它有多种数据源实现 ,可以在Java EE容器外部测试JDBC代码。 ② 在配置文件中配置dataSource其的类 为 :org.springframework.jdbc.datasource.DriverManagerDataSource ③ 配置 dataSource4个属性分别为 : 数据库驱动url用户名密码 ps : 配置dataSource的例子在下面。
object包 面向对象的方式访问数据库 ,它允许执行查询 并将返回结果 作为业务对象 ,可以在数据表的列业务对象的属性 之间映射查询结果
support包 包含了coreobject包支持类 ,例如,提供异常转换功能的SQLException类
  • dataSource4个属性

    ( 在以下的dataSource4个属性applicationContext.xml中完成配置 )

    属性名 含义
    driverClassName 使用驱动名词 ,对应驱动JAR包 中工的Driver类。 如 :<property name ="driverClassName " value ="com.mysql.jdbc.Driver"/>
    url 数据源所在地址。 如 :<property name ="url " value="jdbc:mysql://localhost:3306/spring"/>
    username 访问数据库的用户名。 如: <property name="username" value="root"/>
    password 访问数据库的密码。 如 : <property name="password" value="root"/>
  • Srping JDBC配置 的 "配置模板 " / 例子
    Spring JDBC要添 JAR包 : (配置JAR包)
    Spring的核心JAR包

    ②****Spring JDBC开发所需JARmysql数据库的驱动JAR包 (mysql-connector-java.jar) 、Srpring的JDBC的JAR包 (spring-jdbc.jar) 、Spring事务处理的JAR包(spring-tx.jar)。

    获取spring框架基本核心jar包
    获取Spring JDBC 开发需要的jar包
    jar包 / maven( 依赖 ) 下载( 可自行按需下载JAR )

    ps :

    如有报错版本问题 ,可看情况判断是否需要更换JAR版本


    applicationContext.xml

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.xsd">

<!--
①该配置文件中可添加、配置管理Bean
②可配置Spring AOP (AspectJ等)的配置信息
③当然也可以配置Spring JDBC等的配置信息
-->

<!-- 1.配置数据源 (与Spring JDBC中的dataSource模块有关)   -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <!-- 数据库驱动   -->
  <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  <!-- url   -->
  <property name="url" value="jdbc:mysql://localhost:3306/spring"/>
  <!-- 用户名   -->
  <property name="username" value="root"/>
  <!-- 密码   -->
  <property name="password" value="root"/>
</bean>

<!--  2.配置JDBC模板 / 配置JdbcTemplate (与Spring JDBC中的core模块有关)  -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  <!--  默认必须使用数据源 -->
  <property name="dataSource" ref="dataSource"/>
</bean>

</beans>

在上述applicationContext.xml 中,定义了 3个Bean,分别是 dataSourejdbcTemplate 和 需要注入类Bean

其中 dataSource 对应 的org.springframework.jdbc.datasource. DriverManagerDataSource 类用于对数据源进行配置
jdbcTemplate 对应的org.springframework.jdbc.core. JdbcTemplate 类用于定义了JdbcTemplate的相关配置。

dataSource4个属性 ,需要根据数据库类型 或者机器配置 的不同设置相应的属性值。例如果数据库类型不同需要更改驱动名称 ;如果数据库不在本地 ,则需要将地址中的 localhost 替换成相应的主机IP ;如果修改过MySQL数据库的端口号 (默认为3306 ),则需要加上修改后的端口号,如果没修改,则端口号可以省略。

3.JdbcTemplate类的"常用方法"

JdbcTemplate类 中,提供了大量的更新查询数据库方法,我们就是使用这些方法操作数据库的。

execute( ):直接执行"sql语句",没有返回值
  • execute (String sql) 方法 : 执行 指定的 SQL 语句。该方法是==没有返回值==的。

    例子如 :

    第一步、建好项目、导入所需依赖、打开doc窗口,指定确定存在数据库 (如: use spring)

    ​ 此时spring 这个 "数据库 " 中并没有 "数据表"。

    第二步、配置applicationContext.xml

    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.xsd">
    
        <!--
          该配置文件中可以配置Spring JDBC等的配置信息
        -->
    
        <!-- 1.配置数据源 (与Spring JDBC中的dataSource模块有关)   -->
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <!-- 数据库驱动   -->
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            <!-- url   -->
            <property name="url" value="jdbc:mysql://localhost:3306/spring"/>
            <!-- 用户名   -->
            <property name="username" value="root"/>
            <!-- 密码   -->
            <property name="password" value="root"/>
        </bean>
    
        <!--  2.配置JDBC模板 / 配置JdbcTemplate (与Spring JDBC中的core模块有关)  -->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <!--  默认必须使用数据源 -->
            <property name="dataSource" ref="dataSource"/>
        </bean>
    
    </beans>

    第三步、创建 JdbcTemplateTest测试类测试 JdbcTemplate类中的 execute( )方法的使用情况 :

    java 复制代码
    package com.myh.jdbc;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jdbc.core.JdbcTemplate;
    
    public class JdbcTemplateTest { //在该测试类中使用 execute()方法建数据库中的"表"
        public static void main(String[] args) {
            //加载配置文件
            ApplicationContext applicationContext =
                    new ClassPathXmlApplicationContext("com/myh/jdbc/applicationContext.xml");
            //从IOC容器中获得 JdbcTemplate 实例
            JdbcTemplate jdbcTemplate = (JdbcTemplate) applicationContext.getBean("jdbcTemplate");
    
            String sql = "create table student(" +
                    "id int primary key auto_increment," +
                    "username varchar(50)," +
                    "hobby varchar(50))";
            /*
              execute()方法作用 : 执行sql语句
             */
            jdbcTemplate.execute(sql);
            System.out.println("创建student表成功!");
        }
    }

    运行效果图
    doc窗口 ,输入 "show tables"命令,判断execute( )方法是否成功执行

控制台输入 如下 :

由两个效果图可知,程序 使用execute( String sql )方法 执行的sql 语句成功创建student表

update( ) :"增删改",返回 "影响的行数"
  • update()方法 : 可以完成 插入更新删除数据 的操作,有返回值 : 返回影响的行数
    JdbcTemplate类中 ,提供了一系列的
    update( )方法,其常用方法如下所示 :
方法 说明
int update( String sql ) 该方法是最简单update 方法重载形式 ,它直接执行 传入的SQL语句 ,并 返回受影响行数
int update( PreparedStatementCreator psc ) 该方法执行PreparedStatementCreator返回的语句 ,然后返回受影响的行数
int update( String sql,PreparedStatementSetter ) 该方法通过PreparedStatementSetter 设置SQL语句中参数,并返回受影响的行数
int update( String sql,Object...args ) ★★★★★ ( 常用 ) 该方法 使用Object...设置SQL语句中参数要求参数不能为NULL ,并 返回受影响的行数。 (将设置的参数填充到占位符?中

update( ) 方法例子 :进行"增删改 "操作。
Student.java

java 复制代码
package com.myh.jdbc;

public class Student {
    private Integer id; //学生id
    private String username; //用户名
    private String hobby;

     /*
      getter/setter方法
     */
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    //重写toString()方法
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", hobby='" + hobby + '\'' +
                '}';
    }
}

StudentDao.java (接口) :

java 复制代码
package com.myh.jdbc;

public interface StudentDao {  //在该接口中定义"添加"、"更新"、"删除"的Student的方法
    //添加
    public int addStudent(Student student);
    //更新
    public int updateStudent(Student student);
    //删除
    public int deleteStudent(int id);
}

StudentDaoImpl.java实现类

java 复制代码
package com.myh.jdbc;

import org.springframework.jdbc.core.JdbcTemplate;
public class StudentDaoImpl implements StudentDao{ //该类为StudentDao接口的"实现类"

    //声明JdbcTemplate属性
    private JdbcTemplate jdbcTemplate;

    //为JdbcTemplate属性 添加setter方法
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    /**
      添加
     */
    @Override
    public int addStudent(Student student) {
        /*
          sql语句,此处的占位符?通过下面的Object参数进行填充
         */
        String sql = "insert into student(username,hobby) values(?,?)";
        //定义数组来存储sql语句中的参数 (将Student类中存储的数组放进数组中)
        Object[] obj = new Object[]{student.getUsername(),student.getHobby()};
        //通过 update(String sql)执行操作,返回值为: sql语句影响的行数
        int num = this.jdbcTemplate.update(sql,obj); //返回sql语句影响的行数
        return num;
    }

    /**
     * 更新
     */
    @Override
    public int updateStudent(Student student) {
        String sql = "update student set username = ?,hobby = ? where id = ?";
        //定义要用在update()方法中的参数
        Object[] params = new Object[]{student.getUsername(), student.getHobby(), student.getId()};
        int num = this.jdbcTemplate.update(sql, params);
        return num;
    }

    /**
     * 删除
     */
    @Override
    public int deleteStudent(int id) {
        String sql = "delete from student where id = ?";
        //执行删除操作,返回影响的行数
        int num = this.jdbcTemplate.update(sql, id);
        return num;
    }
}

applicationContext.xml

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.xsd">

    <!--
      该配置文件中可以配置Spring JDBC等的配置信息
    -->

    <!-- 1.配置数据源 (与Spring JDBC中的dataSource模块有关)   -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <!-- 数据库驱动   -->
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <!-- url   -->
        <property name="url" value="jdbc:mysql://localhost:3306/spring"/>
        <!-- 用户名   -->
        <property name="username" value="root"/>
        <!-- 密码   -->
        <property name="password" value="root"/>
    </bean>

    <!--  2.配置JDBC模板 / 配置JdbcTemplate (与Spring JDBC中的core模块有关)  -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!--  默认必须使用数据源 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>

   <!--
     定义一个id 为"studentDao" 的Bean,该Bean用于将"jdbcTemplate"类注入到"studentDao"这个实例中,因为实例中要用到该对象
     -->
    <bean id="studentDao" class="com.myh.jdbc.StudentDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"/>
    </bean>

</beans>

JdbcTemplateTest.java (测试类)

java 复制代码
package com.myh.jdbc;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

public class JdbcTemplateTest { //在该测试类中使用 execute()方法建数据库中的"表"
    
    /**
     * 进行Junit测试
     */
    @Test
    public void JunitTest() {
        //加载配置文件
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("com/myh/jdbc/applicationContext.xml");
        //从IOC容器中获得 JdbcTemplate 实例
        JdbcTemplate jdbcTemplate = (JdbcTemplate) applicationContext.getBean("jdbcTemplate");

        /*
          execute()方法作用 : 执行sql语句
         */
        jdbcTemplate.execute("select * from tb_user");
        System.out.println("数据查询成功!");
    }


    /**
     * 添加
     */
   @Test //junit4单元测试
   public void addStudentTest() {
       //加载配置文件
       ApplicationContext applicationContext =
               new ClassPathXmlApplicationContext("com/myh/jdbc/applicationContext.xml");
       //获取StudentDao实例
       StudentDao studentDao = (StudentDao) applicationContext.getBean("studentDao");
       //创建Student对象,往其中添加数据
       Student student = new Student();
       student.setUsername("张三");
       student.setHobby("打篮球");
       //添加
       int num = studentDao.addStudent(student);
       if (num > 0) {
           System.out.println("成功插入了" + num + "条数据!");
       } else {
           System.out.println("插入操作执行失败!");
       }
   }

    /**
     * 更新(修改)
     */
    @Test
    public void updateStudentTest() {
        //加载配置文件
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("com/myh/jdbc/applicationContext.xml");
        //获取StudentDao实例
        StudentDao studentDao = (StudentDao) applicationContext.getBean("studentDao");
        //创建Student对象,往其中添加数据
        Student student = new Student();
        student.setId(1);
        student.setUsername("小明");
        student.setHobby("踢足球");
        //更新(修改)
        int num = studentDao.updateStudent(student);
        if (num > 0) {
            System.out.println("成功修改了" + num + "条数据!");
        } else {
            System.out.println("修改操作执行失败!");
        }
    }


    /**
     * 删除
     */
    @Test
    public void deleteStudentTest() {
        //加载配置文件
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("com/myh/jdbc/applicationContext.xml");
        //获取StudentDao实例
        StudentDao studentDao = (StudentDao) applicationContext.getBean("studentDao");
        //删除
        int num = studentDao.deleteStudent(1);
        if (num > 0) {
            System.out.println("成功删除了" + num + "条数据!");
        } else {
            System.out.println("删除操作执行失败!");
        }
    }
}
query( ) : "查询",返回 "T类型 / List类型" 的结果
  • query( ) : 对数据库中的数据 进行查询操作
    JdbcTemplate 类中还提供了大量的query( )方法 来处理各种对数据库表查询操作

    方法 说明
    List<T> query ( String sql , RowMapper rowMapper ) ★★★★★ ( 常用 ) 执行String类型参数提供SQL语句 ,并通过 RowMapper 返回 一个List类型结果 : 可用于查询所有数据。(★★★)
    List<T> query ( String sql , PearesSatementSetter pss , RowMapper rowMapper) 根据String 类型参数提供SQL语句 创建 PreparedStatement对象 ,通过RowMapper结果 / 结果集 返回到List中。
    List<T> query ( String sql , Objecr[ ] args , RowMapper rowMapper ) 使用Obiect[ ]的值 来设置SQL语句中的参数值,采用 RowMapper回调方法 可以直接返回List类型数值
    T queryForObject ( String sql , RowMapper rowMapper , Object... args) ★★★★★ ( 常用 ) args参数绑定SQL语句中,并通过 RowMapper 返回一个Object类型单行记录 : 可用于"根据指定id " 查询数据。(★★★)
    List<T> queryForList ( String sql , Object[ ] args , class<T> ) 该方法可以 返回多行数据结果 , 但必须是返回列表elementType参数 返回的是 List元素类型
  • query( ) 方法例子 :返回 "T类型 / List类型 " 的结果 :

    Student.java

    java 复制代码
    package com.myh.jdbc;
    
    public class Student {
        private Integer id; //学生id
        private String username; //用户名
        private String hobby;
    
         /*
          getter/setter方法
         */
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getHobby() {
            return hobby;
        }
    
        public void setHobby(String hobby) {
            this.hobby = hobby;
        }
    
        //重写toString()方法
        @Override
        public String toString() {
            return "Student{" +
                    "id=" + id +
                    ", username='" + username + '\'' +
                    ", hobby='" + hobby + '\'' +
                    '}';
        }
    }

    StudentDao.java (接口)

    java 复制代码
    package com.myh.jdbc;
    
    import java.util.List;
    
    public interface StudentDao { 
    
        //根据id查询
        public Student findStudentById(int id);
        //查询所有
        public List<Student> findAllStudent();
    }

    StudentDaoImpl.java (实现类)

    java 复制代码
    package com.myh.jdbc;
    
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.core.RowMapper;
    
    import java.util.List;
    
    public class StudentDaoImpl implements StudentDao{ //该类为StudentDao接口的"实现类"
    
        /**
         *  根据id查询 :
         *  用queryForObject ( String sql , RowMapper rowMapper , Object...args) 这个方法来进行"根据id"查询数据
         *  该方法 : 将args参数绑定到sql语句中,且通过 RowMapper 返回一个Object类型的"单行记录"。
         */
        @Override
        public Student findStudentById(int id) {
            //sql语句
            String sql = "select * from student where id = ?";
            //创建一个BeanPropertyRowMapper对象
            RowMapper<Student> rowMapper = new BeanPropertyRowMapper<Student>(Student.class);
            //调用query()方法查询数据库中的数据
            Student student = this.jdbcTemplate.queryForObject(sql, rowMapper, id); //返回值为一个
            return student;
    }
    
    
        /**
         * 查询所有
         */
        @Override
        public List<Student> findAllStudent() {
            //sql语句
            String sql = "select * from student";
            //创建 BeanPropertyRowMapper 对象
            RowMapper<Student> rowMapper = new BeanPropertyRowMapper<Student>(Student.class);
            List<Student> students = this.jdbcTemplate.query(sql, rowMapper); //返回值为list集合,该集合中存储一个或多个Student类数据
            return students;
        }
    }

    applicationContext.xml

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.xsd">

    <!--
      该配置文件中可以配置Spring JDBC等的配置信息
    -->

    <!-- 1.配置数据源 (与Spring JDBC中的dataSource模块有关)   -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <!-- 数据库驱动   -->
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <!-- url   -->
        <property name="url" value="jdbc:mysql://localhost:3306/spring"/>
        <!-- 用户名   -->
        <property name="username" value="root"/>
        <!-- 密码   -->
        <property name="password" value="root"/>
    </bean>

    <!--  2.配置JDBC模板 / 配置JdbcTemplate (与Spring JDBC中的core模块有关)  -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!--  默认必须使用数据源 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>

   <!--
     定义一个id 为"studentDao" 的Bean,该Bean用于将"jdbcTemplate"类注入到"studentDao"这个实例中,因为实例中要用到该对象
     -->
    <bean id="studentDao" class="com.myh.jdbc.StudentDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"/>
    </bean>

</beans>

JdbcTemplateTest.java (测试类)

java 复制代码
package com.myh.jdbc;
	
import org.junit.Test;
	import org.springframework.context.ApplicationContext;
	import org.springframework.context.support.ClassPathXmlApplicationContext;
	import org.springframework.jdbc.core.JdbcTemplate;
import java.util.Iterator;
import java.util.List;

public class JdbcTemplateTest { 

    /**
     * 根据id来查询数据
     */
    @Test
    public void findStudentByIdTest() {
        //加载配置文件
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("com/myh/jdbc/applicationContext.xml");
        //获取StudentDao实例
        StudentDao studentDao = (StudentDao) applicationContext.getBean("studentDao");
        //执行 findStudentById()方法
        Student student = studentDao.findStudentById(1);
        System.out.println(student);
    }
    
     /**
     * 查询所有数据
     */
    @Test
    public void findAllStudentTest() {
        //加载配置文件
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("com/myh/jdbc/applicationContext.xml");
        //获取StudentDao实例
        StudentDao studentDao = (StudentDao) applicationContext.getBean("studentDao");
        //执行 findAllStudent()方法
        List<Student> allStudent = studentDao.findAllStudent();
//使用"集合"的"迭代器"遍历集合中数据
        Iterator<Student> iterator = allStudent.iterator();
while (iterator.hasNext()) {
            Student next = iterator.next();
            System.out.println(next);
        }
    }
}
相关推荐
颜淡慕潇1 分钟前
【数据库系列】 Spring Boot 集成 Neo4j 的详细介绍
java·数据库·spring boot·后端·neo4j
靖顺2 分钟前
【OceanBase 知识点】—— OceanBase 数据库开发规范最佳实践
oceanbase·数据库开发
乌啼霜满天2493 分钟前
tomcat与servlet版本对应关系
java·servlet·tomcat
爱吃土豆的程序员4 分钟前
windows tomcat 报错后如何让窗口不闪退
java·windows·tomcat·窗口闪退
呼啦啦啦啦啦啦啦啦19 分钟前
【Java多线程】wait方法和notify方法
java·开发语言
chusheng18401 小时前
Python 如何通过 cron 或 schedule 实现爬虫的自动定时运行
java·爬虫·python
有点困的拿铁1 小时前
Java中的享元模式
java·开发语言·享元模式
随心............1 小时前
python设计模式
java·开发语言·设计模式
威哥爱编程1 小时前
Java灵魂拷问13个为什么,你都会哪些?
java·面试·javaee
噜啦啦噜啦啦噜啦噜啦嘞噜啦噜啦1 小时前
源码解析-Spring Eureka
java·spring·eureka